0、写在前面的话

前几章的内容串联起来,基本上已经能写比较基础的小程序页面逻辑了,当然,wxml和wxss的我并没有写,因为前端我也并不擅长。这个章节,准备随便叨叨,然后补充一些之前没有提到的基础知识,这部分我会从我慕课网的学习笔记上搬过来,不过说实话,慕课网的笔记不能导出,还是很麻烦的,笔记记录的体验还行,但是查阅的体验可实在不怎么样。

1、rpx

在HTML中我们常用的是px这个单位,而在微信小程序中,官方提供了rpx单位,也是用得最多的单位,因为可以自适应屏幕,先看下官方的解释吧:
rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

上面的概念就要稍微展开一些来谈了,我们先来说说什么是px,它其实有两个方面的概念:
  • 设备像素点px
  • CSS像素点px

设备像素点px,我们可以理解为说的是一个点,可是,谁能描述说一个“点”具体有多大多长?但是我们可以知道的是,同等面积,点越小,数量越多,画面就越清晰。这里的同等面积,就是指pt(印刷行业的常用单位,等于1/72英寸),一个pt中容纳多少个px,则称之为Reader,即pt/px的值,一般人类肉眼的极限是2~3。而所谓分辨率,就是指可以铺多少个设备像素点(当然这个点的大小各个设备定义不同),iPhone6的分辨率是750*1334,可以算出,其1个pt中铺了750/375=2个点。

而我们在Web中也有用的px这个单位,这里则不是指所谓设备像素点,而是指CSS像素点px,同时要知道的是,并不完全CSS中的1px≠设备中的1px,CSS的px在不同设备是不同的,也就是说,“当你给元素设置了 width: 200px 时,这个元素的宽度跨越了200个CSS像素。但是它并不一定跨越200个设备像素”,拿苹果的视网膜屏幕来举例,它的像素密度是普通屏幕的2倍,所以当我们设置 width: 200px; 时,200个CSS像素跨越了400个设备像素,如下图(《一篇真正教会你开发移动端页面的文章(一)》):


那么问题来了,一个CSS像素px到底有多长?它是一个相对单位,说起来就复杂了,抛出一个链接《像素(px)到底是个什么单位》,按参考文章中的总结,px是一个相对单位,而且在特定设备上总是一个近似值(原则是尽量接近参考像素)。

所以你可以理解为,就手机设备而言,CSS的px是个“固定”的单位长度,而这个长度在iPhone6则是375px*667px:
 
好了,现在我们回过头来再看微信中rpx的定义:
rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

那么现在你可以理解了,微信规定了屏幕宽为750rpx,那么假设你设置一个字体为75rpx,那么它会占手机屏幕宽度的75/750=10%,不管手机是iPhone6还是iPhone4,始终是尺寸的10%了。这也是为什么文档中建议开发微信小程序时设计师用 iPhone6 作为视觉稿的标准了,因为iPhone6正好是375px,分辨率是750*1334,正好和750rpx相同,从视觉稿到页面设计,不必再去额外转换。

当然,在微信小程序中并不是所有都适合使用rpx,比如部分文字,在iPhone6上使用rpx作为单位,换作iPhone4小屏幕,可能字体就缩小到无法看清了。不同场合下,根据需要使用rpx或px。

2、wxss的引入

之前在讲到模板部分的时候,模板引入了,实际上模板对应的wxss也是可以独立开进行单独引入的。使用 @import 语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束,如下例:
/** common.wxss **/
.small-p {
padding:5px;
}
4
 
