- video组件无法去除小窗?
产品的需求是去除video自带的小窗模式,但是微信开发文档里面没有能去掉小窗的属性 [图片]
2024-10-22 - 微信PC端“服务通知”通知卡片头部小程序logo显示异常?
[图片][图片] 图一为配置的模板,图二为微信PC端“服务通知”里的通知消息,logo显示异常。
2024-10-15 - PC端微信,用户接收的模版消息,左下角显示的小程序LOGO不一样?
PC端微信,用户接收公众号的消息模版,部分用户的小程序展示LOGO未切换为最新的,这个是因为用户在LOGO切换前接收过模版消息,导致了PC本地有缓存,所以后面小程序更换LOGO后,这部分存了旧LOGO的用户,之后一直显示的也是旧LOGO吗? 错误的显示[图片] 正常的显示[图片] 查过模版消息的官方文档,里面没有控制展示LOGO的参数 [图片] 求助各位大佬,有啥好的办法,让这部分PC用户,重新读取展示新的小程序LOGO吗?
2022-06-22 - 如何解决小程序订阅消息不显示logo及小程序名称问题?
[图片] 发送的订阅消息 没有显示小程序logo 也没显示小程序名称 不知道怎么回事 从我的手机上看能看到一个默认的logo 还有右上角的三个点点 [图片] 同事的手机上只有三个点点 都没有默认logo [图片]
2022-10-31 - MapContext.addVisualLayer(Object object)不生效?
[图片] [图片] [图片] 线上版本 2023-03 月还是正常的,现在不行了,真机调试跟预览均不行,这是啥原因???
2023-12-01 - wx.compressVideo在IOS压缩不起作用,基础库为3.0.0,手机型号如下,该怎么解决?
[图片]
2023-11-03 - scroll-view 组件部分属性及参数调整通知
由于安卓端 Webview 内核升级原因,自 2022 年 12 月 1 日起,scroll-view 组件将进行如下调整: 废弃在安卓端的 scroll-view 组件的 fast-deceleration 属性。废弃后该属性对应的交互将失效,并且退回至默认滚动行为。scroll-view 组件的其他属性可正常使用。废弃在安卓端的 ScrollViewContext.scrollTo 接口的 duration 及 velocity 参数。ScrollViewContext.scrollTo 接口的其他参数可正常使用。 即使在小程序不适配的情况下,上述调整不会影响用户的正常使用流程。如需实现更多的交互效果,建议使用 Skyline 渲染。 iOS 端不受本次调整影响。 微信团队 2022年11月11日
2022-11-11 - 期望?input支持焦点位置变更监听
需求,自定义了input输入框。 但是考虑到小程序pc端键盘输入,有左右箭头切换光标的操作,这种情况目前无法捕捉光标位置。
2023-01-17 - navigateTo跳转带参长度没有限制么
使用navigateTo跳转页面带的参数为一万个字符,还是能跳转成功,不是会有长度限制么 [图片] [图片]
2023-11-06 - 小程序scroll-view翻转后 scroll-into-view的替代方案
背景 腾讯云医小程序有医患聊天会话的场景,由于会话场景存在查询历史消息的场景,小程序中按照常规思路加载历史消息时会出现跳动的问题;跳动的原因是由于在’顶部’插入dom,会使得后面的dom被往后面推,然后重新设置scroll-top或者scrol-into-view从而导页面出现跳动;我们尝试采用【 前端开发中聊天场景的体验优化】文章中的方案处理跳动的场景。该文章的核心观点将scroll-view元素通过设置css样式 transform: rotateX(180deg); 进行翻转,这样将历史消对应的dom结构放在尾部,当添加更多的历史消息(dom)时,由于dom是添加在尾部很优雅的绕过了插入历史消息跳动的场景。但是当我们按照这种方式实现后,发现scroll-view元素提供的scroll-into-view属性不好使了。因此有了本文通过计算scrollTop值设置scrollTop来达到相同目的。 复现该问题的小程序代码片段:代码片段 目前已经反馈给官方(官方已确认是内部组件实现暂不支持翻转的场景 基础知识介绍 计算scrollTop涉及到一些web和小程序的基础知识,后面针对这些基础点进行简单介绍 .scroll-into-view 微信小程序提供的scroll-view元素提供了属性 scroll-into-view,该属性的作用是可以将指定dom滚动到scroll-view可见区域内 [图片] 关于boundingClientRect 下图是MDN解释该属性时提供的,从下图中可以看到top/bottom/left/right的值是元素的左上角和右下角相对于视口左上角的水/垂直距离 [图片] 为了更深入理解这些值。给出了一个简易的demo(代码片段),获取实例元素的的boundingClientRect的值后,可以看到这些值是根据元素的border边界进行计算的 [图片] [图片] [图片] 值得注意的是,当元素处于一个滚动区域内部,left/top值是考虑滚动操作的即包含滚动距离的(参考MDN 另外,当我们把容器元素又或者元素自身设置 transform: rotateX/Y(180deg):不会导致top和bottom的值互换(left与right的值互换); 总会有这样的结论,当dom元素的宽度和高度不为0时,top值一定小于bottom值,left值一定小于right值 关于scrollTop 当一个容器的内容的高度大于其容器高度时,overflow不为visible/hidden时,则会出现滚动条。出现滚动条后,内容区域则可以滚动,此时scrollTop的值是容器可视区域的顶部到内容区域顶部的距离,见下面示意图。 [图片] 值得注意的是,滚动条出现在盒模型中的content区域,见下图滚动条不会覆盖padding/border部分。因此上面说到内容区域高度超过容器高度并不严谨,严谨的说法应该是超过容器的content区域的高度。 [图片] 如果此时给容器设置css样式: transform: rotateX(180deg); 即沿垂直方向翻转180度,scrollTop的值会发生变化吗。 下面我们看下实际的对比效果,为了方便查看滚动条的效果,给滚动条轨道(红色部分)以及滑块(黑色部分)添加了背景色,发现整个元素包括滚动条在内一并进行了翻转。 正常情况(左侧),应用翻转css样式(右侧) [图片] [图片] 翻转后的scrollTop值示意图 [图片] 通过计算scrollTop值来模拟scroll-into-view效果(针对scroll-view翻转的场景j) 由于boundingClinetRect的值是包含border边界的,因此当数据项包含padding,border等区域不会影响这里的计算过程,可以认为下面示意图中的数据项部分的边界是border边界; 由于滚动条是出现在content区域,因此容器元素的的border-top/padding-top不为0时,会影响计算流程,因此这里分为两种情况进行介绍: 2.1 假设scroll-view元素的的border-top/padding-top为0 2.2 假设scroll-view元素的的border-top/padding-top不为0 border-top/padding-top为0的情况 为了方便说明计算过程,我定义三种状态,初始态、中间态、最终态 示意图中的区域说明 白色背景的为视口, 绿色背景的是容器(scroll-view)的可视区域, 灰色区域是内容区域,并且内容区域的高度超过了容器的高度, 红色区域是一个数据项 [图片] 现在的目标是将数据项从初始态滚动到最终态即scroll-into-view的效果:border的上边界与可视区域上边界对齐 第一步:从初始态达到中间态 根据上面关于scrollTop的描述,这里如果scrollTop的值是targetDistance即数据项的底部到内容区域的底部的距离,就可以达到中间态,因此现在的目标是求targetDistance 初始状态的已知变量 初始状态下的的scrollTop值:currentScrollTop (由于容器发生翻转,所以scrollTop视觉上指向容器下方) 数据项的boundingClientRect.bottom为 itemBottom 容器的boundingClientRect.bottom为 contianerBottom 通过示意图很容易得出 [代码]targetDistance = currentScrollTop + (containerBottom - itemBottom) [代码] 第二步:从中间到达最终态 已知变量:容器高度:containerHeight、数据项高度:itemHeight 最终态是数据项的顶部距离容器顶部,从示意图中看到中间态到最终态的scrollTop是减少了的,减少的值其实就是cotainerHeight - itemHeight 经过第一步和第二步我们就可以得到scrollTop的计算公式 [代码]let itemScrollTop = currentScrollTop + containerBottom - itemBottom itemScrollTop -= (containerHeight - itemHeight) => itemScrollTop = currentScrollTop + containerBottom - itemBottom - (containerHeight - itemHeight) [代码] border-top/padding-top不为0的情况 [图片] 根据上面第一种情况的介绍的思路,很容易得到下面结果,不再赘述(X 就是容器padding-top + border-top的值) [代码]let itemScrollTop = currentScrollTop + containerBottom - itemBottom - X itemScrollTop -= (containerHeight - itemHeight - X) => itemScrollTop = currentScrollTop + containerBottom - itemBottom - X - (containerHeight - itemHeight - X) => itemScrollTop = currentScrollTop + containerBottom - itemBottom - (containerHeight - itemHeight) [代码] 【结论】两种情况最终的计算过程是一样的,因此在实现的过程中不需要进行区分 代码实现 代码片段见:https://developers.weixin.qq.com/s/y1X11dmr7AqC 视图层代码 [代码]{{item.content}} #scroll-view { position: absolute; top: 50px; bottom: 50px; width: 100%; background-color: rgba(0, 0, 0, 0.1); // 关键case transform: rotateX(180deg); } [代码] 逻辑层核心代码 [代码]scrollTo () { const itemId = '#item_id_50' const containerId = '#scroll-view' Promise.all([this._queryBoundingClient(itemId), this._getScrollInfo(containerId)]) .then((res = [[[{}]], {}]) => { const [[[ { bottom: itemBottom, height: itemHeight }]], { bottom: containerBottom, scrollTop, height: containerHeight }] = res let itemScrollTop = containerBottom - itemBottom + scrollTop itemScrollTop -= (containerHeight - itemHeight) this.setData({ scrollTop: itemScrollTop }) }) }, _queryBoundingClient (selector) { // 获取目标dom的相关位置/尺寸信息 return new Promise(resolve => { const query = this.createSelectorQuery(); query.selectAll(selector).boundingClientRect(); query.exec(resolve); }) }, _getScrollInfo (idSelector) { // 用来获取容器层相关位置/尺寸信息 return new Promise(resolve => { const query = this.createSelectorQuery() query.select(idSelector).boundingClientRect() query.select(idSelector).scrollOffset() query.exec((res = [{}, {}]) => { const [{ top, bottom, height }, { scrollHeight, scrollTop }] = res const scrollInfo = { scrollTop, scrollHeight, top, bottom, height } resolve(scrollInfo) }) }) } [代码]
2023-03-23 - 使用微信API实现用户授权登录
小程序中经常需要获取用户的个人信息。为了保护用户的隐私,微信提供了OAuth2.0的授权机制,具体如何实现? 首先,在app.json文件中添加配置: json { "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle": "black" }, "requiredBackgroundModes": ["audio"], "permission": { "scope.userInfo": { "desc": "你的描述" } } } 接下来,在需要进行授权登录的页面(例如index.js)中调用微信的login接口: javascript Page({ data: {}, onLoad: function () { wx.login({ success: res => { // 发送code到服务器换取openId等信息 console.log(res.code) } }) } }) 以上代码会弹出一个授权对话框,用户点击确认后,将会返回一个临时的code值。我们需要把这个code发送到自己的服务器,然后通过微信提供的API换取用户的openid和其他信息。 在实际开发过程中,你需要处理各种可能的异常情况,例如网络错误、用户拒绝授权等。 以上就是实现用户授权登录的基本步骤。
2023-12-12 - 官网让用View代替cover-view,但 view 组件没支持设置 marker-id属性?
<view marker-id="123">123</view> 这样写在开发者工具上不会有 marker-id 属性,这个能加上吗
2023-06-07 - 小程序性能优化实践
小程序性能优化课程基于实际开发场景,由资深开发者分享小程序性能优化的各项能力及应用实践,提升小程序性能表现,满足用户体验。
2024-10-09 - 小程序用户代码片段讲解
用户代码片段 场景: 此代码片段非彼代码片段。用户代码片段,这个功能是做什么用的呢?简单的说就是代码提示功能,用户通过自定义的方式,来将一些经常使用的代码封装成模板,从而的能够快速书写出来。不管你写什么代码,在编辑器肯定有提示功能,但是肯定会碰到一些代码是没有提示的,但是你又经常手敲或复制粘贴,就会降低了程序开发的效率,这时候用户代码片段就可以帮你解决这个问题。 打开微信开发者工具,找到文件-首选项-用户代码片段,你可以选择现有代码片段进行编辑或者新建代码片段,新建则键入文件名,按下Enter完成创建 [图片][图片] 成功后是这样一个文件,已经给你举了个例子 [图片] 参数说明: { //整个对象集合,你可以将你常用的模板全部放这一个对象里面,每个模板对象用逗号分隔 "Print to console": { //模板的名称,也是在你键入代码快捷键时右边的提示 "scope": "javascript,typescript", //片段用于的范围,在范围字段中添加代码段适用的语言的逗号分隔。如果范围为空或省略,则代码段将应用于所有语言。 "prefix": "log", //前缀,快捷键,触发的模板提示的关键词 "body": [ //正文,整个模板内容,后面细讲 "console.log('$1');", "$2" ], "description": "Log output to console" //说明,对代码片段的详细说明(可省略,如果description不写,默认会显示key键的内容) } } [图片] body内容说明: 1、$1,$2...表示制表位,$0表示最终光标位置,${1:label},${2:other}表示占位符,将连接具有相同ID的占位符,通过Tab键切换下一个光标位置。 2、\n 表示回车。 3、空格代表一个字符,tab为两个,主要用于代码缩进。 4、body 是一个数组,数组的每一项就是一行代码,所以如果你的代码是多行的话,就写成一个数组形式,如果项里还有双引号,需要在双引号前用进行转义。 5、变量提示,${变量,提示内容},如:${1,参数为String、Number} 6、枚举值提示,${变量|枚举值|},多个枚举值用英文逗号分隔,如:${1|barCode, qrCode|} 7、特殊变量, $变量名 如:$CURRENT_MONTH_NAME https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables 8、代码片段生成器:https://99cc.vip/public/tools/vscode_snippet/index.html 或 https://snippet-generator.app/ 示例文件: { "page快速模板":{ "prefix":"pg", "body":[ "Page({", " /**", " * 页面的初始数据", " */", " data: {\n ${1:Name}:${2:value},", " },", " /**", " * 用户点击右上角分享", " */", " onShareAppMessage(){", "", " },$0", "})" ], }, "当前时间打印内容":{ "prefix":"clg", "body":"console.log('$CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND:$1')" }, "v-for模板": { "prefix": ":vf", "body": ["wx:for='{{$1}}' wx:key='{{$2}}' bindtap='$3' data-$4='{{$5}}'"], "description": "v-for" }, "return false": { "prefix": "rf", "body": [ "return false;", ], "description": "函数无返回值时使用" }, "图片": { "prefix": "tp", "body": [ "<image src=\"{{${1}}}\" mode=\"${2|scaleToFill,aspectFit,widthFix,heightFix|}\"></image>" ], "description": "图片" } }
2022-08-22 - 2023年了,wx.compressVideo在ios手机上还是压缩失败吗?
wx.compressVideo苹果手机压缩视频不成功,安卓手机压缩很慢
2023-05-25 - gitlens 插件问题一直报错?
[图片] 版本:1.05.2201240
2022-02-15 - 微信小程序wxss可以动态的用js的值吗?怎么传?
我想在wxss中设置js获取到的背景图片url,怎么把值传给wxss啊
2022-03-07