微信小程序 WXML、WXSS 和JS介绍及详解


Posted in Javascript onOctober 08, 2016

前几天折腾了下。然后列出一些实验结果,供大家参考。

0. 使用开发工具模拟的和真机差异还是比较大的。也建议大家还是真机调试比较靠谱。

1. WXML(HTML)

1.1 小程序的WXML没有HTML的宽容度​那么高,单标签必需是 /> 结尾的。不然会报错。

1.2 ​官方推荐使用的基础标签<view>是块标签,给了<text>作为文本标签,但是使用其他标签比如div也是可以使用的,并且都是inline标签。并且wxml的parser会把标签上的不在白名单上的属性都去掉,class, id, data 这些应该都在白名单内,但是href什么的是不会有的,所以如果你用传统的html的标签构建页面理论上也是可行的,不过这些都是inline标签,需要自行设定display。

1.3 ​scroll-view 的scroll-top, scroll-left 是可以修改scroll-view的滚动位置的。但是用户自己滚动了之后小程序并不会去改变 scroll-top, scroll-left 的赋值(并不是双向同步的)。如果这时使用setData去修改的话,scroll-top, scroll-left 的赋值和上一次的值相同,小程序是不会运用这个修改的,所以表现就是设置没有生效。这时只能先设置一个其他值,再设置回去(这里还可以体现setData方法是同步的)。scroll-view 获取scroll位置,只能通过bindscroll的回调函数获取,所以需要取scroll位置的请自行预存好。scroll-view 还是有webview的 scroll 的臭毛病,在居顶位置如果第一个动作是向下滚动的,会导致之后手怎么滑都滚不动,设置scroll-top 不为0,设个1就好了。

1.4 input 目前只支持文字居左,其他都是不行的(模拟器可以)。如果你做表单,建议把input等表单元素都放在form中,from触发submit时会返回内部所有表单元素的name-value。不然只能绑定所有表单元素的 change 事情来获取,甚是麻烦。

1.5 只有  checkbox-group 有 change 事件,单个的checkbox是没有的,如果你只有一个checkbox, 觉得外面套一个checkbox-group麻烦又不美观的话,可以用 switch type="checkbox" 代替。(微信小程序应用号交流群 563752274)

1.6 map 组建目前直接在app第一个页面加载会出现加载失败。需要在onLoad之后再加在。可以先wx:if="false" 然后onLoad的之后改成 true 就行了。

1.7 map, canvas 像是在webview上面盖一个native组件的感觉。它们是没法被overflow 以及 上面盖元素的,你可以认为z-index写多高都没法在他上面。所以不建议在页面上做弹层和蒙层。canvas 无法放在scroll-view中滚动会定位在初始位置,如果你给canvas设置背景颜色的话,你会发现背景色块跟着滚了,图没滚。

2. WXSS(CSS)

2.1 WXSS 和 CSS很像,基本所有的CSS都支持,小程序还提供了 rpx 这个单位。一屏幕宽是750rpx。推荐使用这个来作为布局。不过有一些细小的差别我下面会列出

2.2 WXSS不支持 大括号嵌套({{}} )。所以key-frames,CSS animation 就不可用了,不过transition 是可用的。

2.3 目前测试引入字体也是不可用的,前面WXML中提到的内容看SVG也是没法使用的。所以icon目前只能用图的方式做了。

2.4 WXSS中是不能引入本地资源的, 只能使用线上资源(模拟器是可以,但是别信),可以使用base64。(微信小程序应用号交流群 563752274)

2.5 WXSS的 rule 是不支持集联的。所以不能 body .main {background:#000;} 这么写。所以写起来还是比较费劲的。每个class都得很长,不然怕重名。不过支持 li.current {color: red;} 这样的写法,支持after, before伪类,但是不支持 first-child last-child nth-child 这类伪类。

2.6 app.wxss 和每个 page 的wxss 的覆盖关系是: 如果有同名 rule 的话,page 会覆盖 app 的,不是merge是覆盖。

3. JS

3.1 JS 的运行环境和view的运行环境是隔离的。JS只能通过事件获取时机和setData方法修改数据来改变view。

3.2 JS 目前有个很大的问题是无法获取到页面px级的宽度高度, 所有事件回调的单位都是px级的而不是rpx的,但是又不知道当前rpx,px的转换关系。比如过你用canvas画图。你都不知道边界在哪里,这个很蛋疼。

3.3 上面有说过 setData方法如果上一个值和下一个值相同时,是不会触发view修改的(见1.3)

3.4 使用 navigate 跳转的时候可以使用queryString的方式跟在相对地址上,onLoad事件会在入参中传入(会转化成object),但是 navigate back的时候没有一个官方给出的数据通讯机制。可以使用getApp() 获取到全局对象,给上面加点东西,自行实现。navigate 最多5个什么的就不说了。

3.5 canvas getActions被调用之后,actions是会被清空的。即连续调用两次getActions,第二次是空数组。

3.6 开发者工具是nw写的,我就看了看裙底的源码,开发者工具中WXML确实是有parser再拼装的过程的。但是并不能说明小工具是native的,从css的支持力度到webview的一些bug相似度来看,我还是觉得像webview,但是组件比如map,canvas什么的用的是原生view,然后盖在webview上的感觉。但是不管怎么说 auto-focus 能自动呼出键盘就已经是个很大的好评了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
js事件冒泡实例分享(已测试)
Apr 23 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
javascript中的this详解
Dec 08 Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
jquery插件懒加载的示例
Oct 24 jQuery
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
Oct 08 #Javascript
Javascript单例模式的介绍和实例
Oct 08 #Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 #Javascript
jquery判断类型是不是number类型的实例代码
Oct 07 #Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 #Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 #Javascript
jquery删除table当前行的实例代码
Oct 07 #Javascript
You might like
php addslashes 函数详细分析说明
2009/06/23 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
javascript关于继承解析
2016/05/10 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
Python 文件操作实现代码
2009/10/07 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
自荐信的两点禁忌
2013/10/30 职场文书
校园之声广播稿
2014/01/31 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python