小程序原生 API

微信原生 API

1. API 基础

小程序开发框架提供丰富的微信原生 API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等,几乎所有小程序的 API 都挂载在 wx 对象底下,例如:wx.chooseMedia()wx.request(), wx 对象实际上就是小程序的宿主环境微信所提供的全局对象

通常,在小程序 API 有以下几种类型:

  1. 事件监听 API:约定以 on 开头 API 用来监听某个事件是否触发,例如:wx.onThemeChange()
  2. 同步 API:约定以 Sync 结尾的 API 都是同步 API,例如:wx.setStorageSync()
  3. 异步 API:大多数 API 都是异步 API,例如:wx.setStorage()

异步 API 支持 callback & Promise 两种调用方式:

  1. 当接口参数 Object 对象中不包含 success/fail/complete 时将默认返回 Promise

  2. 部分接口如 request, uploadFile 本身就有返回值,因此不支持 Promise 风格的调用方式,它们的 promisify 需要开发者自行封装。

小程序 API 介绍

微信小程序 API 文档

2. 网络请求

知识点:

在微信小程序中,如果需要发起 HTTPS 网络请求需要使用:wx.request(),语法如下:

wx.request({// 接口地址,仅为示例,并非真实的接口地址url: 'example.php',// 请求的参数data: { x: '' },// 请求方式method: 'GET|POST|PUT|DELETE',success (res) {console.log(res.data)},fail(err) {console.log(err)}
})

注意:wx.request() 请求的域名需要在小程序管理平台进行配置,如果小程序正式版使用wx.request请求未配置的域名,在控制台会有相应的报错。

这时候就需要在小程序管理后台进行设置请求的域名,打开微信公众后台:点击左侧 开发 → 开发管理 → 开发设置 → 服务器域名。域名只支持 https 而且要求已备案

但一般我们在开发阶段时,处于开发阶段的服务器接口可能还没部署到对应的域名下,经常会通过另一个域名来进行开发调试,考虑到这一点,为了方便开发者进行开发调试,开发者工具、小程序的开发版和小程序的体验版在某些情况下允许 wx.request 请求任意域名 (只适用于开发环境,只能在小程序开发者工具中生效),在开发工具中设置步骤如下:

不校验合法域名、web-view (业务域名)、TLS版本以及HTTPS证书 勾选上:

​

📌 注意事项:

​ 这两种方式只适用于开发者工具、小程序的开发版和小程序的体验版

​ 项目上线前必须在小程序管理平台进行合法域名的配置

落地代码:

Page({// 页面的初始数据data: {},// 获取数据getPostInfo() {wx.request({url: 'https://jsonplaceholder.typicode.com/posts/1',method: 'GET',success(res) {console.log(res)},fail(err) {console.log(err)}})},// coding...
}

3. 界面交互

小程序还提供了一些用于界面交互的 API,如消息提示框、模态对话框、 loading 提示框等等

3.1 loading 提示框

知识点:

小程序提供了一些用于界面交互的 API,例如: loading 提示框、消息提示框、模态对话框等 API。

loading 提示框常配合网络请求来使用,用于增加用户体验,对应的 API 有两个:

  1. wx.showLoading 显示加载提示框
  2. wx.hideLoading 隐藏加载提示框

语法如下:

wx.showLoading({title: '提示内容', // 提示的内容mask: true, // 是否显示透明蒙层,防止触摸穿透success() {}, // 接口调用成功的回调函数fail() {} // 接口调用失败的回调函数
})

官方文档:

wx.showLoading 官方文档

wx.hideLoading 官方文档

落地代码:

Page({data: {list: []},// 获取数据getData () {+     // 显示 loading 提示框
+     wx.showLoading({
+       // 用来显示提示的内容
+       // 提示的内容不会自动换行,如果提示的内容比较多,因为在同一行展示
+       // 多出来的内容就会被隐藏
+       title: '数据加载中...',
+       // 是否展示透明蒙层,防止触摸穿透
+       mask: true
+     })// 如果需要发起网络请求,需要使用 wx.request APIwx.request({// 接口地址url: 'https://gmall-prod.atguigu.cn/mall-api/index/findBanner',// 请求方式method: 'GET',// 请求参数data: {},// 请求头header: {},// API 调用成功以后,执行的回调success: (res) => {// console.log(res)if (res.data.code === 200) {this.setData({list: res.data.data})}},// API 调用失败以后,执行的回调fail: (err) => {console.log(err)},// API 不管调用成功还是失败以后,执行的回调complete: (res) => {// console.log(res)+         // 关掉 loading 提示框
+         // hideLoading 和 showLoading 必须结合、配对使用才可以
+         wx.hideLoading()}})}})
3.2 模态对话框以及消息提示框

