深入学习小程序第二天:事件处理与用户交互
一、概念
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…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
