事件机制是一种非常典型的通讯方式,可以在代码中的不同对象之间传递信息,也可以在应用的不同层面进行沟通协作。今天我们想看来一下微信小程序框架提供的事件处理机制。
小程序官方文档对事件的定义是:
- 事件是视图层到逻辑层的通信方式
- 事件可以将用户的行为反馈到逻辑层进行处理
- 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
- 事件对象可以携带额外信息,如 id, dataset, touches。
从这里我们可以看到,官方文档主要将事件用于小程序中针对用户交互行为的处理,即视图层(WXML)到逻辑层(Page)的通信,逻辑层收到这些用户行为事件后,可以进行业务处理,然后根据情况反馈或不反馈结果给用户。
好,那我们今天就撇开事件的其他用法,专门就讲视图层和逻辑层之间的事件用法。
总体上来说,小程序中的事件机制在工作原理上来讲,和HTML DOM的事件机制是一致的。在HTML中,我们可以通过在HTML元素上设置一个如onclick="clickHandler(event)"的属性来绑定用户的页面点击事件处理函数。而在WXML中,我们为一个组件绑定一个事件处理函数,可以使用如下语法来完成:
这里的bindtap就可以理解为将tap(点击)事件,绑定到一个名为tapName的事件处理函数上来进行处理。然后在相应的Page代码中,我们需要定义这个tapName函数:
这样完成了一个简单的tap事件的处理。当我们在小程序的界面上去点击这个显示为Click me的view组件的时候,view组件捕获到这个tap动作,然后告诉Page中的tapName函数,要对这个动作进行处理,同时,它也为tapName函数提供了足够多的信息,也就是event对象,来帮助我们更好更精准的处理我们的业务逻辑。我们可以来看一下我们这个例子中的event对象里面包含了哪些内容:
这里我们可以看到,在event对象中,包含了事件的名称,事件目标对象的信息,以及事件发生的在界面上的位置信息等等。我们在组件上设置的data-hi属性的值,也在target中的dataset上被携带了过来,这是比较有用的,在实际开发中,我们可以利用这个特性,来传递更多视图层的信息到逻辑层进行处理。
如果你有DOM编程的经验,你就会在这里想到,小程序里事件的冒泡和非冒泡是怎么处理的?如果你还不了解什么是事件冒泡,那我在这里解释一下:
在HTML或者WXML这些基于XML的树形结构的界面布局方式中,元素与元素之间是有层级关系的,子级元素上触发的事件,可以向父级元素逐层向上传递,所以,父级元素上也可以捕获子级元素上的事件并进行逻辑处理。
这种事件冒泡的机制,在实际的开发中也经常会用到,所以我们有必要来了解下在小程序中,是如何来使用冒泡事件的。WXML中分别提供了两种方式,用来绑定事件处理函数:
1. 使用 bind 开头的事件绑定,这种绑定不会阻止冒泡事件向上冒泡
2. 使用 catch 开头的事件绑定,这种绑定可以阻止冒泡事件向上冒泡
直观起见,我们直接来看一个示例代码:
在这个示例代码中,有三个逐级嵌套的view元素,最里层的是content元素,最外层的为outer-container元素。最里层和最外层的元素上,使用了bind属性绑定了tap事件的处理函数,而中间的innner-container上,使用了catch属性进行tap事件绑定。
然后,我们尝试在content上点击一下,可以看到这样的结果:
content和inner-container元素的tap事件处理函数被执行了,而outer-container元素的没有被执行。这说明在点击content的过程中,产生的tap事件向父级元素传递,而作为content元素的父级元素inner-container, 它使用了能阻止事件冒泡的catch方式,所以它在捕获通过冒泡形式过来的子级元素事件并执行事件处理函数后,让该事件停止向上传递,因此同样是父级元素的outer-contaner,就不再能收到这个冒泡事件了。
然后,来看一下,在不同层级的元素捕获的event对象,在数据方面有什么特点:
我们可以看到,在content的tap事件处理函数中,event里面的target和currentTarget的id都是content。
而在inner-container中的event对象里,target的id为content,而currentTarget的id是inner-content。
由此我们可以知道,event对象中的target是事件产生的源头组件,而currentTarget则是当前捕获这个事件的组件。
event对象中还包含其他一些有用的信息,如touches和changedTouches表示一个或多个手指在屏幕上的触摸位置和变动位置等信息,可以用来实现多点触摸的高级手势处理。
最后,关于事件冒泡,有一点是值得注意一下的:在微信小程序中,并不是所有事件都是冒泡的,从官方文档了解到,<canvas>组件的触摸事件不可冒泡。
相关推荐
微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要针对移动设备用户,...通过学习和分析这些示例,开发者能够更好地理解微信小程序事件机制,并熟练运用到实际项目中,提升用户体验,实现更丰富的交互功能。
微信小程序点餐系统是当前移动互联网时代餐饮业中常见的技术应用,它利用微信小程序平台,为用户提供便捷的在线点餐服务。本项目实战教程将深入探讨如何开发这样一个系统,涵盖从设计、编码到上线的全过程。 一、...
"微信小程序示例 - 小相册" 是一个典型的微信小程序开发教程或项目,它通过实际的代码示例帮助开发者了解如何利用微信小程序API和框架构建一个图片浏览应用。 在JavaScript开发微信小程序的过程中,主要涉及以下几...
这个"微信小程序代码-微信中的知乎--微信小程序demo.zip"压缩包提供了一个模仿知乎界面的微信小程序示例,帮助开发者理解和学习如何构建类似的应用。 1. **小程序模板代码**:在开发微信小程序时,模板代码可以作为...
这篇博客文章《微信小程序学习(5)_事件》深入探讨了微信小程序中的事件机制。 首先,我们需要了解微信小程序中事件的基本类型。事件大致可以分为点击事件(如tap、longTap)、触摸事件(如touchStart、touchMove...
《猫眼微信小程序源码深度解析》 在数字化时代的浪潮中,微信小程序因其轻便、无需下载安装的特点,成为移动互联网应用的新宠。本篇将深入探讨“猫眼微信小程序源码”,揭示其背后的开发技术和设计理念,为有意从事...
微信小程序电影小程序源码是一个适合用于毕业设计、期末大作业或课程设计的项目,它涵盖了微信小程序开发的基础知识和电影信息展示的相关技术。这个压缩包包含的文件名为“电影小程序”,意味着里面可能包括了实现一...
微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要针对移动设备,尤其是智能手机。它允许开发者在微信内创建原生体验的应用程序,无需通过应用商店即可供用户使用。这个压缩包文件“wechat”很可能包含了...
在微信小程序中,由于其渲染机制和性能限制,当处理大量的动态内容或者复杂的交互时,可能会出现卡顿现象,影响用户体验。为了解决这个问题,这个demo提供了一种优化策略,旨在提高滑动验证的流畅性。 1. **...
在这个实例中,用户可以编辑和保存文本,这需要对用户输入的数据进行管理,通常通过微信小程序的全局数据管理机制实现。 4. **计时功能**: 计时功能可能涉及到计时器(timer)的概念。开发者可以使用wx....
9. **样式隔离**:学习如何避免样式冲突,合理使用类名和选择器,以及微信小程序提供的样式隔离机制。 10. **调试与测试**:掌握微信开发者工具的使用,进行代码编辑、预览、调试和性能优化。 通过实践“美食列表...
此外,微信小程序还提供了生命周期管理和事件处理机制。每个页面都有其特定的生命周期,如`onLoad`、`onShow`、`onHide`等,开发者可以根据这些生命周期来执行相应的操作。同时,通过绑定事件处理函数,可以实现用户...
2. **数据绑定**: WXML 和 WXSS 之间的数据交互通过 JavaScript 进行,利用微信小程序的 Vue.js 风格的数据绑定机制,如 `{{ }}` 双大括号表达式,实现视图层与逻辑层的数据同步。 3. **Page 结构**: 小程序的每个...
同时,可能会有筛选和搜索功能,利用到微信小程序的事件处理机制。 3. **餐饮小程序前端**:这是为餐饮业设计的小程序,可能包括菜单浏览、在线点餐、支付等功能。它可能使用了微信的地理位置API获取用户位置,结合...
微信小程序一键解密工具是一款专为开发者和研究人员设计的实用软件,主要功能是解析和解密微信小程序的wxapkg格式的包文件。在微信小程序的开发和调试过程中,了解和掌握这款工具对于深入理解小程序的工作原理以及...
3. **微信小程序分享机制**: 微信小程序的分享功能主要分为两种:基础分享和自定义分享。基础分享是指小程序内部页面的分享,而自定义分享则允许开发者自定义分享的内容,包括标题、图片、描述等。在`web-view`中...
3. **数据管理**:微信小程序使用了基于JSON的存储机制,如wx.setStorageSync和wx.getStorageSync,源码中可能包含如何保存和读取用户课程表数据的方法。 4. **API调用**:源码可能涉及到微信小程序提供的API,如...
11. **页面路由管理**:微信小程序有自己的页面路由机制,用于控制页面之间的跳转和参数传递。 12. **本地存储**:可以使用wx.setStorageSync和wx.getStorageSync进行数据的本地持久化存储。 13. **动画效果**:...
4. **页面路由**:微信小程序有自己的一套页面跳转机制,通过navigator组件和wx.navigateTo等方法实现页面间的导航。在商城项目中,页面路由管理包括商品详情页、购物车页、订单页之间的跳转。 5. **事件处理**:...