通过封装mousedown和touchstart等事件,结合定时器与移动距离判断,可实现兼容PC与移动端的长按功能,核心是按下后设定时间内未释放且移动不超过阈值即触发长按。

在HTML5中,原生并没有提供“长按”事件,但可以通过组合使用鼠标事件(如mousedown、mouseup)和触摸事件(如touchstart、touchend)来实现。为了兼容桌面端和移动端,需要对这些事件进行封装,判断用户是否持续按压一定时间,从而触发长按逻辑。
长按的本质是:用户按下(鼠标或手指)后,在设定时间内未释放,则判定为长按。关键点如下:
以下是一个兼容鼠标和触摸的长按事件封装示例:
function addLongPressListener(element, callback, duration = 1000) {
let timer = null;
let isLongPress = false;
let startX, startY;
<p>// 防止默认行为(如选中文本)
element.style.userSelect = 'none';</p><p>const start = (e) => {
isLongPress = false;
startX = e.type === 'touchstart' ? e.touches[0].clientX : e.clientX;
startY = e.type === 'touchstart' ? e.touches[0].clientY : e.clientY;</p><pre class='brush:php;toolbar:false;'>timer = setTimeout(() => {
isLongPress = true;
callback(e); // 触发长按回调
}, duration);};
即梦AI
一站式AI创作平台,免费AI图片和视频生成。
16094
查看详情
const move = (e) => { if (!timer) return; const currentX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; const currentY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY;
// 判断是否滑动过多,防止误判
const threshold = 10; // 移动超过10px视为取消长按
if (Math.abs(currentX - startX) > threshold || Math.abs(currentY - startY) > threshold) {
clearTimeout(timer);
timer = null;
}};
const end = () => { if (timer && !isLongPress) { clearTimeout(timer); } timer = null; };
// 绑定事件 element.addEventListener('mousedown', start); element.addEventListener('touchstart', start);
element.addEventListener('mousemove', move); element.addEventListener('touchmove', move);
element.addEventListener('mouseup', end); element.addEventListener('touchend', end); element.addEventListener('touchcancel', end); // 处理中断情况 }
将上述方法应用到某个DOM元素:
const box = document.getElementById('longPressBox');
addLongPressListener(box, () => {
alert('长按触发!');
}, 1500); // 1.5秒后触发
HTML结构:
<div id="longPressBox" style="width: 200px; height: 200px; background: #007bff; color: white; text-align: center; line-height: 200px;"> 长按我试试 </div>
实际使用中需注意以下几点:
基本上就这些。通过合理封装,可以实现跨平台一致的长按体验,提升交互丰富性。
以上就是HTML5代码如何实现长按事件 HTML5代码鼠标与触摸事件的封装的详细内容,更多请关注其它相关文章!
# 相关文章
# 承德seo关键词排名
# 商品SEO标题优化建
# 萧县推广网站大全
# 上城企业网站推广
# 平面设计推广网站
# 罗定营销短视频推广公司
# 优化网站内外链
# 虹口区零售营销推广
# 白帽seo去哪里报名
# 专业的电商网站优化价格
# 可以通过
# html5代码
# 两种
# 内未
# 交互性
# 是一个
# 第三方
# 如何实现
# 按下
# 鼠标
# ssl
# html5
# html
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名
在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程
cad怎么隐藏指定的图层_cad隐藏或冻结图层方法
快递查询,一键速查
《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略
优化 WooCommerce 产品价格显示与自定义短代码集成
12306售票时间最新规定 | 网上订票和车站窗口时间一样吗
怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】
如何在CSS中设置背景图像:一个全面指南
猫眼app抢票快还是小程序快
Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频
Bootstrap 5导航栏折叠功能失效:数据属性迁移指南
windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
《百度畅听版》关闭兴趣推荐方法
qq邮箱怎么注册_QQ邮箱注册步骤与注意事项
Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧
纯CSS实现自适应宽度与响应式布局的水平按钮组
《跳跳舞蹈》循环播放方法
Go语言反射机制下访问嵌入结构体中的被遮蔽方法
鸿蒙单条备忘录如何加密
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
Flexbox布局:实现粘性导航与底部页脚的完美结合
mysql如何管理数据库账户_mysql数据库账户管理技巧
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!
哔哩哔哩黑名单怎么查看
智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法
韩小圈网页版PC端入口 韩小圈网页版官方网站入口
漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享
win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】
Retrofit根路径POST请求:@POST("/") 的应用与解析
Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件
被称为海蜈蚣的海洋动物是
12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化
AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用
米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复
折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点
悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置
德邦快递收费标准详解
QQ邮箱注册地址 免费获取QQ邮箱账号
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
哈尔滨城市通昵称修改方法
diskgenius分区工具如何设置Bios启动项
Golang如何操作指针参数_Go pointer参数传递规则
优化Flask模板中SQLAlchemy查询迭代标签:处理字符串空格问题
J*aScript二进制处理_ArrayBuffer与Blob
C++ bind函数使用教程_C++参数绑定与函数适配器的应用
《伊瑟》凶影追缉库卢鲁boss攻略
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
2025-10-27
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。