微信小程序中的JS
作用:JS主要是用来做交互,比如:响应用户的点击、获取用户的位置等等。通过编写 JS 脚本文件来处理用户的操作。
简单来说,WXML决定有什么内容,WXSS决定内容长什么样子,JS呢,决定了页面和用户操作的交互,体验好不好就看JS了。
例如,页面中有个按钮,
<view>{{ msg }}</view>
<button bindtap="clickMe">点击我</button>
事件概念:这里的button(bindtap=“clickMe”)绑定了一个clickMe的事件,当点击时就会触发clickMe函数。
而在JS里呢,当点击的时候,就把msg的内容动态替换为“Hello World”。
Page({
clickMe: function() {
this.setData({ msg: "Hello World" })
}
})
事件:
事件呢,就是视图层到逻辑层的通讯方式。
简单来说,通过把事件绑定在组件上(在WXML),然后事件携带信息传递到JS中做函数处理,这就是WXML到JS的通信方式。
举例来说明,在组件中绑定一个事件处理函数。
如bindtap,当点击该组件的时,会在Page中找到相应的事件处理函数(tapName函数)。
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
JS里的代码:
Page({
tapName: function(event) {
console.log(event)
}
})
当用户点击时,就会执行tapName函数,打印event。
事件呢,可以分为冒泡事件和非冒泡事件。
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
WXML里的常用冒泡事件有:
注意:除上表之外的其他组件自定义事件,如无特殊声明都是非冒泡事件,如<form/>的submit事件,<input/>的input事件,<scroll-view/>的scroll事件。
事件的绑定和冒泡
事件绑定的写法同组件的属性,以 key、value 的形式。也就是key=value(如bindtap="handleTap1")
- key 以
bind
或catch
开头,然后跟上事件的类型,如bindtap
、catchtouchstart
。自基础库版本 1.5.0 起,bind
和catch
后可以紧跟一个冒号,其含义不变,如bind:tap
、、catch:touchstart
。 - value 是一个字符串,需要在对应的 Page 中定义同名的函数。
注意:bind
事件绑定冒泡事件可以向上冒泡,catch
事件绑定冒泡事件不会向上冒泡。
<view id="outer" bindtap="handleTap1">
outer view
<view id="middle" catchtap="handleTap2">
middle view
<view id="inner" bindtap="handleTap3">
inner view
</view>
</view>
</view>
如上,
点击 inner view 会先后调用handleTap3
和handleTap2,而不会在向上冒泡到outer
(因为tap事件会冒泡到 middle view,而 middle view 阻止了 tap 事件冒泡,不再向父节点传递)。
点击 middle view 会触发handleTap2
。
点击 outer view 会触发handleTap1
。
(待续...)