个人案例
- M小黎
展示社区月度贡献名单和贡献值排行
社区贡献者排行榜扫码体验
- 小黎one商店
初试微信小商店
小黎ONE商店扫码体验
- wx.setClipboardData(Object object) 调用成功后出现的提示怎么禁止呀
wx.setClipboardData(Object object)设置系统剪贴板的内容。调用成功后,会弹出 toast 提示"内容已复制",持续 1.5s , 能不能限制这个提示
2022-03-07 - 【面向公告编程】带你深入分析适配 wx.getUserProfile 以及如何兼容 wx.getUserInfo
前言 由于一些开发者的滥用,为了优化用户体验,微信官方在获取用户信息上,提供了新的API「wx.getUserProfile」,接下来作者将带你解读官方公告(传送门: 小程序登录、用户信息相关接口调整说明),进一步提升“面向公告编程”能力。 常见问题 1、线上版本是不是一定要接入新的 API 才能正常使用? 并不是哦,如果你的小程序是在 2021 年 4 月 13 日后发布的才需要接入,此前发布的线上版本仍不受影响。 2、wx.getUserProfile 从 2.10.4 基础库开始支持,那么 2.10.4 以下基础库不就使用不了这个 API 了吗? 并不是哦,2.10.4 以下基础库仍然可以通过调用原有 API「wx.getUserInfo」获取用户信息及进行解密。 3、为什么开发版和体验版调用 wx.getUserInfo 都不返回用户信息了? wx.getUserInfo 开发版和体验版已对齐匿名表现(返回如下图结果),因此开发者可在 2021 年 4 月 13 日前在开发版或者体验版中,适配新的登录授权流程。 [图片] 4、wx.getSetting 无法获取用户信息的授权(即 scope.userInfo )? 从 2021 年 4 月 13 日开始,无论是通过 wx.authorize 请求授权还是 wx.getSetting 获取授权状态,都将直接返回 true。【PS:由于 wx.getUserProfile 每次调用时都需要用户弹窗授权,因此将无法获取用户授权状态】 [图片] 5、wx.getUserProfile 为什么只能获取到 userInfo 信息,却获取不到 rawData、signature、encryptedData、iv 等信息呢? 据悉,这几天会灰度 2.10.4 ~ 2.16.0 之间支持获取 rawData、signature、encryptedData、iv 等加密信息,具体以官方通知 / 文档为准 新的 API 对基础库有一定的要求,除了参数 userInfo 的值需要 2.10.4 及以上基础库支持获取之外,其它参数也需要 2.16.0 及以上基础库才支持获取。【PS:目前基础库在 2.10.4 ~ 2.16.0 之间将无法获取 rawData、signature、encryptedData、iv 等信息,具体以官方通知为准】 [图片] 6、PC 端微信暂不支持新的 API「wx.getUserProfile」应该怎么处理? 可以通过以下方式兼容。【PS:暂不推荐使用 wx.canIUse(“getUserProfile”) 做兼容判断,后续可使用该方式进行判断】 [代码]if (wx.getUserProfile) { console.log("支持 wx.getUserProfile") } else { console.log("不支持 wx.getUserProfile") } [代码] 7、开发者工具或真机提示 wx.getUserProfile is not a function 错误信息,应该怎么处理? ① 确认开发者工具为 1.05.2103022 及以上版本,并且调试基础库为 2.10.4 及以上。 ② 确认手机微信为 7.0.9 以上版本,且基础库为 2.10.4 及以上。 ③ 如果工具内基础库已设置为 2.10.4 及以上,仍报同样的错误信息,可尝试调高工具基础库直至支持此 API 【PS:一切以真机为准!】 8、wx.getUserProfile 获取 encryptedData 及 iv 参数后进行解密,无法获取到 openid 等信息? 原来调用 wx.getUserInfo 后进行解密可以获取到 openId 等信息如图 1 所示,但是新的 wx.getUserProfile 将无法直接获取到此类用户标识,返回的信息如图 2 所示。 [图片] 9、解密用户信息将不会返回 openId 及 unionId 这类信息,应该怎么解决处理? 新的登录流程有变化!开发者通过 wx.login 获取到用户登录凭证 (code),调用微信登录接口(auth.code2Session)将直接返回 openId、unionId(请先确认已在开放平台绑定该小程序,绑定流程:登录 微信开放平台 — 管理中心 — 小程序 — 绑定小程序) 10、wx.getUserProfile 跟 wx.login 无法同时调用,报 getUserProfile:fail can only be invoked by user TAP gesture 错误信息? 请勿在 wx.login 的 success 回调中调用 wx.getUserProfile。 解决方式: 先使用 [代码]checkSession[代码] 进行登录态检查;提前调用 [代码]wx.login[代码] 再调用 [代码]wx.getUserProfile[代码],完成授权登录流程。 先拖更 据悉:wx.getUserProfile 计划从基础库版本 2.6.6 开始支持 有疑问欢迎在下方留言或者发社区私信
2022-02-15 - “小程序直播”接入指引
各位微信开发者: “小程序直播” 功能正在公测中,具体接入指引请参考《小程序直播产品介绍及操作指引》。 一、功能简介 小程序直播是微信官方在2020年2月公测推出的产品能力,帮助商家在自有小程序中实现直播互动与商品销售的闭环。 [图片] 二、商家准入要求 满足以下条件,即可开通小程序直播: ①属于小程序直播开放类目,具体见《微信小程序直播功能准入要求》 ②主体下小程序近半年没有严重违规; ③小程序近90天内,有过支付行为; 三、具体产品功能及操作指引 具体接入指引请参考《小程序直播产品介绍及操作指引》,以下为商家操作步骤: 1. 开通权限 1) 登录“小程序后台”(mp.weixin.qq.com),在左侧导航栏找到“小程序—功能—直播”,点击开通。 小程序直播需要基于小程序,如若开发者还未创建小程序,可按照《小程序接入指南》流程指引创建小程序并完成开发。 2) 符合上述开放范围的即可开通。 2.功能开发 小程序直播需要实现【直播组件】与【后台配置】两个部分,其中组件部分需要在小程序中进行配置开发。 具体开发文档,请参考《小程序直播开发文档》。 2.直播间配置 开发完成后,商家可通过小程序后台设置直播计划、开通、设置抽奖等操作。具体操作指引,请参考《小程序直播产品介绍及操作指引》。
2020-08-26 - 官方组件默认样式修改的对应class
swiper面板指示点: .wx-swiper-dots.wx-swiper-dots-horizontal{ margin:20px //调整位置 } .wx-swiper-dot{}//指示点未选中样式 .wx-swiper-dot-active{}//指示点选中样式 button去除边框: button::after { border: none; } checkbox.wx-checkbox-input{}//未选中的框 .wx-checkbox-input.wx-checkbox-input-checked{}//选中的框 .wx-checkbox-input.wx-checkbox-input-checked::before{}//选中的框里的小勾 radio.wx-radio-input{}// 未选中 .wx-radio-input.wx-radio-input-checked{}//选中 .wx-radio-input.wx-radio-input-checked::before{}//选中的小勾 progress.wx-progress-inner-bar{}//已选择的进度条 switch.wx-switch-input{}//
2021-10-29 - 云开发实战:实现短信跳小程序
先看效果 [视频] 小程序支持短信跳转小程序了,可以说是打开了一个巨大的流量入口。 效果过程分析 从短信到网页从网页到小程序那么就涉及到两个点 发送短信网页跳转实现步骤分析 先要有个网页,可以跳转到小程序然后发送短信,短信内容包含地址具体实现步骤 1. 先要有个网页,可以跳转到小程序 首先开通静态网页托管 [图片] 创建一个云开发的项目,点击左上方「云开发」按钮 [图片] 点击静态网页进行开通。 然后点击「下载资源包」,解压缩我们会看到 [图片] 第一个是云函数,第二个是跳转的网页。首先我们编辑下跳转的网页 [图片] 打开文件编辑以下 6 处即可(通过“replace”搜索可以快速定位修改的地方): [图片][图片]添加好对应参数后,上传部署到你的静态托管文件目录中 [图片] 这个时候网页这块就已经搞定了,接下来部署下云函数。 刚才的 cloudfunctions 文件夹下面有个 public 文件夹里面的 index.js 复制内容到自己新建的云函数的 index.js 中,然后替换自己小程序的path(友情提示:覆盖完成后别忘记上传部署云函数)[图片]这个云函数的作用,主要是静态网页会调用它生成跳转的URL Scheme。以下为网页调用这个函数的代码区域[图片] 到这里网页显示与网页跳转就只差最后一步了,设置云函数权限。 [图片] [图片] 自定义安全规则配置: { "*": { "invoke": "auth != null" }, "public": { "invoke": true } } 2. 然后发送短信,短信内容包含地址 创建一个sendSms到云函数,复制以下代码: const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { try { const result = await cloud.openapi.cloudbase.sendSms({ env: 'online-12345678910', // 替换环境ID content: '云开发支持短信跳转小程序了',// 替换短信文案 path: '/index.html',// 替换网页路径 phoneNumberList: [ "+8612345678910" ] }) return result } catch (err) { return err } } 替换以上 3 处内容即可。 环境ID,可以在设置中找到短信内容,这个自己自定义网页路径,在静态网页托管中点击上传到网页即可查看复制[图片] 修改完成后,部署即可。 大功告成 [视频] 小程序就可以调用这个云函数发送短信,短信就会自带网页地址,点击即可跳转到小程序了。
2021-01-08 - 微信支付后默认关注公众号与推荐关注公众号规则(已下线)
2021年8月19公告支付后推荐关注公众号功能下线通知https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=122567 推荐关注规则指微信支付内部制定,推荐关注框和默认勾选能否出现的规则和判断逻辑,当前线上生效的逻辑有: 1、刷卡支付默认有推荐关注 2、九宫格业务默认不勾选推荐关注 3、粉丝数大于50W支付金额大于等于10元有默认勾选,小于10元无默认勾选,粉丝数小于50W支付金额大于等于5元有默认勾选,小于5元无默认勾选 4、已经关注的不展示推荐栏 5、服务号未设置头像的在IOS不展示推荐关注栏 6、用户取消过关注的默认不勾选 7、有过取消默认推荐关注标识的,以后不进行默认推荐关注勾选。简单一句话理解:你去美宜佳买一笔,支付后手动取消他的勾选,以后再去饭店吃饭付款后就是没有勾选的。 8、服务商模式的,需要在特约商户开发配置页设置推荐关注APPID,服务商给特约商户自行配置关注了服务商公众号,部分场景下才会展示,仅支持停车场、加油站、高速收费行业场景,完成整改后的电商工具箱的电商服务商,除此以外不会展示关注入口。 9、订阅号目前是不会有默认推荐关注的 10、公众号支付和扫码支付需要5元以上才有推荐关注 11、微信支付四种支付方式:刷卡支付,公众号支付,扫码支付,APP支付,前三种支付方式有默认关注公众号功能,APP支付需要额外申请(APP支付的默认关注目前只对行业的龙头公司才开放申请。)。 12、在服务商模式下,商户需要配置推荐的,需要在特约商户开发配置页设置推荐关注subappid,可配置商户同主体公众号。
2021-08-20 - 小程序图片裁剪插件 image-cropper
之前的插件类目没有了导致搜不到了,重新发个文章。 image-cropper 一款高性能的小程序图片裁剪插件,支持旋转。 [图片] 优势 [代码]1.功能强大。[代码] [代码]2.性能超高超流畅,大图毫无卡顿感。[代码] [代码]3.组件化,使用简单。[代码] [代码]4.点击中间窗口实时查看裁剪结果。[代码] ㅤ 初始准备 1.json文件中添加image-cropper [代码] "usingComponents": { "image-cropper": "../image-cropper/image-cropper" }, "navigationBarTitleText": "裁剪图片", "disableScroll": true [代码] 2.wxml文件 [代码]<image-cropper id="image-cropper" limit_move="{{true}}" disable_rotate="{{true}}" width="{{width}}" height="{{height}}" imgSrc="{{src}}" bindload="cropperload" bindimageload="loadimage" bindtapcut="clickcut"></image-cropper> [代码] 3.简单示例 [代码] Page({ data: { src:'', width:250,//宽度 height: 250,//高度 }, onLoad: function (options) { //获取到image-cropper实例 this.cropper = this.selectComponent("#image-cropper"); //开始裁剪 this.setData({ src:"https://raw.githubusercontent.com/1977474741/image-cropper/dev/image/code.jpg", }); wx.showLoading({ title: '加载中' }) }, cropperload(e){ console.log("cropper初始化完成"); }, loadimage(e){ console.log("图片加载完成",e.detail); wx.hideLoading(); //重置图片角度、缩放、位置 this.cropper.imgReset(); }, clickcut(e) { console.log(e.detail); //点击裁剪框阅览图片 wx.previewImage({ current: e.detail.url, // 当前显示图片的http链接 urls: [e.detail.url] // 需要预览的图片http链接列表 }) }, }) [代码] 参数说明 属性 类型 缺省值 取值 描述 必填 imgSrc String 无 无限制 图片地址(如果是网络图片需配置安全域名) 否 disable_rotate Boolean false true/false 禁止用户旋转(为false时建议同时设置limit_move为false) 否 limit_move Boolean false true/false 限制图片移动范围(裁剪框始终在图片内)(为true时建议同时设置disable_rotate为true) 否 width Number 200 超过屏幕宽度自动转为屏幕宽度 裁剪框宽度 否 height Number 200 超过屏幕高度自动转为屏幕高度 裁剪框高度 否 max_width Number 300 裁剪框最大宽度 裁剪框最大宽度 否 max_height Number 300 裁剪框最大高度 裁剪框最大高度 否 min_width Number 100 裁剪框最小宽度 裁剪框最小宽度 否 min_height Number 100 裁剪框最小高度 裁剪框最小高度 否 disable_width Boolean false true/false 锁定裁剪框宽度 否 disable_height Boolean false true/false 锁定裁剪框高度 否 disable_ratio Boolean false true/false 锁定裁剪框比例 否 export_scale Number 3 无限制 输出图片的比例(相对于裁剪框尺寸) 否 quality Number 1 0-1 生成的图片质量 否 cut_top Number 居中 始终在屏幕内 裁剪框上边距 否 cut_left Number 居中 始终在屏幕内 裁剪框左边距 否 [代码]img_width[代码] Number 宽高都不设置,最小边填满裁剪框 支持%(不加单位为px)(只设置宽度,高度自适应) 图片宽度 否 [代码]img_height[代码] Number 宽高都不设置,最小边填满裁剪框 支持%(不加单位为px)(只设置高度,宽度自适应) 图片高度 否 scale Number 1 无限制 图片的缩放比 否 angle Number 0 (limit_move=true时angle=n*90) 图片的旋转角度 否 min_scale Number 0.5 无限制 图片的最小缩放比 否 max_scale Number 2 无限制 图片的最大缩放比 否 bindload Function null 函数名称 cropper初始化完成 否 bindimageload Function null 函数名称 图片加载完成,返回值Object{width,height,path,type等} 否 bindtapcut Function null 函数名称 点击中间裁剪框,返回值Object{src,width,height} 否 函数说明 函数名 参数 返回值 描述 参数必填 upload 无 无 调起wx上传图片接口并开始剪裁 否 pushImg src 无 放入图片开始裁剪 是 getImg Function(回调函数) [代码]Object{url,width,height}[代码] 裁剪并获取图片(图片尺寸 = 图片宽高 * export_scale) 是 setCutXY X、Y 无 设置裁剪框位置 是 setCutSize width、height 无 设置裁剪框大小 是 setCutCenter 无 无 设置裁剪框居中 否 setScale scale 无 设置图片缩放比例(不受min_scale、max_scale影响) 是 setAngle deg 无 设置图片旋转角度(带过渡效果) 是 setTransform {x,y,angle,scale,cutX,cutY} 无 图片在原有基础上的变化(scale受min_scale、max_scale影响) 根据需要传参 imgReset 无 无 重置图片的角度、缩放、位置(可以在onloadImage回调里使用) 否 GitHub https://github.com/wx-plugin/image-cropper/tree/master 如果有什么好的建议欢迎提issues或者提pr
2021-12-15 - 如何使用camera实现拍照后截取图片指定位置的图呢?
我现在使用的方法是通过小程序的canvas的drawImage方法截图,发现真机截出的效果跟调试的完全不一样
2020-12-06 - 下发小程序和公众号统一的服务消息可以设置跳转到体验版小程序吗?
下发小程序和公众号统一的服务消息接口(uniformMessage.send)里可以设置跳转到小程序(mp_template_msg参数),请问可以设置跳转到体验版的小程序吗?类似subscribeMessage.send接口的miniprogram_state参数[图片]
2020-12-04 - 【集合】花了 3 个月,写了 40 篇小程序文章
前言 花了3个月,一共输出 40 篇文章,这也算是一个阶段性的总结。在此做个文章分类集合,希望对大家有所帮助。 小程序前端 《专治按钮效果不明显(扩散动画效果)》 《小程序开发必备,这 5 款超实用开源插件!》 《仿抽奖助手奖品详情页面向上翻页效果》 《推荐 5 款高仿知名应用的开源项目!》 《生成海报很复杂?有它轻松搞定!》 《推荐一个自定义导航栏开源库》 《前端开发,必备的学习网站!》 《情侣券-领取动画分析》 《通过玩游戏来学习CSS》 《CSS不规范导致的布局显示问题》 《微信小程序如何引入npm包?》 《情侣券-选中卡片翻转动画》 《CSS:实现卡片洗牌效果》 《情侣券 v2.0 使用的 4 款开源组件》 小程序云开发 《使用聚合函数实现打卡排行榜》 《使用云开发做内容安全检查》 《云开发-实现分页功能》 《云开发-实现维护用户表》 《云开发-实现模糊搜索》 《云开发实战:实现订阅消息推送》 《如何优雅的调用云函数?》 《云开发实战-如何维护用户表?(优化版)》 《推荐 10 款使用云开发的开源项目》 《云开发:CloudBase CMS 实战使用指南》 小程序产品 《如何利用小程序提高10倍活动效果?》 《实战:让数据说话之自定义埋点分析》 《#小程序云开发挑战赛#-情侣券》 《小程序运营必备的 3 款官方小程序》 《小程序云开发挑战赛:情侣券 v1.1 版本迭代》 《云开发挑战赛复赛:情侣券介绍PPT》 《参加#小程序云开发挑战赛#复赛收获》 《云开发挑战赛决赛:情侣券介绍PPT》 通用知识 《如何重构?》 《如何高效学习?》 《如何看懂时序图?》 《为什么优秀的程序员都写博客?》 《我从 Android 转到 微信小程序 的思考》 最后 后续计划会写更多云开发相关的文章以及小程序基础系列学习文章。
2020-11-24 - 如何实现圣诞节星星飘落效果
圣诞节快到啦~🎄🎄🎄🎄咱们也试着做做小程序版本的星星✨飘落效果吧~ 先来个效果图: [图片] 484听起来很叼,看起来也就那样。 来咱们上手开始撸 页面内容wxml,先简单切个图吧。 [代码]<view class="container"> <image src="https://qiniu-image.qtshe.com/merry_001.jpg" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_02.jpg" alt="" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_03.jpg" alt="" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_04.jpg" alt="" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_05.jpg" alt="" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_06.jpg" alt="" mode="widthFix"/> <image src="https://qiniu-image.qtshe.com/merry_07.jpg" alt="" mode="widthFix"/> </view> <canvas canvas-id="myCanvas" /> [代码] 页面样式wxss,因为切片用的不太熟练,图片之间有个2rpx的空隙。 [代码].container { height: 100%; box-sizing: border-box; min-height: 100vh; } image { width: 100%; display: block; margin-top: -2rpx; //不会切图造的孽 } canvas { width: 100%; min-height:100vh; position: fixed; top: 0; z-index: 888; } [代码] 重点JS: [代码]//获取应用实例 const app = getApp() // 存储所有的星星 const stars = [] // 下落的加速度 const G = 0.01 const stime = 60 // 速度上限,避免速度过快 const SPEED_LIMIT_X = 1 const SPEED_LIMIT_Y = 1 const W = wx.getSystemInfoSync().windowWidth const H = wx.getSystemInfoSync().windowHeight var starImage = '' //星星素材 wx.getImageInfo({ src: 'https://qiniu-image.qtshe.com/WechatIMG470.png', success: (res)=> { starImage = res.path } }) Page({ onLoad() { this.setAudioPlay() }, onShow() { this.createStar() }, createStar() { let starCount = 350 //星星总的数量 let starNum = 0 //当前生成星星数 let deltaTime = 0 let ctx = wx.createCanvasContext('myCanvas') let requestAnimationFrame = (() => { return (callback) => { setTimeout(callback, 1000 / stime) } })() starLoop() function starLoop() { requestAnimationFrame(starLoop) ctx.clearRect(0, 0, W, H) deltaTime = 20 //每次增加的星星数量 starNum += deltaTime if (starNum > starCount) { stars.push( new Star(Math.random() * W, 0, Math.random() * 5 + 5) ); starNum %= starCount } stars.map((s, i) => { //重复绘制 s.update() s.draw() if (s.y >= H) { //大于屏幕高度的就从数组里去掉 stars.splice(i, 1) } }) ctx.draw() } function Star(x, y, radius) { this.x = x this.y = y this.sx = 0 this.sy = 0 this.deg = 0 this.radius = radius this.ax = Math.random() < 0.5 ? 0.005 : -0.005 } Star.prototype.update = function() { const deltaDeg = Math.random() * 0.6 + 0.2 this.sx += this.ax if (this.sx >= SPEED_LIMIT_X || this.sx <= -SPEED_LIMIT_X) { this.ax *= -1 } if (this.sy < SPEED_LIMIT_Y) { this.sy += G } this.deg += deltaDeg this.x += this.sx this.y += this.sy } Star.prototype.draw = function() { const radius = this.radius ctx.save() ctx.translate(this.x, this.y) ctx.rotate(this.deg * Math.PI / 180) ctx.drawImage(starImage, -radius, -radius * 1.8, radius * 2, radius * 2) ctx.restore() } }, setAudioPlay() { let adctx = wx.createInnerAudioContext() adctx.autoplay = true adctx.loop = true adctx.src = 'https://dn-qtshe.qbox.me/Jingle%20Bells.mp3' adctx.onPlay(() => { console.log('开始播放') adctx.play() }) } }) [代码] 以上只是简单实现了一个星星飘落的效果,预览的时候需要开启不校验合法域名哦~ 目前还有更优的h5版本,使用Three.js实现的,在小程序内使用Three.js对于我来说有点打脑壳,先把效果分享出来吧。 h5版本,手机看效果最佳 h5源码可直接右键查看:https://qiniu-web.qtshe.com/merryChrimas.html
2023-12-07 - 如何实现一个简单的http请求的封装
好久没发文章了,最近浏览社区看到比较多的请求封装,以及还有在使用原始请求的童鞋。为了减少代码,提升观赏性,我也水一篇吧,希望对大家有所帮助。 默认请求方式,大家每次都这样一些写相同的代码,会不会觉得烦,反正我是觉得头大 😂 [代码]wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: '' }, header: { 'content-type': 'application/json' // 默认值 }, success (res) { console.log(res.data) } }) [代码] 来,进入正题吧,把这块代码封装下。 首先新建个request文件夹,内含request.js 代码如下: [代码]/** * 网络请求封装 */ import config from '../config/config.js' import util from '../util/util.js' // 获取接口地址 const _getPath = path => (config.DOMAIN + path) // 封装接口公共参数 const _getParams = (data = {}) => { const timestamp = Date.now() //时间戳 const deviceId = Math.random() //随机数 const version = data.version || config.version //当前版本号,自定或者取小程序的都行 const appKey = data.appKey || config.appKey //某个小程序或者客户端的字段区分 //加密下,防止其他人随意刷接口,加密目前采用的md5,后端进行校验,这段里面的参数你们自定,别让其他人知道就行,我这里就是举个例子 const sign = data.sign || util.md5(config.appKey + timestamp + deviceId) return Object.assign({}, { timestamp, sign, deviceId, version, appKey }, data) } // 修改接口默认content-type请求头 const _getHeader = (headers = {}) => { return Object.assign({ 'content-type': `application/x-www-form-urlencoded` }, headers) } // 存储登录态失效的跳转 const _handleCode = (res) => { const {statusCode} = res const {msg, code} = res.data // code为 4004 时一般表示storage里存储的token失效或者未登录 if (statusCode === 200 && (code === 4004)) { wx.navigateTo({ url: '/pages/login/login' }) } return true } /** * get 请求, post 请求 * @param {String} path 请求url,必须 * @param {Object} params 请求参数,可选 * @param {String} method 请求方式 默认为 POST * @param {Object} option 可选配置,如设置请求头 { headers:{} } * * option = { * headers: {} // 请求头 * } * */ export const postAjax = (path, params) => { const url = _getPath(path) const data = _getParams(params) //如果某个参数值为undefined,则删掉该字段,不传给后端 for (let e in data) { if (data[e] === 'undefined') { delete data[e] } } // 处理请求头,加上最近比较流行的jwtToken(具体的自己百度去) const header = util.extend( true, { "content-type": "application/x-www-form-urlencoded", 'Authorization': wx.getStorageSync('jwtToken') ? `Bearer ${wx.getStorageSync('jwtToken')}` : '', }, header ); const method = 'POST' return new Promise((resolve, reject) => { wx.request({ url, method, data, header, success: (res) => { const result = _handleCode(res) result && resolve(res.data) }, fail: function (res) { reject(res.data) } }); }) } [代码] 那么如何调用呢? [代码]//把request的 postAjax注册到getApp()下,调用时: const app = getApp() let postData = { //这里填写请求参数,基础参数里的appKey等参数可在这里覆盖传入。 } app.postAjax(url, postData).then((res) => { if (res.success) { //这里处理请求成功逻辑。 } else { //wx.showToast大家觉得麻烦也可以写到util.js里,调用时:util.toast(msg) 即可。 wx.showToast({ title: res.msg || '服务器错误,请稍后重试', icon: "none" }) } }).catch(err => { //这里根据自己场景看是否封装到request.js里 console.log(err) }) [代码] config.js 主要是处理正式环境、预发环境、测试环境、开发环境的配置 [代码]//发版须修改version, env const env = { dev: { DOMAIN: 'https://dev-api.weixin.com' }, test: { DOMAIN: 'https://test-api.weixin.com', }, pro: { DOMAIN: 'https://api.qtshe.com' } } module.exports = { ...env.pro } [代码] 以上就是简单的一个request的封装,包含登录态失效统一跳转、包含公共参数的统一封装。 老规矩,最后放代码片段,util里内置了md5方法以及深拷贝方法,具体的我也不啰嗦,大家自行查看即可~ https://developers.weixin.qq.com/s/gbPSLOmd7Aft
2020-04-03 - 微信小程序图表组件 wx-f2,源于 F2,专为移动而生
F2,专为移动而生的可视化解决方案,特为大家提供了微信小程序端版本,体积小巧,性能卓越,底层基于图形语法,可以提供非常丰富的图表类型。 可以使用微信扫描以下二维码先体验一番: [图片]
2018-04-16 - html-canvas 生成小程序分享图
简介 基于 HTML 和 CSS 实现 Canvas 绘图。 项目地址 代码片段:https://developers.weixin.qq.com/s/9zFHKdmh7De2 原理 构建虚拟DOM 树,依据 CSS 规范计算样式,使用 CSS 盒模型对 DOM 进行布局,计算出所有元素的位置。最后将 DOM 树通过 Canvas Api 进行绘制。 小程序开发工具内运行 demo [代码]git clone https://github.com/alexayan/html-canvas.git npm i npm run watch [代码] 已支持的 CSS 属性 margin,margin-left,margin-top,margin-right,margin-bottom,padding,padding-left,padding-top,padding-right,padding-bottom,width,height,border,border-left,border-top,border-right,border-bottom,border-width,border-style,border-color,border-left-style,border-left-color,border-left-width,border-top-style,border-top-color,border-top-width,border-right-style,border-right-color,border-right-width,border-bottom-style,border-bottom-color,border-bottom-width,color,display,background-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-left-radius,border-bottom-right-radius,box-sizing,font,font-style,font-variant,font-weight,font-stretch,font-size,line-height,font-family,text-align,position,overflow,overflow-x,overflow-y,top,left,right,bottom,z-index demo canvas-draw.html [图片]
2020-01-08