有没有办法将此Javascript功能用作触摸屏设备的触摸事件?
var down = false;
var scrollLeft = 0;
var x = 0;
var timeline = document.getElementById('timeline');
timeline.addEventListener('mousedown', function(e) {
down = true;
scrollLeft = this.scrollLeft;
x = e.clientX;
});
timeline.addEventListener('mouseup', function() {
down = false;
});
timeline.addEventListener('mousemove', function(e) {
e.preventDefault();
if(down) {
this.scrollLeft = scrollLeft + x - e.clientX;
}
});
timeline.addEventListener('mouseleave', function() {
down = false;
});
以下是其中的一个小提琴:http://jsfiddle.net/AdMFu/4/
答案 0 :(得分:3)
对于IE移动版,您使用Microsoft pointer system。您只需将mousedown
更改为MSPointerDown
(注意大写!)。其他事件也是如此。注意多点触摸... Microsoft使用pointerID,以便您可以识别每个指针/鼠标/手指。这是如何工作的,在触摸事件中,eventListener始终返回event.pointerId
。因此,如果您放下两根手指,MSPointerDown
事件会被触发两次,并带有唯一ID。如果移动手指1,它将返回与MSPointerDown
事件相同的ID,因此您可以跟踪每个点。
当然你不想要错误,所以有一种简单的方法可以检查是否支持MSPointer事件:window.navigator.msPointerEnabled
。
修改强>
我想补充一点,就是没有e.preventDefault()
。而是使用此css声明:-ms-touch-action:none;
。这会将所有触摸输入路由到您的处理程序,而不是在页面上缩放/导航。
答案 1 :(得分:2)
您想使用以下内容:
- touchstart
•动作:触摸屏幕时会触发(也会触发多点触摸)
•等效:mousedown
- touchend
•动作:手指从屏幕上抬起时会触发
•等效:mouseup
- touchmove
•动作:当一个或多个手指在屏幕上移动时触发
•等效:mousemove
- touchcancel
•操作:系统取消触摸事件时
•等效:mouseleave
答案 2 :(得分:2)
答案 3 :(得分:1)