知识点:

wx.showToast():消息提示框用来根据用户的某些操作来告知操作的结果,如退出成功给用户提示,提示删除成功等,语法如下:

wx.showToast({title: '标题', // 提示的内容duration: 2000, // 提示的延迟时间mask: true, // 是否显示透明蒙层,防止触摸穿透icon: 'success', // 	图标success() {}, // 接口调用成功的回调函数fail() {} // 接口调用失败的回调函数
})

wx.showModal() 模态对话框也是在项目中频繁使用的一个小程序 API,通常用于向用户询问是否执行一些操作,例如:点击退出登录,显示模态对话框,询问用户是否真的需要退出等等

wx.showModal({title: '提示', // 提示的标题content: '您确定执行该操作吗?', // 提示的内容confirmColor: '#f3514f',// 接口调用结束的回调函数(调用成功、失败都会执行)success({ confirm }) {confirm && consle.log('点击了确定')}
})

官方文档:

wx.showToast 官方文档

wx.showModal 官方文档

落地代码:

Page({// coding...// 删除商品async delHandler () {// showModal 显示模态对话框const { confirm } = await wx.showModal({title: '提示',content: '是否删除该商品 ?'})if (confirm) {// showToast 消息提示框wx.showToast({title: '删除成功',icon: 'none',duration: 2000})} else {wx.showToast({title: '取消删除',icon: 'error',duration: 2000})}}// coding...})

4. 本地存储

小程序中也能够像网页一样支持本地数据缓存,本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在用户关闭小程序重新打开时可以恢复之前的状态。我们还可以利用本地缓存一些服务端非实时的数据提高小程序获取数据的速度,在特定的场景下可以提高页面的渲染速度,减少用户的等待时间。其包含以下 8个主要的 API

同步 API异步 API作用
wx.setStorageSyncwx.setStorage将数据存储在本地缓存中指定的 key 中
wx.getStorageSyncwx.getStorage从本地缓存中同步获取指定 key 的内容
wx.removeStorageSyncwx.removeStorage从本地缓存中移除指定 key
wx.clearStorageSyncwx.clearStorageSync清理本地数据缓存

异步方式的 API,在调用的时候都需要传入对象类型的参数

同步方式执行的 API 在使用时简洁比较好,缺点是同步会阻塞程序执行,执行效率上相较异步版本要差一些。

📌 注意事项

  1. 对象类型的数据,可以直接进行存储,无需使用 JSON.stringify 转换
  2. 对象类型的数据存的时候没有使用转换,因此获取的时候也不需要使用 JSON.parse 转换

落地代码:

<button type="primary" bindtap="handler" size="mini" plain bindtap="setData">存储数据
</button><button type="primary" bindtap="handler" size="mini" plain bindtap="getData">获取数据
</button><button type="warn" bindtap="handler" size="mini" plain bindtap="delData">删除数据
</button><button type="warn" bindtap="handler" size="mini" plain bindtap="clearData">移除数据
</button>
Page({// 将数据存储到本地setStorage () {// 第一个参数:本地存储中指定的 key// 第二个参数:需要存储的数据// wx.setStorageSync('num', 1)// 在小程序中// 如果存储的是对象类型数据,不需要使用 JSON.stringify 和 JSON.parse 进行转换// 直接进行存储和获取即可// wx.setStorageSync('obj', { name: 'tom', age: 10 })// ------------------- 异步 API -------------------wx.setStorage({key: 'num',data: 1})wx.setStorage({key: 'obj',data: { name: 'jerry', age: 18 }})},// 获取本地存储的数据async getStorage () {// 从本地存储的数据中获取指定 key 的数据、内容// const num = wx.getStorageSync('num')// const obj = wx.getStorageSync('obj')// console.log(num)// console.log(obj)// ------------------- 异步 API -------------------const { data } = await wx.getStorage({key: 'obj'})console.log(data)},// 删除本地存储的数据removeStorage () {// 从本地移除指定 key 的数据、内容// wx.removeStorageSync('num')// ------------------- 异步 API -------------------wx.removeStorage({key: 'num'})},// 清空本地存储的全部数据clearStorage () {// wx.clearStorageSync()// ------------------- 异步 API -------------------wx.clearStorage()},})

5. 路由与通信

知识点:

在小程序中实现页面的跳转,有两种方式:

  1. 声明式导航:navigator 组件
  2. 编程式导航:使用小程序提供的 API
    • wx.navigateTo():保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabbar 页面
    • wx.redirectTo():关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面
    • wx.switchTab():跳转到 tabBar 页面,路径后不能带参数
    • wx.navigateBack():关闭当前页面,返回上一页面或多级页面
  3. 路径后可以带参数,参数需要在跳转到的页面的 onLoad 钩子函数中通过形参进行接收
    • 参数与路径之间使用 ? 分隔
    • 参数键与参数值用 = 相连
    • 不同参数用 & 分隔
    • 例如 path?key=value&key2=value2

落地代码:

Page({navigateTo() {// 保留当前页面,跳转到应用中其他页面,不能跳转到 tabBar 页面wx.navigateTo({url: '/pages/list/list?id=1&name=tom'// url: '/pages/cate/cate'})},redirectTo() {// 关闭(销毁)当前页面,跳转到应用中其他页面,不能跳转到 tabBar 页面wx.redirectTo({url: '/pages/list/list?id=1&name=tom'// url: '/pages/cate/cate'})},switchTab() {// 跳转到 tabBar 页面,不能跳转到 非 tabBar 页面,路径后面不能传递参数wx.switchTab({// url: '/pages/list/list'url: '/pages/cate/cate?id=1&name=tom'})},reLaunch() {// 关闭所有的页面,然后跳转到应用中某一个页面wx.reLaunch({url: '/pages/list/list?id=1&name=tom'// url: '/pages/cate/cate?id=1&name=tom'})}})
// list.js
Page({navigateBack() {// 关闭当前页面,返回上一页或者返回多级页面// 默认返回上一页wx.navigateBack({delta: 1})},onLoad(options) {console.log(options)}})

6. 事件监听-上拉加载更多

上拉加载是小程序中常见的一种加载方式,当用户滑动页面到底部时,会自动加载更多的内容,以便用户继续浏览

小程序中实现上拉加载的方式:

1.在 app.json 或者 page.json 中配置距离页面底部距离: onReachBottomDistance;默认 50px

2.在 页面.js 中定义 onReachBottom 事件监听用户上拉加载

​

落地代码:

<view wx:for="{{ numList }}" wx:key="*this">{{ item }}</view>
/* pages/market/market.wxss */view {height: 400rpx;display: flex;align-items: center;justify-content: center;
}view:nth-child(odd) {background-color: lightskyblue;
}view:nth-child(even) {background-color: lightsalmon;
}
Page({data: {numList: [1, 2, 3]},// 监听用户上拉加载onReachBottom() {// console.log('监听用户上拉加载')// 产品需求:// 当用户上拉,需要数字进行累加// 当用户上拉加载时,需要对数字进行累加,每次累加 3 个数字// 目前是 [1, 2, 3],[1, 2, 3, 4, 5, 6]// 怎么进行追加 ?// 获取目前数组中最后一项 n,n + 1, n + 2, n + 3wx.showLoading({title: '数据加载中...'})setTimeout(() => {// 获取数组的最后一项const lastNum = this.data.numList[this.data.numList.length - 1]// 定义需要追加的元素const newArr = [lastNum + 1, lastNum + 2, lastNum + 3]this.setData({numList: [...this.data.numList, ...newArr]})wx.hideLoading()}, 1500)}})

7. 事件监听-下拉刷新

下拉刷新是小程序中常见的一种刷新方式,当用户下拉页面时,页面会自动刷新,以便用户获取最新的内容。

小程序中实现上拉加载更多的方式:

1.在 app.json 或者 page.json 中开启允许下拉,同时可以配置 窗口、loading 样式等

2.在 页面.js 中定义 onPullDownRefresh 事件监听用户下拉刷新

​

落地代码:

<view wx:for="{{ numList }}" wx:key="*this">{{ item }}</view>
/* pages/market/market.wxss */view {height: 400rpx;display: flex;align-items: center;justify-content: center;
}view:nth-child(odd) {background-color: lightskyblue;
}view:nth-child(even) {background-color: lightsalmon;
}
Page({data: {numList: [1, 2, 3]},// 监听用户上拉加载onReachBottom() {// coding...},// 监听用户下拉刷新onPullDownRefresh () {// console.log('监听用户下拉刷新')// 产品需求:// 当用户上拉加载更多以后,如果用户进行了下拉刷新// 需要将数据进行重置this.setData({numList: [1, 2, 3]})// 在下拉刷新以后,loading 效果有可能不会回弹回去if (this.data.numList.length === 3) {wx.stopPullDownRefresh()}}})

8. 增强 scroll-view

8.1 scroll-view 上拉加载

知识点

bindscrolltolower:滚动到底部/右边时触发

lower-threshold:距底部/右边多远时,触发 scrolltolower 事件

enable-back-to-top:让滚动条返回顶部,iOS 点击顶部状态栏、安卓双击标题栏时,只支持竖向

落地代码:

<scroll-viewclass="scroll-y"scroll-ylower-threshold="100"bindscrolltolower="getMore"enable-back-to-top
><view wx:for="{{ arr }}" wx:key="*this">{{ item }}</view></scroll-view>
// index.js
Page({data: {arr: [1, 2, 3]},// 上拉加载更多getMore() {wx.showLoading({title: '数据正在加载中...'})setTimeout(() => {// 记录当前数组的最后一个元素let lastNum = this.data.arr[this.data.arr.length - 1]// 最后一个元素加 1lastNum++// 每次向数组中新增三项const newArr = [lastNum, lastNum + 1, lastNum + 2]this.setData({arr: [...this.data.arr, ...newArr]})// 数据返回,隐藏 Loadingwx.hideLoading()wx.showToast({title: '数字请求完毕,上滑继续浏览',icon: 'none'})}, 1000)}
})
8.2 scroll-view 下拉刷新

知识点:

refresher-enabled:开启自定义下拉刷新

refresher-default-style自定义下拉刷新默认样式支持设置 black | white | none, none 表示不使用默认样式

refresher-background:自定义下拉刷新区域背景颜色

bindrefresherrefresh:自定义下拉刷新状态回调

refresher-triggered:设置当前下拉刷新状态,(true 下拉刷新被触发,false 表示下拉刷新未被触发,用来关闭下拉效果)

落地代码:

<scroll-viewclass="scroll-y"scroll-ylower-threshold="100"bindscrolltolower="getMore"enable-back-to-toprefresher-enabledrefresher-default-style="black"refresher-background="#f7f7f8"refresher-triggeredbindrefresherrefresh="onrefresh"refresher-triggered="{{ triggered }}"
><view wx:for="{{ arr }}" wx:key="*this">{{ item }}</view></scroll-view>
// index.js
Page({data: {triggered: false, // 控制 scroll-view 下拉刷新效果arr: [1, 2, 3]},// scroll-view 下拉刷新回调函数onrefresh() {wx.showLoading({title: '数据正在加载中...'})// 定时器模拟网络请求,1 秒后数据返回setTimeout(() => {// 重置数据this.setData({arr: [1, 2, 3]})// 数据返回,隐藏 Loadingwx.hideLoading()wx.showToast({title: '下拉刷新完成,数据已重置...',icon: 'none'})// 数据返回,关闭 scroll-view 下拉刷新效果this.setData({triggered: false})}, 1000)}
})
8.3 增强 scroll-view 完整代码
<scroll-viewscroll-yclass="scroll-y"lower-threshold="100"bindscrolltolower="getMore"enable-back-to-toprefresher-enabledrefresher-default-style="black"refresher-background="#f7f7f8"bindrefresherrefresh="refreshHandler"refresher-triggered="{{isTriggered}}"
><view wx:for="{{ numList }}" wx:key="*this">{{ item }}</view></scroll-view>
/* pages/index/index.wxss */.scroll-y {height: 100vh;background-color: #efefef;
}view {height: 500rpx;display: flex;align-items: center;justify-content: center;
}view:nth-child(odd) {background-color: skyblue;
} view:nth-child(even) {background-color: lightsalmon;
}
Page({data: {numList: [1, 2, 3],isTriggered: false},// 下拉刷新refreshHandler () {wx.showToast({title: '下拉刷新...'})setTimeout(() => {this.setData({numList: [1, 2, 3],isTriggered: false})}, 2000)},// scroll-view 上拉加载更多事件的事件处理函数getMore () {wx.showLoading({title: '数据加载中...'})setTimeout(() => {// 获取数组的最后一项const lastNum = this.data.numList[this.data.numList.length - 1]// 定义需要追加的元素const newArr = [lastNum + 1, lastNum + 2, lastNum + 3]this.setData({numList: [...this.data.numList, ...newArr]})wx.hideLoading()}, 1500)}})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#LLM入门|Prompt#2.2_ AI 应用开发的范式_Language_Models,the_Chat_Format_and_Tokens

在本章中&#xff0c;我们将和您分享大型语言模型&#xff08;LLM&#xff09;的工作原理、训练方式以及分词器&#xff08;tokenizer&#xff09;等细节对 LLM 输出的影响。 我们还将介绍 LLM 的提问范式&#xff08;chat format&#xff09;&#xff0c;这是一种指定系统消息…

STM32合并烧录IAP+APP

STM32合并烧录IAPAPP 通过查找相关资料 有以下几种合并方法 第一种直接将二进制文件用记事本合并 而要合并的就是就将IAP最后的一行删除&#xff0c;然后将APP程序追加在后面。 &#xff08;修改前&#xff09; 把APP的.hex 全部内容拷贝复制到 刚才删掉结束语句的 IAP的.…

Win32汇编ListView控件学习

此控件比较复杂&#xff1b;和基础win32控件不同&#xff1b;需要先初始化Windows公共控件库&#xff0c; invoke InitCommonControls 之后才可使用&#xff1b; lvdemo.asm&#xff0c; .386.model flat, stdcalloption casemap :none ; case sensitiveinclude window…

【OCR识别】使用OCR技术还原加密字体文字

文章目录 1. 写在前面2. 页面分析3. 字符知识4. 加密分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

减少页面加载时间:提升用户体验的关键

✨✨ 祝屏幕前的您天天开心&#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、为什么页面加载时间重要&#xff1f; 二、如何减少页面加载时间&#xff1f; …

华润置地品牌虚拟代言人IP“吉吉”,开启地产数字化营销新场景

在数字化营销时代&#xff0c;房地产品牌通过虚拟人技术&#xff0c;可以有效链接购房者&#xff0c;占领客户心智&#xff0c;优化购房体验&#xff0c;塑造年轻化、数字化的品牌形象。 华润置地积极拥抱数字变革&#xff0c;通过广州虚拟动力「现场虚拟主持技术服务」与「虚…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候&#xff0c;有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点&#xff1a; ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏&#xff0c;Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

Untiy webgl iis服务器加载ab包报404.3,需要为AB包添加MIMI映射

首选确定一下文件在不在 这里是缺少对于AB包文件类型的映射&#xff0c;因为AB包没有后缀名&#xff0c;我们为服务器添加通用的映射 1 开始菜单搜索iis管理器,先选中我们的服务器&#xff0c;然后双击进入MIME类型 2 右侧点击添加按钮 3 添加如下内容 文件扩展名为. 类型为…

性能测试-并发测试心得

一些关键名词 吞吐量 指的是在一定时间内系统处理请求或传输数据的能力&#xff0c;具体到性能测试中的话&#xff0c;就是指单位时间内系统处理并完成的请求数量或者是系统传输的数据量。 例如&#xff0c;吞吐量可以表示为系统每秒处理HTTP请求次数&#xff0c;或者是系统…

服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)

背景&#xff1a; 想要复现一个项目&#xff0c;建立好虚拟环境后&#xff0c;准备安装项目需要的包&#xff0c;故输入命令pip install -r requirements.txt requirements.txt如下图 其他包我都安装成功了&#xff0c;只有最后一个包失败了&#xff0c;是需要服务器git链接…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为&#xff0c;会故意设置无限debugger作为一种简单的反爬机制&#xff0c;它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

Sora学习笔记

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨…

ios 使用window.location.href 不能跳转微信短链处理过程以及解决方法

需求背景&#xff1a; 由h5提供页面&#xff0c;通过后台请求微信api生成对应的schemal短链&#xff0c;该h5页面嵌入到原生的ios以及安卓app上&#xff0c;当用户点击后通过短连接跳转到其他小程序中 以下为生成微信scheme代码示例&#xff0c;生成后短链为&#xff1a;weixi…

Azure[Sky] Dynamic Skybox

Azure[Sky] Dynamic Skybox是一个完整而稳健的天空系统,它可将你的项目提升大到其他层次。 Azure[Sky] 不仅适合使用现实图片的项目,事实上,该系统用在风格化图片的项目也很不粗,甚至效果更好。使用 Azure,每种风格都能实现最佳效果。 性能: 在开发此资源的过程中,性能是…

【Android】属性动画

在属性动画出现之前&#xff0c;Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解&#xff0c;它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式&#xff0c;并提供了 AnimationSet 动画集合来混合使用多种动画…

35. 【Linux教程】Linux 修改用户组

前面小节介绍了如何添加用户组&#xff0c;本小节介绍如何给已经添加的新用户组修改信息&#xff0c;从 /etc/group 文件信息可以看到&#xff0c;用户组的信息比用户信息项少&#xff0c;和 usermod 命令类似&#xff0c;用户组的信息可以使用 groupmod 命令修改。 1. groupmo…

为了董宇辉,老婆跟我打起来了!写下一份深刻检讨

两个月前&#xff0c;因为讨论董宇辉小作文事件&#xff0c;跟老婆吵起来了。起因就为了两句话&#xff0c;写了这份检讨&#xff01;给大家分享一下。 老婆在网上刷了两晚关于董宇辉小作文的视频&#xff0c;一直为董宇辉喊冤、打抱不平。起初&#xff0c;我跟老婆的想法&…

怎样消除视频上的字幕和文字?3个方法值得推荐

怎样消除视频上的字幕和文字&#xff1f;消除视频上的字幕和文字不仅是一个常见的需求&#xff0c;更是一个对视频内容质量提升的关键步骤。特别是在处理从网络下载的带有水印或标识的视频时&#xff0c;这些额外的文字和信息往往会干扰观众的观看体验&#xff0c;甚至可能影响…

【数据结构】顺序表和链表的对比,在各种情况下如何选择

顺序表详细内容&#xff1a; 【数据结构】线性表 顺序表&#xff08;动态、静态分配&#xff0c;插入删除查找基本操作&#xff09;解析完整代码 单链表详细内容&#xff1a; 【数据结构】单链表解析完整代码&#xff08;插入、删除、尾插法、头插法、按值和按位查找、前插和后…

IDEA开发环境的安装与编写第一个程序

1.下载 IDEA&#xff08;全称IntelliJ IDEA&#xff09;是用于Java程序开发的集成环境&#xff08;也可用于其他语言&#xff09;&#xff0c;它在业界被公认是最好的Java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代…