深入学习小程序第二天:事件处理与用户交互
一、概念
1. 事件绑定与类型
在小程序中,通过在组件上添加特定的属性(如 bind
开头的属性)来绑定事件处理函数,以响应用户的交互操作。常见的事件类型包括触摸事件、表单事件和系统事件:
- 触摸事件:用于响应用户在页面上的触摸操作,例如
bindtouchstart
、bindtouchmove
、bindtouchend
等。 - 表单事件:用于监听表单元素的输入变化或选择操作,例如
bindinput
、bindchange
等。 - 系统事件:用于监听页面滚动、尺寸改变等系统层面的事件,例如
bindscroll
、bindresize
等。
2. 事件处理函数与事件对象
当事件被触发时,会调用事先定义好的事件处理函数。事件处理函数接收一个事件对象 event
,其中包含了触发事件的详细信息,如触发事件的组件、触摸点的位置、输入框的输入内容等。开发者可以通过 event.currentTarget
获取当前触发事件的组件,以及通过 event.detail
获取具体的事件信息。
3. 事件冒泡与捕获
小程序事件系统支持事件的冒泡和捕获阶段:
-
事件冒泡:事件从触发事件的最内层组件开始向外层组件传递,逐级触发父组件的事件处理函数。常用的是以
bind
开头的事件绑定属性,如bindtap
。 -
事件捕获:事件从最外层组件开始向内层组件传递,首先触发最外层组件的事件处理函数。捕获阶段的事件绑定属性通常以
catch
开头,如catchtap
。
通过合理使用事件冒泡和捕获,开发者可以控制事件在组件层级中的传递和响应顺序,实现更精细化的交互设计。
4. 用户交互与反馈
通过事件处理,开发者可以实现丰富的用户交互和反馈效果,例如:
- 根据用户的触摸操作更新页面内容或状态。
- 监听用户在表单元素中的输入或选择,实现实时的数据交互。
- 根据用户点击按钮或其他交互元素来导航到不同的页面或执行特定的操作。
这些交互效果不仅提升了用户体验,还能增加应用的互动性和功能性,使应用更加吸引人和实用。
二、用法
1. 事件绑定与类型
在小程序中,事件绑定通过在组件上添加特定的属性来实现。常见的事件类型包括:
- 触摸事件:用于响应用户在页面上的触摸操作。
bindtouchstart
:手指触摸动作开始时触发。bindtouchmove
:手指触摸后移动时触发。bindtouchend
:手指触摸动作结束时触发。
示例:
<view bindtouchstart="touchStart">触摸我</view>
Page({touchStart: function(event) {console.log('触摸动作开始', event);}
});
- 表单事件:用于监听表单元素的输入变化或选择操作。
bindinput
:输入框的输入内容发生变化时触发。bindchange
:表单元素的值发生改变时触发。
示例:
<input type="text" bindinput="inputChange" placeholder="输入内容">
Page({inputChange: function(event) {console.log('输入框内容变化', event.detail.value);}
});
- 系统事件:用于监听系统层面的事件,如页面滚动、尺寸变化等。
bindscroll
:页面滚动时触发。bindresize
:页面尺寸改变时触发。
示例:
<scroll-view bindscroll="scrollHandler"><!-- 可滚动内容 -->
</scroll-view>
Page({scrollHandler: function(event) {console.log('页面滚动', event);}
});
2. 事件处理函数与事件对象
事件处理函数接收一个 event
参数,该参数包含了触发事件的详细信息,如触发事件的组件、触摸点位置等。
示例:
Page({buttonClicked: function(event) {console.log('按钮被点击了', event);let dataset = event.currentTarget.dataset;console.log('按钮上绑定的数据', dataset);}
});
在上述例子中,event.currentTarget
表示当前触发事件的组件,event.currentTarget.dataset
可以获取该组件上绑定的数据。
3. 事件冒泡与捕获
小程序事件系统支持事件冒泡和捕获。冒泡事件(以 bind
开头)会从触发的组件向上冒泡到父组件,而捕获事件(以 catch
开头)则在捕获阶段处理,不会冒泡。
<view bindtap="tapHandler"><button catchtap="catchHandler">按钮</button>
</view>
Page({tapHandler: function() {console.log('view 被点击');},catchHandler: function() {console.log('button 被点击,捕获阶段');}
});
在上述例子中,点击按钮时,catchtap
捕获阶段的事件处理函数先执行,然后再执行 bindtap
冒泡阶段的事件处理函数。
4. 用户交互与反馈
通过事件处理,可以实现丰富的用户交互效果,例如:
- 实时更新页面内容或状态,响应用户输入或操作。
- 根据用户点击进行页面跳转或提交表单数据。
- 使用手势操作(如滑动、双击)来实现更复杂的交互动作。
示例:
<button bindtap="navigateToPage">跳转到新页面</button>
Page({navigateToPage: function() {wx.navigateTo({url: '/pages/newPage/newPage'});}
});
三、总结
事件处理与用户交互是小程序开发中的核心内容之一,合理使用事件绑定和事件处理函数,可以为用户提供流畅、直观的应用体验。通过掌握事件类型、事件对象、事件冒泡与捕获等知识,开发者能够更灵活地应对各种用户操作,实现丰富的交互效果。
相关文章:
深入学习小程序第二天:事件处理与用户交互
一、概念 1. 事件绑定与类型 在小程序中,通过在组件上添加特定的属性(如 bind 开头的属性)来绑定事件处理函数,以响应用户的交互操作。常见的事件类型包括触摸事件、表单事件和系统事件: 触摸事件:用于响…...

