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. Android--将实体类转化成Json和Map的基类

    package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...

  2. Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具

    Github: https://github.com/vadimdemedes/ink Ink introduction: React for CLIs. Build and test your CL ...

  3. .net core项目初建

    电脑装Visual Studio2017,并升级版本.启动一个.net core 的项目. NET Core基本介绍 1.1 什么是ASP.NET Core ASP.NET Core 是一个全新的开源 ...

  4. Java高并发编程(四)

    一.Executor执行器 1.Executor接口,java线程池框架中的顶层接口,提供一个execute方法来执行任务 import java.util.concurrent.Executor; ...

  5. PostgreSQL数据加载工具之pg_bulkload

    1. 介绍 PostgreSQL提供了一个copy命令的便利数据加载工具,copy命令源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载.pg_bulkload ...

  6. Linux之添加交换分区

    Linux下的交换分区我们可以随意改变大小,如果说日常生活中分区不够用,今天我们来举个例子如何添加. 1.首先是使用dd命令创建一个空文件,这个空文件的大小就是你要继续添加的swap的大小,比如我这里 ...

  7. MySQL基础之 AUTO_INCREMENT

    AUTO_INCREMENT AUTO_INCREMENT是mysql唯一扩展的完整性约束,当为数据库表中插入新纪录时,字段上的值会自动生成唯一的ID,再具体设置AUTO_INCREMENT约束时,一 ...

  8. div中文本水平居中,垂直居中

    div: text-align=center; hight=100px; line-hight=100px;(行高需要和高度设置成一样)

  9. 使用C#获取Windows Phone手机的各种数据(转)

    转自:http://www.sum16.com/desinger/use-c-sharp-get-windows-phone-information.html 使用C#获取Windows Phone手 ...

  10. excle函数

    1.time函数 说明: https://support.office.com/zh-cn/article/time-%E5%87%BD%E6%95%B0-9a5aff99-8f7d-4611-845 ...