当前位置: 首页 > Web前端 > HTML5

触摸事件兼容性处理

时间:2023-04-05 13:48:26 HTML5

使用图表插件时,默认图表区域可以正常左右滑动,但在测试过程中发现在部分安卓机型上滑动不是特别流畅。经过一系列的排查,发现是默认的scroll事件受到了影响,于是在touch事件中屏蔽了浏览器的默认事件:e.preventDefault();但是新的问题又出现了。屏蔽默认事件后,无法在图表区上下滑动滚动页面。对于小屏用户体验很差,可能图表区占了屏幕的3/2,根本无法滚动页面。所以我找到了一个新的方法,先上传最后的代码来解决这个bug:$('#selector').bind('touchstart',function(e){varpoint=e.touches?e.touches[0]:e;$('#selector').attr('pointX',point.pageX);$('#selector').attr('pointY',point.pageY);});$('#selector').bind('touchmove',function(e){varpoint=e.touches?e.touches[0]:e;vardeltaX=point.pageX-$('#selector').attr('pointX');vardeltaY=point.pageY-$('#selector').attr('pointY');if(deltaY&&Math.abs(deltaY/deltaX)>1.5){return;}else{event.preventDefault();}});代码原理是点击时通过pageX和pageY属性获取被点击位置的x和y轴坐标,滑动时再次获取x和y轴坐标,将deltaY/deltaX获取的值与limitvalue1.5进行对比,如图:当起点为(0,0),滑动角度在蓝色阴影区域时,默认为上下滑动。此时不做任何处理,触发默认的浏览器事件。当滑动角度为其他区域时,默认为左右滑动。这时候浏览器的default事件必须要阻止。这将使用户体验更好。当然1.5的比例也可以自己调整。我将在这里使用tan3/2角度作为限制。