首页 > 语言 > JavaScript > 正文

js实现滑动触屏事件监听的方法

2024-05-06 16:19:24
字体:
来源:转载
供稿:网友

这篇文章主要介绍了js实现滑动触屏事件监听的方法,适用于手机端触屏滑动事件的监听技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了js实现滑动触屏事件监听的方法。分享给大家供大家参考。具体实现方法如下:

 

 
  1. function span_move_fun(){ 
  2. var span = document.getElementById("move_k"); 
  3. var span_left = $(span).offset().left; 
  4. var span_top = $(span).offset().top; 
  5. var start_left = $(span).offset().left; 
  6. var start_top = $(span).offset().top; 
  7. span.addEventListener('touchstart'function(event) { 
  8. event.preventDefault(); 
  9. if (event.targetTouches.length == 1) { 
  10. var touch = event.targetTouches[0]; 
  11. span.style.position = "absolute"
  12. span_top = $(this).offset().top; 
  13. span_left = $(this).offset().left; 
  14. start_top = touch.pageY 
  15. start_left = touch.pageX 
  16. var left = parseFloat(touch.pageX - start_left + span_left-30); 
  17. var top = parseFloat(touch.pageY - start_top + span_top-73); 
  18. span.style.left = String(left) + 'px'
  19. span.style.top = String(top) + 'px'
  20. }); 
  21. span.addEventListener('touchmove'function(event) { 
  22. event.preventDefault(); 
  23. if (event.targetTouches.length == 1) { 
  24. var touch = event.targetTouches[0]; 
  25. span.style.position = "absolute"
  26. var left = parseFloat(touch.pageX - start_left + span_left-30); 
  27. var top = parseFloat(touch.pageY - start_top + span_top-73); 
  28. span.style.left = String(left) + 'px'
  29. span.style.top = String(top) + 'px'
  30. }); 
  31. span.addEventListener('touchend'function(event) { 
  32. var touch = event.changedTouches[0]; 
  33. if(parseFloat(touch.pageX - start_left + span_left-30) <= -5 || parseFloat(touch.pageX - start_left + span_left-30) >= 620 || parseFloat(touch.pageY - start_top + span_top-73) <= -38 || parseFloat(touch.pageY - start_top + span_top-73) >= 587){ 
  34. span.style.left = String(span_left-30) + 'px'
  35. span.style.top = String(span_top-73) + 'px'
  36. event.stopPropagation(); 
  37. }); 

js的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend。这三个事件最重要的属性是 pageX和 pageY,表示X,Y坐标。

touchstart在触摸开始时触发事件

touchend在触摸结束时触发事件

touchmove这个事件比较奇怪,按道理在触摸到过程中不断激发这个事件才对,但是在我的 Android 1.5 中,在 touchstart 激发后激发一次,然后剩余的都和 touchend 差不多同时激发。

这三个事件都都有一个 timeStamp 的属性,查看 timeStamp 属性,可以看到顺序是 touchstart -> touchmove ->touchmove -> … -> touchmove ->touchend。

下面是一段代码实例:

 

 
  1. document.getElementsByTagName_r('body')[0].addEventListener('touchstart',function(e){ 
  2. nStartY = e.targetTouches[0].pageY; 
  3. nStartX = e.targetTouches[0].pageX; 
  4. }); 
  5. document.getElementsByTagName_r('body')[0].addEventListener('touchend',function(e){ 
  6. nChangY = e.changedTouches[0].pageY; 
  7. nChangX = e.changedTouches[0].pageX; 
  8. }); 

PS:

1. touch事件跟click事件是不会被同时触发的。现在的移动设备做的比较好,已经把这个问题完美的避免掉了。

2. 注意触摸的开始和结束位置的位移大小。如果位移小过小应该不做任何动作。

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选