⼩程序WXML、WXSS和JS介绍及详解
前⼏天折腾了下。然后列出⼀些实验结果,供⼤家参考。
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 s croll-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个什么的就不说了。
svg交互是什么
3.5 canvas getActions被调⽤之后,actions是会被清空的。即连续调⽤两次getActions,第⼆次是空数组。
3.6 开发者⼯具是nw写的,我就看了看裙底的源码,开发者⼯具中WXML确实是有parser再拼装的过程的。但是并不能说明⼩⼯具是native的,从css的⽀持⼒度到webview的⼀些bug相似度来看,我还是觉
得像webview,但是组件⽐如map,canvas什么的⽤的是原⽣view,然后盖在webview上的感觉。但是不管怎么说 auto-focus 能⾃动呼出键盘就已经是个很⼤的好评了。感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。