WXSS(WeiXin Style Sheets)
这东西其实是微信自己的一种 CSS
语言,大部分都还是 CSS
语法,也有自己的东西,主要针对微信自己的 WXML
标记语言而生的,用来丰富其组件的显示效果。
-
WXSS
相对CSS
并没有太大差别,只是需要注意以下几点-
rpx
像素单位,具体值是:1rpx == 0.5px == 1物理像素
,物理像素说的是硬件上表达的像素概念; -
样式导入:在
WXSS
文件中使用@import test.wxss;
方式导入,后面的分号不要省略; -
样式使用方式:内联和行内,由于组件的
style
属性接受动态参数形式去在运行时改变样式,因此建议:静态样式即不太会改变的样式不要使用行内style
形式,避免运行时重复渲染,而需要动态发生变化的采取行内方式,比如:style="width:{{myWidth}};color:{{myColor}};"
,列表中的焦点行,获取到焦点时改变其宽度和字体颜色,就只要把这两个属性放到行内去运行时渲染。
例子: (预期达到的效果:点击表内行,背景框变亮,字体颜色变成白色)
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
页面图:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
点击行之后效果图:
从两图效果看,并不是想要的结果,点击行之后并不是当前行改变了,而是所有行都发生了变化,想想也是,
Page
中的data
数据属性是全局的,而列表行又是通过wx:for
生成的多组件列表,属性所用的数据都是data.rowStyle
中的样式数据,当点击时数据发生变化,导致所有行都发生了变化。但是
wxml
又不允许直接操作组件,也没法获取到组件对象下,只能从数据入手。 -
测试用例
-
列表行单个刷新样式的解决方法(从数据入手)
此方法可能比较笨拙,经测试可以达到预期效果,具体思路:
-
页面组件中,动态属性写法:(运用
{{flag ? sth : other}}
)动态改变属性值; -
怎么让
flag
在点击时能动态改变值呢,这个时候需要用到wx:for
创建组件时的索引idx
以及自定义属性了,即给每一行一个自定义属性,而这个属性的值就是当前组件的创建时的索引值,即:data-index="{{idx}}"
,这样做之后,就可以在index.js
中通过event.target.dataset.index
方式去取到该值;
具体实现如下:
页面修改:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
脚本修改:(体现在数据和行为上)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
经过上面的修改,正式达到我们想要的效果(网上随便百度了个屏幕录制gif软件,发现还挺好用的 - -!)
-
页面组件中,动态属性写法:(运用
-
用例说明
-
页面: 充分利用
wx:for
的index
值,并且和自定义属性dataset
相结合,生成data-index
自定义属性,值等于wx:for
的index
值; -
数据: 添加两个样式对象和一个行标记值数组(
rowDftStyle
,rowFocusStyle
,rowFocusFlagArray
),三者关系为:通过判断rowFocusFlagArray
中对应行的标识值来决定采用rowDftStyle
还是rowFocusStyle
去作为当前行的样式; -
行为: 先清空数据防止上一焦点行不还原,然后根据
dataset
获取当前行索引,再根据索引去设置rowFocusFlagArray
值,最后通过自动刷新机制去改变样式;
-
页面: 充分利用
-
总结
-
这篇本来根据
W3CSchool
分类是要和组件,和WeUI.js
框架放一起,最后弄着弄着搞了点小例子,后面也看了下组件和WeUI.js
框架东西还是挺多的,决定分开放到下一次再去学习了,放一起怕消化不掉; -
本篇主要简单记录了
WXSS
自己的一点东西,应该不止像素和样式问题,后续再慢慢积累,主要是后面的动态改变焦点例子的实现,这个也算是承上启下吧,连接上一篇学习的内容,做了个小小的测试练习,复习下上一篇内容,加深下印象; -
这个小测试用例目的主要有关:焦点动态改变问题,由于不能直接操作页面组件,因此只能从数据和行为方面去做处理,还好想到了个方法,感觉这个比较笨拙,不知道还有没有更方便的方法来实现。
完整
demo
代码地址:https://github.com/gcclll/JavaScript-Codes/tree/master/demos/WeChat/TvodPlayList -