1
/** common.wxss **/ 
2
.small-p {
3
  padding:5px;
4
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
 
1
/** app.wxss **/
2
@import "common.wxss";
3
.middle-p {
4
  padding:15px;
5
}

3、关于Page下的json

app.json可以配置全局属性(整个应用程序,包括window),某个页面下的json只能配置当前页面的配置(仅window);所以单独页面的时候配置时不需要写window。

4、利用事件冒泡精简绑定代码

合理利用事件的冒泡,可以精简事件绑定的代码,如swiper中各个item的点击事件,可以统一绑定只在swiper上绑定一个事件即可,因为冒泡所以会被触发,但是要注意的是数据传递的问题,target和currentTarget的区别:taget指的是当前点击的组件,例如swiper里的image,而currentTarget指的是事件捕获的组件。
 

5、方法体,页面等变量参数的传递

往往可以考虑在Page的data中,或者App的全局变量,设置是小程序的缓存中,考虑变量属性的中转。

6、template注意事项

template模板中的事件,是无法在对应的template目录下的js文件中的,并不会生效。事件的对应函数,应该在调用模板的page中的js去写。

template传入的数据data,可以采用组合的方式,详见官方文档

不要在template上写class来控制样式,template只是一个占位符,实际上解析的时候就没了。

7、星星评分的启发

在豆瓣的页面中,我们可以看到星星评分的样式,实现的方式有点启发:把评分转换成5个数字的数组,如1表示有星,0表示无星(如5星是[1,1,1,1,1],三星则是[1,1,1,0,0]),循环即可通过三元运算符进行控制星星图片输出来实现。

8、页面编写的思路

先里后外,模板嵌套,先静后动,豆瓣 API,先结构后样式

9、设置页面背景颜色

json文件里面配置的background-color是最底层的,就是下拉刷新露出来的那部分背景。要设置我们常用的底层背景色,则设置page组件的 background-color 即可。
 

10、scroll-view和下拉刷新

下拉刷新则通过在 xxx.json 中配置实现,页面包含scroll-view则下拉刷新会“失效”,因为滑动会只滑动scroll-view组件而不是页面,所以无法触发onPullDownRefresh事件。想共存的方法就是将scroll-view替换为view,改用onReachBottom监听页面上滑到底。

11、undefined等数据为空的错误

做数据绑定时,最好给对象初始值(即使是空值),主要是数据请求的方式是异步的,可能因为执行的先后顺序而读取不到对象,继而报错。

12、scroll-view滚动展示图片

对于scroll-view中横向滚动展示图片,最好加上css white-space:nowrap(不换行)

13、css3新特性:模糊滤镜

filters主要运动在图片上以实现特效,如模糊则为 -webkit-filter:blur(20px)

微信小程序开发 [06] 一些补充的知识点的更多相关文章

  1. 从零入手微信小程序开发

    前言: 哈哈,发现我写的随笔都是项目驱使的.当然,这篇也是项目驱使的咯,前段时间领导在玩微信时候发现了微信小程序的好处,流程,切换速度快等,然后就让小弟研究研究小程序的实现. 补充下,博客大多都是处理 ...

  2. 微信小程序开发工具中快捷键

    微信小程序开发工具表面上是没有更多的样式类的工具,例如缩进.隐藏代码什么的. 现在总结一下小程序开发工具常用的一些快捷键: 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ct ...

  3. WordPress版微信小程序开发系列(二):安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  4. 《腾讯游戏人生》微信小程序开发总结

    为打通游戏人生擂台赛与线下商家的O2O衔接,同时响应时下日臻火热的微信小程序,项目团队决定也开发一款针对性的微信小程序,以此方便商家在我们平台入驻并进行擂台赛事的创建和奖励的核销,进一步推广擂台赛的玩 ...

  5. 微信小程序开发:学习笔记[3]——WXSS样式

    微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...

  6. 微信小程序开发:学习笔记[1]——Hello World

    微信小程序开发:学习笔记[1]——Hello World 快速开始 1.前往微信公众平台下载微信开发者工具. 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  7. 微信小程序开发-蓝牙功能开发

    0. 前言 这两天刚好了解了一下微信小程序的蓝牙功能.主要用于配网功能.发现微信的小程序蓝牙API已经封装的很好了.编程起来很方便.什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数 ...

  8. 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载

    微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...

  9. 让微信小程序开发如鱼得水

      关于微信小程序开发一直想写一篇相关的文章总结和记录下,结果拖延症犯了迟迟没有下笔:这不最近天气不错,于是找一个空闲的下午将这篇文章输出下(好像跟天气没啥关系),那我们就开始吧! 注意:本文默认开发 ...

随机推荐

  1. JS 模块 p6

    利用了闭包的模块: 简单模块例子: function fn(){ ; function y(){ console.log(x); } return { y:y} }var do1 = fn() do1 ...

  2. html area标签详解

    <area> 标签定义图像映射中的区域(注:图像映射指得是带有可点击区域的图像). area 元素总是嵌套在 <map> 标签中. 注:<img> 标签中的 use ...

  3. Jquery 清除空白字符

    $.grep(“jQuery数组”, function(n) { return $.trim(n).length > 0; }); /*仅过滤空数组,不过滤相同数组*/

  4. Java语法基础(四)----循环结构语句

    一.循环结构: 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则 ...

  5. 什么是 Azure 中的虚拟机规模集?

    虚拟机规模集是一种 Azure 计算资源,可用于部署和管理一组相同的 VM. 由于所有 VM 的配置都相同,因此无需对 VM 进行任何预先配置. 这样就可以更方便地构建面向大型计算.大数据.容器化工作 ...

  6. Oracle EBS FTP显示无法与某IP 连接

    首先 用root用户登录 如果可以登录 那么应该是权限的问题 这里选择 方法二:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to ...

  7. Django中的DateTimeField格式

    转自:http://www.nanerbang.com/article/5488/ 创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来 ...

  8. Configure network bonding on RHEL (Red Hat Enterprise Linux)

    Question: Recently I have to use the RHEL and need to config the network with a few NICs. Here comes ...

  9. Tidb数据库报错:Transaction too large

    Tidb是一个支持ACID的分布式数据库,当你导入一个非常大的数据集时,这时候产生的事务相当严重,并且Tidb本身对事物的大小也是有一个严格的控制. 有事务大小的限制主要在于 TiKV 的实现用了一致 ...

  10. SQL server 数据库基本插入、删除命令

    一.实验素材: 附加学生信息表(student) 二.实验要求: 1.  查询student表中所有学生的信息 select  * from  student 2.  查询student表中“姓名”“ ...