小程序学习---事件

简介: 一、什么是事件 1、事件是视图层到逻辑层的通讯方式。 2、事件可以将用户的行为反馈到逻辑层进行处理。 3、事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

一、什么是事件

1、事件是视图层到逻辑层的通讯方式。

2、事件可以将用户的行为反馈到逻辑层进行处理。

3、事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

4、事件对象可以携带额外信息,如 id, dataset, touches


二、事件的使用方式

1、在组件中绑定一个事件处理函数。如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。


点击(此处)折叠或打开

  1. view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click /view>


2、在相应的Page定义中写上相应的事件处理函数,参数是event


点击(此处)折叠或打开

  1. Page({
  2.   tapName: function(event) {
  3.     console.log(event)
  4.   }
  5. })


之后就可以在控制台看到相应的输出信息,当然在处理事件的时候,打印是最常用的调试手段。从上面的案例可以看到,bindtap的值和js文件中的处理函数名字要一样,这样才可以形成一一对应


三、事件的分类

事件分为冒泡事件和非冒泡事件

1、冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递

2、非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递

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 动画完成时触发

touchforcechange

在支持 3D Touch iPhone 设备,重按时会触发

注:除上表之外的其他组件自定义事件如无特殊声明都是非冒泡事件,如

submit 事件, input 事件, scroll 事件,(详见各个组件)



四、事件的绑定和冒泡

事件绑定的写法同组件的属性,以 keyvalue 的形式。

l   key 以bind或catch开头,然后跟上事件的类型,如bindtap、catchtouchstart。自基础库版本 1.5.0 起,bind和catch后可以紧跟一个冒号,其含义不变,如bind:tap、、catch:touchstart。

l   value 是一个字符串,需要在对应的 Page 中定义同名的函数。不然当触发事件的时候会报错。

l   bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

如在下边这个例子中,点击 inner view 会先后调用handleTap3和handleTap2(因为tap事件会冒泡到 middle view,而 middle view 阻止了 tap 事件冒泡,不再向父节点传递),点击 middle view 会触发handleTap2,点击 outer view 会触发handleTap1。


点击(此处)折叠或打开

  1. view id="outer" bindtap="handleTap1">
  2.   outer view
  3.   view id="middle" catchtap="handleTap2">
  4.     middle view
  5.     view id="inner" bindtap="handleTap3">
  6.       inner view
  7.     /view>
  8.   /view>
  9. /view>



五、事件的捕获阶段

自基础库版本 1.5.0 起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事件到达节点的顺序与冒泡阶段恰好相反。需要在捕获阶段监听事件时,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。

在下面的代码中,点击 inner view 会先后调用handleTap2、handleTap4、handleTap3、handleTap1。


点击(此处)折叠或打开

  1. view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2">
  2.   outer view
  3.   view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
  4.     inner view
  5.   /view>
  6. /view>


如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2。


点击(此处)折叠或打开

  1. view id="outer" bind:touchstart="handleTap1" capture-catch:touchstart="handleTap2">
  2.   outer view
  3.   view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
  4.     inner view
  5.   /view>
  6. /view>


六、事件绑定实例

1、本实例演示一个树状的结构,当点击某个项目的时候,首先要知道他的父目录id,然后是项目id,这两个id同时决定了跳转的页面

2、wxml文件


点击(此处)折叠或打开

  1. template name="foldTemplate">
  2.     !--捕获tap,捕获由外到内传递-->
  3.     view class="fold-container" capture-bind:tap='onFoldCapture' data-fold-id="{{foldId}}" >
  4.         !--需要设置自定义数据,将view的序号传入到js文件-->
  5.         view class='fold-head' bindtap='onFoldLaunch' data-current-id="{{foldId}}">
  6.            !--根据isLaunch的值来选择图片-->
  7.             image class="fold-img" src="{{isLaunch===1?'/images/arrow-down.jpg':'/images/arrow-right.jpg'}}">/image>
  8.             text class="fold-text">{{foldName}}/text>
  9.         /view>
  10.         !--根据子元素的个数来利用for循环-->
  11.         block wx:for="{{foldSub}}">
  12.             !--根据isLaunch的值来判断子元素是否要显示-->
  13.             !--需要设置自定义数据,将view的序号传入到js文件-->
  14.             view class='fold-content' wx:if="{{isLaunch}}" bindtap='onSubjectTap' data-subject-id="{{index}}">
  15.                 text class='fold-subject'>{{item}}/text>
  16.             /view>
  17.         /block>
  18.     /view>
  19. /template>


3、js文件


点击(此处)折叠或打开

  1. Page({
  2.   
  3.     //条目点击事件,根据不同的条目进行页面跳转
  4.     onSubjectTap: function(event){
  5.         var that = this;
  6.         //获取当前子元素的序号
  7.         console.log("subject id: " + event.currentTarget.dataset.subjectId);
  8.         var subjectId = event.currentTarget.dataset.subjectId;
  9.         console.log(that.data.fold[currentFoldId].foldSubUrl[subjectId]);
  10.         //跳转到对应的页面,将当前目录和子项的id传入
  11.         wx.navigateTo({
  12.             url: that.data.fold[currentFoldId].foldSubUrl[subjectId] + "?foldId="+currentFoldId+"&subjectId="+subjectId,
  13.         })
  14.     },
  15.   
  16.     //目录事件捕获,捕获发生在冒泡之前,而且捕获是由外到内的
  17.     onFoldCapture: function(event){
  18.         console.log("fold id : " + event.currentTarget.dataset.foldId);
  19.         //记录当前的目录id
  20.         //在点击目录下面的条目的时候,需要知道当前的条目属于哪个目录的
  21.         currentFoldId = event.currentTarget.dataset.foldId;
  22.     }
  23.   
  24. })


相关文章
|
5月前
|
小程序 API 数据库
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
85 0
|
3月前
|
小程序 JavaScript API
微信小程序开发学习之页面导航(声明式导航和编程式导航)
这篇文章介绍了微信小程序中页面导航的两种方式:声明式导航和编程式导航,包括如何导航到tabBar页面、非tabBar页面、后退导航,以及如何在导航过程中传递参数和获取传递的参数。
微信小程序开发学习之页面导航(声明式导航和编程式导航)
|
3月前
|
小程序 JavaScript
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
本文介绍了微信小程序中的数据绑定、事件绑定、事件传参与数据同步的基本概念和使用方法,包括如何在data对象中定义数据、使用mustache语法在wxml中渲染数据、绑定和处理事件、事件对象属性、事件传参以及实现输入框与data数据的同步。
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
|
4月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
115 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
JSON 小程序 JavaScript
微信小程序页面事件,下拉刷新事件和上拉触底事件
这篇文章介绍了微信小程序中如何实现下拉刷新和上拉触底事件,包括开启下拉刷新、配置下拉刷新样式、监听下拉刷新事件,以及监听上拉触底事件和配置上拉触底的距离。
|
4月前
|
小程序
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
这篇文章是作者关于学习微信小程序开发并在一周内成功开发出一个商城项目系统的心得体会,分享了学习基础知识、实战项目开发的过程,以及小程序开发的易上手性和开发周期的简短。
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
32 0
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的英语学习交流平台小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的英语学习交流平台小程序附带文章源码部署视频讲解等
47 0
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
47 0