小程序----小程序框架学习(二)视图层

小程序----小程序框架学习(二)视图层程序框架 包括逻辑层 视图层和 flex 模型 逻辑层由 javascript 编写 视图层由 WXML 和 WXSS 配合组件组成 flex 布局确保页面适应不同屏幕尺寸时在恰当的位置 本篇主要介绍视图层 逻辑层介绍见 https blog csdn net maidu xbd article details

大家好,我是讯享网,很高兴认识大家。

程序框架:包括逻辑层、视图层和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-bindcapture-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页面上的基本单位,例如按钮,图片等,具体

 

小讯
上一篇 2025-01-27 07:07
下一篇 2025-03-09 13:46

相关推荐

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