微信小程序爬坑日记

新公司上手小程序。
30天,从入门到现在,还没放弃。。。

虽然小程序发布出来快一年了,爬坑的兄弟们大多把坑都踩平了。而我一直停留在“Hello World”的学习阶段。
一来没项目,只有项目才是实践学习的根本;
二来刚出来,总是有很多坑。爬坑总是痛并快乐着。

再多的借口,产品项目需求拍在桌前,都得缴械投降。
不要怂撸起袖子,就是干。

初识小程序

微信推出小程序,想要实现即开即用,用完即走的用户体验。免去APP下载安装繁琐的流程。听起来像谷歌推出的PWA,不过PWA普及到国内还有段时间。而小程序借助于微信的用户群体,植入成本低,容易被用户接受。

小程序的代码风格跟Vue其实挺像,对于习惯Vue开发模式的同学,上手并没有太大的问题。

小程序不支持前端主流框架,如Vue,Angular,React,jQuery等,而且小程序有自己的一套视图容器(Dom)的写法,跟平常我们在web上写HTML不一样。不过CSS3那些变化不大。虽然文件名改成了(.wxss)

本司项目,使用webpack做打包工具,将代码编译成符合小程序的代码目录规范,采用wechat-mina-loader插件,实际开发起来跟在Vue下开发习惯一样。
babel完成ES6转ES5,sass编译,压缩转化等工作都放到webpack中去做。

不支持dom操作

小程序脚本内不能使用window,document对象,所以无法操作dom。如果想操作节点,可用wx.createSelectorQuery()

另外数据驱动的开发模式,跟Vue相同,只是写法换了(vue: v-if,小程序: wx:if)

rpx布局

rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

设计师做设计图以iPhone6作为设计稿基准就可以,基本上可以用rpx替换px,不过在一些表单或者提示页面,使用设计稿上的rpx会让小屏幕手机看着尺寸略小,提示页面可参照weui用px来实现

路由层级

  • wx.navigateTo(OBJECT)

保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面

  • wx.redirctTo(OBJECT)

关闭当前页面,跳转到应用内的某个页面

  • wx.switchTab(OBJECT)

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

  • wx.reLaunch(OBJECT)

关闭所有页面,打开到应用内的某个页面

小程序只能同时打开打开5个页面,当打开5个页面后,wx.navigateTo不能正常打开新页面,请避免多层级的交互方式,或者使用wx.redirctTo重定向

tabBar底部导航栏

tabBar是一个数组。配置最少2个,最多5个,tab数组按顺序排序

页面滚动到顶部

基础库1.4.0支持

wx.pageScrollTo({
  scrollTop: 0   //滚动到页面的目标位置(单位px)
})

图片资源,CSS中的背景图片

CSS中无法使用本地资源(开发目录中)的图片作为background-image。可以使用网络图片资源,或base64,或者使用image标签。tabBar的icon资源可使用本地资源

unionid与openid的区别

每个用户在每个小程序里面都有唯一的openid,如果想在多个公众号,小程序里面共享用户信息,统一识别该用户,则需要用到unionid。为了获取uniond则需要注册微信开放平台,将需要共享的小程序,公众号进行绑定(不超过10个,超过10个还要申请认证称为第三发平台)。

textarea在滚动页面中的bug

textarea,map等组件是由客户端创建的原生组件,它的层级是最高的。如果有遇到定位元素的话。永远在最上面,盖不住。

  • 请勿在 scroll-view、swiper、picker-view、movable-view 中使用 textarea 组件
  • CSS动画对textarea无效

项目场景:页面底部固定了一个按钮(position:fixed), 页面滚动时,textarea总是在按钮上面,点击按钮就点到了textarea

可以设置网络请求的超时时间

app.js中配置

"networkTimeout": {
  "request": 10000 // 10秒
}

window配置

navigationBarTextStyle 导航栏标题颜色仅支持black/white
状态栏,导航条,标题,窗口背景色支持纯色,不支持渐变色

参数问题

  • url中添加参数,url?a=1&b=2onLoad(options) options.query.a, options.query.b可获取到
  • 扫描小程序码进页面,如果想获取小程序码url中所带的参数,可通过options.scene获取,不过需要对二维码中的scene值进行转换 decodeURIComponent(options.scene), 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode (启动参数:scene=n%3D1001) 实际为 scene=n=1001,参数n=1001

image标签图片

image默认width: 300px, height: 225px, lazy-load懒加载只对page与scroll-view下的image有效
mode缩放模式,mode="widthFix"比较常用(宽度不变,高度自动变化,保持原图宽高比不变)

小程序可以监听小程序的关闭后,但是无法阻断

场景:想在小程序退出时弹出个提示框,并阻止关闭(暂时无法实现)

小程序码

小程序码(葵花码)有几种方式,只有发布过小程序才可正常显示小程序码

小程序第一次提交的审核时间较后面的长

第一次提交审核一般1天到2天。所以为了能准点上线,建议先上一次临时的版本(放一个提示页面都可以),过了第一次审核发布再说。日常提交审核,2-3小时就可以。

