a标签的onclick事件_谈谈ontouchstart、ontouchend、onclick区别和坑

ea5bc6986cf398213b7dc6dc05bdf735.png

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

先来了解一下他们的概念

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

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

<

8df82048b4269942ed37ab4ea138325e.gif

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

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

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

b63af04a2121813731c30e932dd25dae.gif

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

接下来说说他们的坑点

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

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

<

bbaeba967a4eccdc59a2affa233fdcd7.gif

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

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

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

baidu

5cc84d8abd1bacccff90cb9771e0fade.gif

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

今天就到这里啦,希望大家踊跃发言!

9b6d70d54828467c4fc3edbd9c927c46.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值