程序框架:包括逻辑层、视图层和flex模型。逻辑层由javascript编写,视图层由WXML和WXSS配合组件组成,flex布局确保页面适应不同屏幕尺寸时在恰当的位置。本篇主要介绍视图层。
逻辑层介绍见https://blog.csdn.net/maidu_xbd/article/details/
flex布局介绍见https://blog.csdn.net/maidu_xbd/article/details/
1.WXML(WeiXin Markup Language)微信标记语言
WXML是框架设计的一套标签语言,结合基础组件+自定义组件;可以构建出页面的结构。
- (1)数据绑定:简单绑定 ,组合属性绑定,控制属性绑定,运算绑定,组合绑定,依次如下。
<view>{
{msg}}</view> <view id='{
{id}}'></view> <view wx:if='{
{age>=18}}'>成年人</view> //控制属性绑定 <view wx:if='{
{true}}'>为true显示</view> //控制属性绑定 <view>{
{a+b}}</view> <view wx:for='{
{[1,2,array]}}'>{
{item}}</view>
讯享网
- (2)列表渲染---【wx:for】
【buding.wxml】
讯享网<view wx:for='{
{student}}' wx:key='student{
{index}}'> <view>学生{
{index+1}}:{
{item}}</view> </view>
【buding.js】
Page({ / * 页面的初始数据 */ data: { student:['小李','Tom','Sarry'] } })
- (3)条件渲染---【wx:if="{ {condition}}"】
【buding.wxml】
讯享网<view wx:if="{
{age<18}}">青少年</view> <view wx:elif="{
{age>=18 && age<35}}">青壮年</view> <view wx:elif="{
{age>=35 && age<55}}">中年</view> <view wx:else>老年</view>
【buding.js】
Page({ / * 页面的初始数据 */ data: { age:36 } })
wx:if与hidden:均可以控制组件的显示与隐藏,区别在于wx:if是惰性的,如果初始渲染条件为false,框架什么也不做,在条件第一次变成true时才开始局部渲染,具有更高的切换消耗。而hidden无论条件为true或false,初始就会被渲染,具有更高的初始消耗。因此,如果需要频繁的切换组件,用hidden更好;如果在运行时条件很少发生改变,则使用wx:if更好。
- (4)模板--【<template>】
is属性用于指定正确的模板名称才能成功引用,引用<template>标签必须带有is属性
讯享网<template name="myTemp"> <view wx:for="{
{student}}" wx:key="student{
{index}}"> <view>学生{
{index+1}}:{
{item}}</view> </view> </template> <template is="myTemp" data="{
{student}}"></template>
- (5)事件:事件是视图层到逻辑层的通信方式,特点有①可以将用户的行为反馈到逻辑层进行处理;②可以绑定在组件上,当触发事件就会执行对应的事件处理函数;③对象可以携带额外信息,例如id,dataset,touches。
---事件使用---
//buding.wxml <button id="myBtn" bindtap="myTap">按钮</button>
讯享网//buding.js Page({ myTap:function(e){ console.log(e) } })
控制台输出如下
---事件分类---
事件分为冒泡事件和非冒泡事件。
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递,由内向外传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
WXML中支持的冒泡事件
| 类型 |
触发条件 |
| touchstart |
手指触摸动作开始 |
| touchmove |
手指触摸后移动 |
| touchcancel |
手指触摸动作被打断,如来电提醒,弹窗 |
| touchend |
手指触摸动作结束 |
| tap |
手指触摸后马上离开 |
| longpress |
手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 |
| longtap |
手指触摸后,超过350ms再离开(推荐使用longpress事件代替) |
| transitionend |
会在 WXSS transition 或 wx.createAnimation 动画结束后触发 |
| animationstart |
会在一个 WXSS animation 动画开始时触发 |
| animationiteration |
会在一个 WXSS animation 一次迭代结束时触发 |
| animationend |
会在一个 WXSS animation 动画完成时触发 |
---事件绑定和冒泡---
事件绑定的写法同组件的属性,都是以 key=value 的形式。
- 1)key 以bind或catch开头,然后跟事件的类型,如bindtap、catchtouchstart。自基础库版本 1.5.0 起,bind和catch后可以紧跟一个冒号,其含义不变,如bind:tap、catch:touchstart。
- 2)value 是一个字符串,需要在对应的 Page 中定义同名的函数,不然当触发事件的时候会报错。
bind事件和catch事件的区别:bind事件绑定不会阻止冒泡事件向上冒泡;catch事件绑定可以阻止冒泡事件向上冒泡。
【wxml】
<view>事件冒泡-bind事件绑定不会阻止冒泡事件向上冒泡</view> <view class="outBox" bindtap="onOutBoxClick"> <view class="innerBox" bindtap="onInnerBoxClick"> </view> </view>
【wxss】
讯享网.outBox{ margin:0 auto; width: 200px; height: 200px; background: rgb(110, 110, 201); padding:50px; box-sizing: border-box; } .innerBox{ width: 100px; height: 100px; background: rgb(113, 201, 110); }
【js】
Page({ onInnerBoxClick:function(e){ console.log("内层盒子被点击了") }, onOutBoxClick:function(e){ console.log("外层盒子被点击了") } })