频繁地setData会造成性能问题

频繁地setData操作,会出现卡顿,操作反馈延迟严重,甚至有可能闪退。

场景:原计划用countUp做数字动画,原理就是频繁地改变数字值,setData操作,渲染到模版上。

ES6转ES5,小程序检测目录中的js文件(极少)

项目中用了webpack进行ES6转ES5,所以关闭了微信小程序的ES6转ES5功能。这个坑就比较隐蔽了,测试的时候在5S真机上报js错误,发现有个js(使用了ES6,没有转ES5)文件没有使用,微信小程序会去检测目录中的js文件,如果关闭了微信自带的ES6转ES5,检测到目录中js文件不兼容ES5,就报错。这个Bug只在5S真机里出现过,5C都正常。如果开启了微信开发工具中的ES6转ES5,则会自动帮你完成转化工作,不会出现类似问题。

分享些小程序开发比较常用的第三方库

作者:以乐之名
本文原创,有不当的地方欢迎指出。转载请指明出处。

时间: 2024-11-05 04:51:50

微信小程序爬坑日记的相关文章

微信小程序爬坑记

1.this.setData修改数组里的值1).data: { hide:[true,true] },this.setData({ 'hide[0]': false});2).var str = "hide[" + id + "]"//重点在这里,组合出一个字符串 var 是在function里的this.setData({ [str]: false//用中括号把str括起来即可 })3)key-value类型data: { main_view_bgcolor: &

微信小程序踩坑日记4——真机端解析json数组和开发平台不一样

0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.data的json数组) 1. 解决方案 保证在开发平台的正确解析 问题自然而然引向了对string和json之间的转换问题,这里得益于这篇网友的博文. 但是,res.data在开发平台上显示的是object,而在真机端却显示的string,所以我们需要先判断开发平台,在转换类型. // 查看平台 wx

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

一名Android开发者的微信小程序填坑之路(1)

前言 首先要声明的是,我是一名 Android 开发者,之前基本没有前端开发经验,甚至连 JS ,HTML 都是为了开发小程序现学的一些皮毛--所以文章中所提到的一些点也许在资深前端开发者看来只是小case,但是站在一个 Android 开发者的角度来看确实是大坑. 前面就不说太多东西了,文章的末尾再谈谈我对小程序的一些看法--这篇文章主要是谈谈在开发小程序的过程中遇到的一些坑. PS:推荐一下我写的一个微信小程序版的Gank客户端:wechat-weapp-gank 正文 1,获取小程序开发工

微信小程序的坑坑

no.1 背景图不显示 微信小程序里面是允许用户自定义背景图的,但是限定了背景图的路径及地址,之前一直用相对路径来写,微信开发者工具中也显示出了背景图,误以为没有问题,但是预览的时候发现手机中不显示背景图,这就是今天介绍的第一个坑,背景图不允许为本地图片. 解决方法: 第一.用在线图片转base64码的方法,这种方法的优点在于图片不存储在本地或者服务器上,占用空间小修改方便,缺点是小图片处理效果更好,大图代码相当的长,长的都不想看他... 第二.将图片上传至服务器,引用图片地址就可以了,方便快捷

微信小程序的坑(持续更新中)

参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的一些坑:下面针对小程序开发过程中遇到的一些坑跟大家分享,有些没有深究具体原因: 1.原生组件遮盖的问题 由于原生组件层级最高,即使设置了其z-index也于事无补:不能随意在其层级上展示信息,只能通过cover-view和cover-image组件(其实这两个组件也是原生组件)来进行遮盖: 例如,下

微信小程序踩坑(二)——微信小程序recorderManager和innerAudioContext相关

目录 写在前面 RecorderManager录音相关 innerAudioContext播放相关 写在前面 关于微信小程序的录音和语音方面,踩了很多坑,记录一下 recorderManager相关文档 innerAudioContext相关文档 RecorderManager录音相关 在使用RecorderManager相关方法之前,在page外先定义全局唯一的录音管理器: const recorderManager = wx.getRecorderManager(); 录音开始 record

记录开发微信小程序的坑(3)

现在开发小程序已经到了平稳时期,开始逐步优化小程序 1.微信小程序的更新机制  wx.getUpdateManager()这个函数是用于更新的 连接 https://developers.weixin.qq.com/miniprogram/dev/api/wx.getUpdateManager.html 小程序没有重启的概念 当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)会被微信主动销毁 在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次

微信小程序避坑指南

如果对小程序还不熟悉,建议先看下另一篇小程序简介 1. 基础库和微信版本对应关系 iOS 客户端版本 基础库版本 6.7.2 2.3.0 6.7.0 2.2.5 6.6.7 2.1.3 6.6.6 2.0.9 6.6.2 1.9.97 6.6.1 1.9.9 6.6.0 1.9.4 6.5.22 1.7.4 6.5.16 1.6.8 6.5.13 1.5.8 6.5.10 1.4.4 6.5.9 1.3.0 6.5.8 1.2.6 Android 客户端版本 基础库版本 6.7.2 2.3.0