谈谈ontouchstart、ontouchend、onclick区别和坑


prtyaa
prtyaa 2023-12-26 17:00:59 52697
分类专栏: 资讯

今天来说一下他们三个之间的区别和坑点

先来了解一下他们的概念

touchstart:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。
touchend:当手指从屏幕上离开的时候触发。
click:点击事件

我们用一个例子来说今天的这个东西

<body>
	<div style="width: 100px;height: 100px;background: #0086B3;"></div>
</body>
<script type="text/javascript">
	var btn = document.querySelector('div');
	btn.addEventListener('click',()=>{
		console.log('click')
	})
	btn.addEventListener('touchstart',()=>{
		console.log('touchstart')
	})
	btn.addEventListener('touchend',()=>{
		console.log('touchend')
	})
</script>
动图封面
 

我们先看一下ontouchstart、ontouchend、onclick这三个方法的执行顺序。

可以看到它们的执行顺序是ontouchstart > ontouchend > onclick

除了执行顺序不同以外,还有一个非常大的区别那就是onclick只在你快速点击并放开才会被执行,如果你点击一个区域,很迟才放开,那么onclick是不会执行的,如下图就是我点击div两秒以后松开的结果。

动图封面
 

从上图可以看到它并没有输出click,其实我们移动端滑动时,也是不会触发click事件的,这也是ontouchstart、ontouchend和onclick最大区别。

接下来说说他们的坑点

比如说有这么一个需求,当点击a标签里的某个元素时通过location.href跳转,但当我去测试时,发现一个问题,我上下滑动的时候,结果直接跳转了地址。

导致滑动跳地址的原因就出现在,我是给那个元素添加的ontouchend事件,而ontouchend事件在你滑动结束后是会被触发的,也许你会想,用onclick不就行了,我何尝不想用onclick,没用onclick也是有原因的,它有点透问题,比如下面这段代码

<body>
	<a href="//www.taobao.com">
	    <div>无效</div>
	    <p id="baidu">跳到baidu</p>
	</a>
</body>

<script type="text/javascript">
	var baidu = document.querySelector("#baidu");
	baidu.addEventListener("click",function(event){
	    location.href = "//www.baidu.com";
	});
</script>
动图封面
 

可以看到点百度并没有跳转过去。

它并不是因为事件冒泡导致的,网上说是因为click延时触发导致的,可能是这样的,因为click的延时,导致事件在没触发之前,就已经传递给了a标签,至于为什么被传递的这个事件先被执行,就不得而知了。

解决这个问题倒也简单,阻止浏览器默认事件就可以了,代码如下

baidu.addEventListener("click",function(event){
	    event.preventDefault();
	    location.href = "//www.baidu.com";
	});
动图封面
 

其实不只是click有这个问题,ontouchend也会有同样的问题。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30888
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
WPS City Talk · 校招西安站来了!  3757
服贸会|范渊荣获年度创新领军人物!王欣分享安恒信息“AI+安全”探索  3683
有在找工作的IT人吗?  3646
字节跳动“安全范儿”高校挑战赛来袭!三大赛道,赢 80 万专项基金!  3604
阿B秋招线下宣讲行程来啦,速速报名!  3599
字节跳动校招 | 电商业务 2025 校园招聘进行中!五大职类热招,等你来投!  3590
麒麟天御安全域管平台升级!为企业管理保驾护航  3575
烽火通信2025届校园招聘宣讲行程发布!!  3411
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  3372
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  3343
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!