实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。
小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数,对象可以携带额外信息,如 id, dataset, touches。
汇总来说小程序的事件是一种处理用户交互的方式,通过监听用户的操作行为,触发相应的事件来处理具体的业务逻辑和显示效果。小程序事件主要包括用户操作事件和自定义事件,开发人员需要了解这些事件的方法和机制,以便正确地处理用户的操作,并实现良好的用户体验。


事件分类
小程序开发中的事件分为冒泡事件和非冒泡事件:
1、冒泡事件
当一个组件上的事件被触发后,该事件会向父节点传递。例如下图所示:
![]()
2、非冒泡事件
当一个组件上的事件被触发后,该事件不会向父节点传递。无特殊声明都是非冒泡事件,如 form 的submit事件,input 的input事件,scroll-view 的 scroll 事件。
案例实操演示
具体如何操作我们这里以 WXML 为例,从底层逻辑上来讲,在我们还没有进行事件绑定时,只在小程序的 WXML 结构中声明了一个键值对。
将 WXML 进行 virtualDOM 编译,这里的编译就是 virtualDOM 使用过的 $gwx 函数,一起来看下声明的 tap 键值对编译在了哪里。

可以看到上面找到声明事件标记的层级中,attr 属性内部有 bindtap: bindTextTap 键值对。那么这个 DOM 结构是怎么进行事件解析的呢?
解析的算法在底层基础库 WAWebview.js 文件中,我们现在此提前解析一下事件模块完整的流程,为了防止到后面底层基础库章节再讲的话,知识形成不了闭环。
我这里解析的基础库版本为2.11.0。
底层基础库中解析 virtualDOM 函数 applyProperties 源码如下, attr 属性解析,包含事件解析。

紧接着返回的l函数源码:


可以看到 applyProperties 中有一个 forIn 循环去遍历 virtualDOM 中的 attr 属性。
然后执行e函数,这里可知e函数的参数及为attr对象中的属性名称key。
e函数中有很多的if,是用来判断特殊的属性名称的,我们绑定的tap事件键值对是 bindtap: bindTextTap , key 也就是 bindtap ,事件绑定的前缀有很多比如 bind、catch,看到第10行左右的if中用正则if (n = e.match(/^(capture-)?(mut-)?(bind|catch):?(.+)$/)) 判断 attr 中的属性名是否为事件属性。如果是事件属性的话执行E函数,并且转换为 exparser 组件系统中的 attr 属性名称 exparser:info-attr- 。
小程序事件系统总结
小程序中,事件是处理用户交互的重要手段,通过监听用户操作行为和自定义事件,可以实现复杂的业务逻辑和良好的用户体验。开发人员需要了解不同的事件类型和触发方法,根据不同的业务需求进行灵活使用和处理。同时,良好的事件设计和处理也是提升应用程序质量和用户满意度的关键因素之一。
当我们说到小程序想必大家第一时间想到的就是微信小程序、支付宝小程序等,其实除了将我们开发好的小程序上架到各个平台之上,我们还可以通过集成FinClip SDK将小程序上架到自己的 App 中,这样就能最大化的实现一次开发多端上架,大幅降少在开发中的人力和成本投入。
相关文章:
实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件&#…...
无涯教程-Perl - bless函数
描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...
Java关键字:final解析
目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常࿰…...
LeetCode--HOT100题(25)
目录 题目描述:141. 环形链表(简单)题目接口解题思路代码 PS: 题目描述:141. 环形链表(简单) 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连…...
外卖项目,登录设计,nginx反向代理,MD5明文加密
.gitignore文件里的东西是进行排除,不用git进行管理。登录设计, controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后,生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...
【云原生】kubernetes在Pod中init容器的作用和使用
目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像…...
springboot+vue分页
java项目 导包 <!--springboot整合pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.1</version></dependency>前端 vue项目…...
【linux】ssh 和adb connect区别
问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…...
iPhone手机怎么恢复出厂设置(详解)
如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题,恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置?简单来说,就是让手机重新变成一张白纸,将手机所有数据都进行格式化,只保留原…...
灵活利用ChatAI,减轻工作任务—语言/翻译篇
前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景,并提供文本翻译与校对等功能。通过与ChatAI互动,我们能够更好地利用技术来拓展自己在语言领域的能力和知识,实现更加无障…...
【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
python 定时器,如何进行周期性的函数运行、状态检查,百分比计算?
文章大纲 schedulescheschedule线程实现1实现2实现3协程(coroutine)参考文献schedule https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python https://docs.python.org/3/library/sched.html sche schedule import schedule import ti…...
无涯教程-Perl - fcntl函数
描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…...
docker 命令解析
docker命令解析的文章参考 build 和 commit build适合从头创建一个清晰干净的镜像。 build是从Dockfile产生新的镜像,对于使用者能清晰的知道镜像中包含了哪些内容。commit适合将已有的容器打包提供给其他使用者。 commit是从已经存在的容器产生镜像,这…...
Map集合 实体类对象的相互转换
一、Map转实体类 1. fastjson工具类 导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version> </dependency>代码实现 Map<String, Object> authorMap n…...
用chatGPT从左右眼图片生成点云数据
左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…...
dy六神参数记录分析(立秋篇)
version: 23.9 X-SSSTUB: 搜索:x-tt-dt var hashMap Java.use("java.util.HashMap");hashMap.put.implementation function (a, b) {console.log("hashMap.put: ", a, b);return this.put(a, b);}https://codeooo.blog.csdn.n…...
微信-jssdk使用
需求: h5中使用微信的jsSDK,后续实现微信定位以及多图上传 微信文档 申请测试公众号 1.测试公众号进行配置 其中的域名是本地的ip地址 config接口进行权限配置,动态获取JS-SDK权限验证的签名 获取公众号accessToken以及jsTicket public static String WeChatAppId="wx…...
guava-retry使用笔记
guava-retry使用笔记 xml依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>2.0.0</version> </dependency>使用案例 重试3次,每次间隔3秒 /*** 重试…...
P1226 【模板】快速幂 | 取余运算
【模板】快速幂 | 取余运算 题目描述 给你三个整数 a , b , p a,b,p a,b,p,求 a b m o d p a^b \bmod p abmodp。 输入格式 输入只有一行三个整数,分别代表 a , b , p a,b,p a,b,p。 输出格式 输出一行一个字符串 a^b mod ps,其中 …...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
