微信小程序爬坑日记
新公司上手小程序。
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": // 10秒
}
window配置
navigationBarTextStyle 导航栏标题颜色仅支持black/white
状态栏,导航条,标题,窗口背景色支持纯色,不支持渐变色
参数问题
- url中添加参数,
url?a=1&b=2
,onLoad(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,则会自动帮你完成转化工作,不会出现类似问题。
分享些小程序开发比较常用的第三方库
- weui-wxss(小程序版的weui样式库) Github: https://github.com/Tencent/weui-wxss
- wepy(小程序组件化框架) Github: https://github.com/Tencent/wepy
- skyvow/vux(小程序组件库) Github: https://github.com/skyvow/wux
- xiaolin3303/wx-charts(小程序图标) Github: https://github.com/xiaolin3303/wx-charts
作者:以乐之名
本文原创,有不当的地方欢迎指出。转载请指明出处。
微信小程序爬坑日记的更多相关文章
- 微信小程序踩坑日记1——调用微信授权窗口
0. 引言 微信小程序为了优化用户体验,取消了在进入小程序时立马出现授权窗口.需要用户主动点击按钮,触发授权窗口. 那么,在我实践过程中,出现了以下问题. . 无法弹出授权窗口 . 希望在用户已经授权 ...
- 微信小程序爬坑
1.app.json配置信息是怎样的? { "pages":[ "pages/页面1/页面1", "pages/页面2/页面2", ], & ...
- 微信小程序踩坑日记2——实时访问数据库并渲染UI
0. 引言 主要讲讲对于实时访问数据库并渲染UI我的解决方法. 一开始查到了随让小程序是单线程的,但是有一个基本上是封装的worker线程,相当于可以自己自定义(类似于Android开发里的handl ...
- 微信小程序踩坑日记3——上传照片至服务器
0. 引言 主要解决将小程序端获取的图片保存在服务器上.亲测可用的服务端脚本. 1. 获取照片 通过wx.chooseImage()方法,获取到图片,使用wx.uploadFile()上传图片. wx ...
- 微信小程序踩坑日记4——真机端解析json数组和开发平台不一样
0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.da ...
- 微信小程序爬坑记
1.this.setData修改数组里的值1).data: { hide:[true,true] },this.setData({ 'hide[0]': false});2).var str = &q ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 两百条微信小程序跳坑指南(不定时更新)
微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...
- 微信小程序入坑之自定义组件
前言 最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好.各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下.本 ...
随机推荐
- JS框架设计读书笔记之-异步
setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...
- C#中判断语句 if、if-else if、switch-case
1.if一般用于一个条件的判断: 2.if-else if 一般用于多个条件的判断: 3.switch-case一般用于多个条件的判断. 注:if-else if与switch-case的区别在于:一 ...
- sqoop1.4.6导出oracle实例
1.导入odbj6.jar到$SQOOP_HOME/lib目录下. 2.sqoop import --append --connect jdbc:oracle:thin:@219.216.110.12 ...
- C++ regex库的三种正则表达式操作
关于正则表达式的语法和字符含义,网上已经有很不错的博客教学,我当初参考的是 读懂正则表达式就这么简单 - Zery - 博客(http://www.cnblogs.com/zery/p/3438845 ...
- 【前端GUI】——网站设计的重要知识点总结&思维导图(一)
前言:网页美术设计具有四大特点,分别为交互性.整合性.多维性以及动态性.完整的网页设计既需要试听元素,也需要版式设计,以求有效的传达信息.在设计的时候,设计者要学会利用框架,也要学会打破框架. 一.优 ...
- Leetcode题解(21)
62. Unique Paths 题目 分析: 机器人一共要走m+n-2步,现在举个例子类比,有一个m+n-2位的二进制数,现在要在其中的m位填0,其余各位填1,一共有C(m+n-2,m-1)种可能, ...
- 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式 [转载]
前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...
- [java基础] 遇到的一个关于返回值泛型的问题
在写代码的时候这样写: import java.util.ArrayList; import java.util.List; public class TestConversion { public ...
- ORM框架SQLAlchemy与权限管理系统的数据库设计
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...
- 初识React-Redux之粗暴理解入门
权当暂记 日后再行补充完善,若有阅读者,请翻到下文黄色标题'从这里开始'起阅读. Rudex在我看来最本质做的事情就是将所有的State属性统一存储(一个属性就是一个注册到store的Reducer) ...