[TOC]
# 1.事件分类
事件分为冒泡事件和非冒泡事件:
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
## 类型 触发条件 最低版本
| touchstart | 手指触摸动作开始 |
|---|---|
| touchmove | 手指触摸后移动 |
|touchcancel |手指触摸动作被打断,如来电提醒,弹窗|
|touchend |手指触摸动作结束
|tap| 手指触摸后马上离开
|longpress| 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个|事件,tap事件将不被触发 1.5.0
longtap |会在 WXSS transition 或 wx.createAnimation 动画结束后触发
animationstart |会在一个 WXSS animation 动画开始时触发
animationiteration |会在一个 WXSS animation 一次迭代结束时触发
animationend |会在一个 WXSS animation 动画完成时触发
touchforcechange |在支持 3D Touch 的 iPhone 设备,重按时会触发
> 注:除上表之外的其他组件自定义事件如无特殊声明都是非冒泡事件,如`<form/>`的submit事件,`<input/>`的input事件,`<scroll-view/>`的scroll事件,(详见各个组件)
# 2.事件绑定和冒泡
> 事件绑定的写法同组件的属性,以 key、value 的形式。如: bindtap="jump"
## 原生组件 catchtap bindtap
## 自基础库版本 1.5.0 起,在非原生组件中 bind:tap catch:tap
## 什么是事件冒泡
> 事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签
> bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。
```
<view id="outer" bindtap="handleTap1">
爷爷
//只调用爷爷 bind对下不影响
<view id="middle" catchtap="handleTap2">
爸爸
<view id="inner" bindtap="handleTap3">
儿子
//点击儿子会先后调用儿子和爸爸 bind 向上冒泡
</view>
</view>
</view>
```
# 3.事件对象
## target
触发事件的源组件。
| 属性 | 类型| 说明|
|---|---|---|
| id | String |事件源组件的id
|tagName| String |当前组件的类型
|dataset |Object |事件源组件上由data-开头的自定义属性组成的集合
## currentTarget
事件绑定的当前组件
属性 |类型 |说明
|---|---|---|
id |String |当前组件的id
tagName| String |当前组件的类型
dataset |Object |当前组件上由data-开头的自定义属性组成的集合
## target和currentTarget 的区别
> target 正在被点击的组件
currentTarget 指事件(catchtap )捕获的组件
### catchtap事件
```
//wxml
<view class='parent' catchtap='parent' data-title= "parenttitle">
<view class='child' data-title="childtitle"></view>
<!-- catchtap 可以阻止事件冒泡 bindtap 不可以阻止 -->
</view>
```
```
//js
parent(event){
// console.log(event.target.dataset.title); //点击子 childtitle 点击父是 parenttltie
console.log(event.currentTarget.dataset.title) //点击父子都是parenttitle
},
child(event){
console.log("child")
}
```
### bindtap事件冒泡后的target 和currentTarget
```
//wxml
<view class='parent' catchtap='parent' data-title= "parenttitle">
<view class='child' data-title="childtitle" bindtap="child"></view>
<!-- catchtap 可以阻止事件冒泡 bindtap 不可以阻止 -->
</view>
```
```
//js
parent(event){
// console.log(event.target.dataset.title); //点击子 child childtitle 点击父是 parenttltie targe指向点击事件
console.log(event.currentTarget.dataset.title) //点击父是parenttitle 点击子是child parenttitle 因为bind会向上冒泡,而currentTarget指向绑定事件所以是parenttitle
},
child(event){
console.log("child")
}
```
- 开发环境及接口
- 0.豆瓣接口
- 1.开发环境配置
- 2.一些相关文档
- 小程序实例效果
- 第0节、TodoList
- 第一节、豆瓣相关
- 1、tabBar的配置及导航加标题
- 2、数据加载及下拉加载
- 3、加载相关
- 4、轮播
- 5、星星评分
- 第二节、音乐播放相关
- 1.点击收藏分享
- 2.音乐播放
- 初始版
- 组件版
- 组件加强版
- 3.点赞
- 点赞初级版
- 点赞第二版
- 5.左右按钮
- 6.缓存
- 第三节、补充
- 地图
- 点击拍照换图
- 扫一扫
- 小程序语法
- 第一节 、HTTP的封装
- 0.http请求
- 1.function封装
- 2.class封装http
- 3.promise封装
- 4.config地址
- 第二节、组件
- 2.组件单独设置样式
- 3.一些有意义的标签
- 4.behavior
- 5.SLOT
- 6.左右按钮
- 5.点赞组件
- 6.用户授权
- 图片按钮 如分享
- 第三节、api
- 1.页面跳转
- 获取input里的值
- 1.添加评论
- 2.搜索框
- 3. 获取input里的值
- 2.设置缓存
- 3.模态框,弹出框
- 4.分享showActionSheet
- 5.定义全局的数据
- 2. 基础知识
- 1.setData
- 2.文件结构
- 3.wxml语法
- 第一节 数据绑定
- 第二节 列表渲染
- 第三节 条件渲染
- 第四节 模板
- 第五节 事件
- 第六节 引用
- 4.wxs
- 1.文本缩进问题
- 5.小程序中遇到的wxss 问题
- 1.width100%越界问题
- 废弃的文件
- 一个完整的小程序
- 1.启动页面
- 2.yuedu轮播+封装及数据调用
- yuedu的详情页
- 3.电影
- movie-more
- web-view