操作系统快速入门(一)
😀前言 本篇博文是关于操作系统的,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉&…...
Spring Cloud微服务性能优化:策略、实践与未来趋势
标题:Spring Cloud微服务性能优化:策略、实践与未来趋势 摘要 在微服务架构中,服务调用链路的性能优化是确保系统高效运行的关键。Spring Cloud作为微服务架构的主流实现之一,提供了多种工具和方法来优化服务间的调用。本文将深…...

秒懂C++之多态
目录 一. 多态的概念 二. 多态的定义及实现 多态的构成条件 虚函数重写的例外 协变(基类与派生类虚函数返回值类型不同) 析构函数的重写(基类与派生类析构函数的名字不同) 练习例题 final override 重载、覆盖(重写)、隐藏(重定义)的对比 三. 抽象类 四. 多态的原理…...

C语言:求最大数不用数组
(1)题目: 输入一批正数用空格隔开,个数不限,输入0时结束循环,并且输出这批整数的最大值。 (2)代码: #include "stdio.h" int main() {int max 0; // 假设输入…...

零门槛成为HelpLook推荐官,邀好友加入,奖励享不停!
什么!? 还有谁不知道HelpLook推荐官计划! 只需要简单地注册加入 在好友成功订阅套餐之后 可一次性获得20%的丰厚现金返佣 HelpLook是一款快速搭建AI知识库的系统,并帮助企业0代码搭建帮助中心、FAQs、SOPs、产品文档、说明书和…...
基于python的图书馆大数据可视化分析系统设计与实现
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
利用formdata自动序列化和xhr上传表单到后端
//FormData对象是XMLHTTPRequest level2新增的类型,它可以自动序列化表单内容,不再需要我们去写序列化表单方法; FormData()即可以直接把整个表单给它,也可以分别使用append(‘字段’,‘值’)方法给FormData(); 现在就…...

视频号小店大地震?还好我看了原文
关注卢松松,会经常给你分享一些我的经验和观点。 我X,如果不是看了原文,我差点也上当了。虽然视频号小店关闭了450个类目,但又重新开放了412个类目啊。 昨天(8月9日),视频号一口气发了10个公…...

Genymotion adb shell
Genymotion 账户是 qq邮箱 参考 Ubuntu 20.04 安装 Android 模拟器 Genymotion https://www.zzzmh.cn/post/553cd96d4e47490a90b3302a76a93c0d Genymotion adb shell adb shell C:\Program Files\Genymobile\Genymotion\tools>adb shell lsusb Bus 001 Device 001: ID …...

探索AI与社交的交汇点:看Facebook如何引领智能化革命
在当今数字化时代,人工智能(AI)正成为各大科技公司变革的重要驱动力。作为全球领先的社交媒体平台,Facebook(现Meta Platforms)正处于这一智能化革命的前沿。通过不断创新和应用AI技术,Facebook…...

JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?
在JVM(Java虚拟机)的类加载过程中,Class对象的加载位置涉及到堆(Heap)和方法区(Method Area)两个关键区域。具体来说,类的加载阶段涉及到将类的.class文件中的二进制数据读入到内存中…...
Android 获取短信验证
Android 获取短信验证 Android 获取短信验证 输入发短信的手机号,点击获取验证码,等接收到验证码后就会自动获取 SmsReceiver.Java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; impor…...

负载均衡详细概念介绍之(四层和七层实现)
目录 一、负载均衡介绍 1.1什么是负载均衡 编辑 1.2 为什么要用负载均衡 二、负载均衡的类型 2.1 通过一些硬件实现 2.2 四层负载均衡 2.3 七层负载均衡 三、四层和七层的区别 及特点 一、负载均衡介绍 1.1什么是负载均衡 负载均衡:Load Balance,简称LB&a…...

力扣 | 递增子序列 | 动态规划 | 最长递增子序列、最长递增子序列的个数、及其变式
文章目录 一、300. 最长递增子序列二、673. 最长递增子序列的个数三、变式1、646. 最长数对链2、1218. 最长定差子序列3、1027. 最长等差数列4、354. 俄罗斯套娃信封问题5、1964. 找出到每个位置为止最长的有效障碍赛跑路线 最长递增子序列:原序-递增数值问题 最长定…...

008 | 基于RNN和LSTM的贵州茅台股票开盘价预测
基于RNN和LSTM的贵州茅台股票开盘价预测 项目简介: 本项目旨在通过使用Tushare下载贵州茅台的股票数据,并基于这些历史数据,使用TensorFlow 2.0实现循环神经网络(RNN)和长短期记忆网络(LSTM)来…...

尚硅谷谷粒商城项目笔记——六、使用navciat连接docker中的mysql容器【电脑CPU:AMD】
六、使用navciat连接docker中的mysql容器 注意: 因为电脑是AMD芯片,自己知识储备不够,无法保证和课程中用到的环境一样,所以环境都是自己根据适应硬件软件环境重新配置的,这里的虚拟机使用的是VMware。 1navicat免费…...
【git】本地更改了,但又想直接从远端拉取覆盖本地(放弃本地更改前行下载)
拉取时错误信息 error: cannot pull with rebase: You have unstaged changes. error: Please commit or stash them.个错误信息表明你在尝试使用git pull --rebase命令时,你的工作目录中存在未提交的更改(即未暂存(unstaged)的更…...

基于JSP的书店仓库管理系统
你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:JSP 数据库:MySQL 技术:JSPJava 工具:ECLIPSE、Tomcat 系统展示 首页 管理员功能模块 用户功能模块 员工功能模…...
pytorch框架保存和加载模型
在 PyTorch 中,有几种常见的方法来保存和加载模型,具体方法取决于你想保存什么内容(例如,只保存模型的权重,还是保存整个模型)。下面我将介绍几种常见的保存和加载模型的方法。 1、保存和加载模型的 state…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...