移动端tap事件,也称移动端的click事件

骑猪看日落 2021-12-01 12:26 564阅读 0赞

pc端的的click事件在移动端也是可以出发的,只是在移动端会出现延迟的现象,早期移动设备浏览器网页时内容比较小,为增强用户体验,苹果公司专门为移动设备设计了双击放大的功能,确保用户可以非常方便的放大网页内容,但是当用户单击一个按钮时,移动设备会延时(约300ms)执行,判断用单是否要双击。用触屏事件可以解决这个问题。
移动端单击事件时:要注意的问题有:
1、单击只有一个手指操作;
2、判断手指开始触摸和手指松开的时间差异不能大于一定值:300/150;这就类似是长按操作判断。
3、保证没有滑动操作,如果有,要保证在一定范围内。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <title></title>
  8. <style>
  9. div{
  10. width: 100px;
  11. height: 200px;
  12. background-color: red;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div></div>
  18. <script>
  19. //单击只有一个手指操作;判断手指开始触摸和手指松开的时间差异不能大于一定值:300/150;保证没有滑动操作,如果有,要保证在一定范围内。
  20. var div = document.querySelector("div");
  21. var startTime, startX, startY;
  22. div.addEventListener("touchstart", function(e){
  23. //判断是否只有一根手指
  24. if(e.targetTouches.length > 1){
  25. return;
  26. }
  27. //记录当前手指开始触摸的时间
  28. startTime = Date.now();
  29. //当前坐标
  30. startX = e.targetTouches[0].clientX;
  31. startY = e.targetTouches[0].clientY;
  32. });
  33. div.addEventListener("touchend", function(e){
  34. //判断是否只有一根手指在操作
  35. if(e.targetTouches.length > 1){//多个
  36. return;
  37. }
  38. //判断时间差异 150ms
  39. if(Date.now() - startTime> 150){
  40. return;
  41. }
  42. //判断松开手指时的坐标与触摸开始时的坐标的距离差异
  43. var endX = e.changedTouches[0].clientX;
  44. var endY = e.changedTouches[0].clientY;
  45. if(Math.abs(endX - startX) < 6 && Math.abs(endY - startY) < 6){
  46. console.log("tap事件")
  47. }
  48. });
  49. </script>
  50. </body>
  51. </html>

**封装tap事件

  1. //封装移动端的tap事件
  2. var itcast = {
  3. tap: function(domEle, callback){
  4. //判断传如对象是否是dom元素
  5. if(!domEle || typeof domEle != "object"){
  6. return;
  7. }
  8. var startTime, startX, startY;
  9. domEle.addEventListener("touchstart", function(e){
  10. //判断是否只有一根手指
  11. if(e.targetTouches.length > 1){
  12. return;
  13. }
  14. //记录当前手指开始触摸的时间
  15. startTime = Date.now();
  16. //当前坐标
  17. startX = e.targetTouches[0].clientX;
  18. startY = e.targetTouches[0].clientY;
  19. });
  20. domEle.addEventListener("touchend", function(e){
  21. //判断是否只有一根手指在操作
  22. if(e.targetTouches.length > 1){//多个
  23. return;
  24. }
  25. //判断时间差异 150ms
  26. if(Date.now() - startTime> 150){
  27. return;
  28. }
  29. //判断松开手指时的坐标与触摸开始时的坐标的距离差异
  30. var endX = e.changedTouches[0].clientX;
  31. var endY = e.changedTouches[0].clientY;
  32. if(Math.abs(endX - startX) < 6 && Math.abs(endY - startY) < 6){
  33. console.log("tap事件");
  34. //判断是否传入回调函数
  35. callback && callback();
  36. }
  37. });
  38. }
  39. }

发表评论

表情:
评论列表 (有 0 条评论,564人围观)

还没有评论,来说两句吧...

相关阅读

    相关 移动keyup事件

    最近在做一个项目需求,需要实现一个类似谷歌搜索的功能,可以模糊匹配到中文和字母。当时想到了keyup事件,每当键盘按下时监控input框值的变化,在电脑和安桌手机上测试都没有问