当把【<view class="innerBox" bindtap="onInnerBoxClick">】替换为【<view class="innerBox" catchtap="onInnerBoxClick">】,则点击内层盒子,控制台只输出“内层盒子被点击了”,因为catch事件绑定可以阻止冒泡事件向上冒泡。
---事件的捕获阶段---
自基础库版本 1.5.0 起,触摸类事件支持捕获阶段。可以在组件的冒泡事件被触发前进行事件的捕获。捕获阶段事件的顺序与冒泡阶段完全相反,由外向内进行捕获。采用capture-bind、capture-catch进行捕获,capture-catch会中断捕获和取消冒泡。捕获的优先级大于冒泡。
示例
讯享网<view id="A" bindtap="tap1" capture-bind:tap="tap2"> view A <view id="B" bindtap="tap3" capture-bind:tap="tap4"> view B </view> </view>
如果如果单击【view A】先后调用tap2,tap1
如果单击【view B】先后调用tap2,tap4,tap3,tap1,如下

如果把图中28行的“capture-bind”替换为“capture-catch”,则只会触发tap2,捕获被中断,冒泡被取消。
---事件对象---
事件对象分为基础事件(BaseEvent)、自定义事件(CustomEvent)、触摸事件(TouchEvent)
基础事件(BaseEvent)对象属性列表
| 属性 |
类型 |
说明 |
| type |
String |
事件类型 |
| timeStamp |
Integer |
事件生成时的时间戳 |
| target |
Object |
触发事件的组件的一些属性值集合 |
| currentTarget |
Object |
当前组件的一些属性值集合 |
自定义事件(CustomEvent)对象属性列表:
| 属性
|
类型 |
说明 |
| detail |
Object |
额外的信息 |
触摸事件(TouchEvent)对象属性列表:
| 属性 |
类型 |
说明 |
| touches |
Array |
触摸事件,当前停留在屏幕中的触摸点信息的数组 |
| changedTouches |
Array |
触摸事件,当前变化的触摸点信息的数组 |
- (6)引用
包括【import】和【include】两种方式
<import src="temp.wxml" /> <template is="temp01" data="{
{text:'hello'}}"></template>
注意:<import>有作用域的概念,即只会引用目标文件自己定义的template,不会引用目标文件中用<import>引用的第三方模板。这样做的目的是为了避免多个页面彼此互相连接引用陷入逻辑错误。
使用<include>将目标文件除了<template>以外的代码引入,相当于复制代码作用。
讯享网<include src="header.wxml" /> <view>正文</view> <include src="footer.wxml" />
<import>更适合统一样式但内容需动态变化的情况;<include>更适合无需改动目标文件的情况。
2.WXSS(WeiXin Style Sheets)微信样式表
wxss类似于css,用来描述页面结构对应的样式。它具有css大部分特性,对css进行了扩充和修改,主要有尺寸单位、样式导入等扩充和修改。
- (1)尺寸单位:
rpx(responsive pixel),可以根据屏幕宽度自适应,规定屏幕宽为750rpx。一般以iphone6屏幕做为视觉设计标准。
rpx 与 px单位换算如下:
| 设备 |
rpx换算px (屏幕宽度/750) |
px换算rpx (750/屏幕宽度) |
| iPhone5 |
1rpx = 0.42px |
1px = 2.34rpx |
| iPhone6 |
1rpx = 0.5px |
1px = 2rpx |
| iPhone6s |
1rpx = 0.552px |
1px = 1.81rpx |
- (2)样式导入:
【@import "../../templates/common.wxss"】
- (3)常用属性
| 样式属性 |
说明 |
| background-color |
背景色 |
| color |
前景色 |
| font-size |
字体大小 |
| border |
边框 |
| width |
宽度 |
| height |
高度 |
- (4)内联样式
style 和class
【<view style="color:red;background-color:#ccc">测试1</view>】
【<view style="color:{ {color}}">测试2</view>】
【<view class="style1">测试3</view>】
- (5)选择器
| 选择器 |
示例 |
说明 |
| .class |
.style1 |
选择所有拥有class=”style1”属性的组件 |
| #id |
#test |
选择所有拥有id=”test”属性的组件 |
| element |
view |
选择所有view组件 |
| element,element |
view,text |
选择所有view组件和test组件 |
| ::after |
view::after |
在view组件后插入内容 |
| ::before |
view:before |
在view组件前插入内容 |
- (6)全局样式与局部样式
在app.wxss中的样式为全局样式,作用于每个页面。在每个页面的wxss文件中定义的样式为局部样式,只作用于对应的页面,并会覆盖app.wxss中的相同的选择器。
3.组件
组件是wxml页面上的基本单位,例如按钮,图片等,具体


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12462.html