是否可以使用jQuery在iPad的Safari浏览器上识别触摸事件?
我在Web应用程序中使用了mouseOver和mouseOut事件。由于没有像mouseOut和mouseMove这样的事件,iPad的Safari浏览器上是否有类似的事件?
是否可以使用jQuery在iPad的Safari浏览器上识别触摸事件?
我在Web应用程序中使用了mouseOver和mouseOut事件。由于没有像mouseOut和mouseMove这样的事件,iPad的Safari浏览器上是否有类似的事件?
核心jQuery没有为触摸事件提供任何特殊功能,但您可以使用以下事件轻松构建自己的触摸事件:
例如,touchmove
事件
document.addEventListener('touchmove', function(e) {
e.preventDefault();
var touch = e.touches[0];
alert(touch.pageX + " - " + touch.pageY);
}, false);
这在大多数基于WebKit的浏览器中有效(包括Android)。
$('#whatever').on({ 'touchstart' : function(){ /* do something... */ } });
$('#whatever').on('touchstart click', function(){ /* 做某事... */ });
- goodeye$('#whatever').on({ 'touchstart' : function(ev){}});
后,ev
看起来并没有关于触摸信息(touches、targetTouches 或 changedTouches)的任何信息。 - Octopusev.originalEvent
下找到详细的信息。 - Peter Bloomfield仅使用touchstart或touchend并不是一个好的解决方案,因为如果您滚动页面,设备也会将其检测为触摸或点击事件。 因此,同时检测轻触和点击事件的最佳方法是仅检测未移动屏幕(滚动)的触摸事件。 要做到这一点,只需将此代码添加到您的应用程序中:
$(document).on('touchstart', function() {
detectTap = true; // Detects all touch events
});
$(document).on('touchmove', function() {
detectTap = false; // Excludes the scroll events from touch events
});
$(document).on('click touchend', function(event) {
if (event.type == "click") detectTap = true; // Detects click events
if (detectTap){
// Here you can write the function or codes you want to execute on tap
}
});
我测试过它,在我的iPad和iPhone上可以正常运行。它可以检测到轻触,并且可以轻松区分轻触和滑动触摸。最简单的方法是使用类似 Hammer.js 的多点触控JavaScript库。然后你可以编写如下代码:
canvas
.hammer({prevent_default: true})
.bind('doubletap', function(e) { // And double click
// Zoom-in
})
.bind('dragstart', function(e) { // And mousedown
// Get ready to drag
})
.bind('drag', function(e) { // And mousemove when mousedown
// Pan the image
})
.bind('dragend', function(e) { // And mouseup
// Finish the drag
});
你可以继续使用它。 它支持轻按、双击、滑动、长按、变换(即捏)和拖动。当发生相应的鼠标操作时,触摸事件也会触发,因此您不需要编写两组事件处理程序。哦,而且如果您想以我所做的jQueryish方式编写代码,您需要使用jQuery插件。
你可以使用.on()来捕获多个事件,然后在屏幕上测试触摸,例如:
$('#selector')
.on('touchstart mousedown', function(e){
e.preventDefault();
var touch = e.touches[0];
if(touch){
// Do some stuff
}
else {
// Do some other stuff
}
});
.bind
已被弃用外,你应该使用.on
。 - jcuenodjQuery核心没有什么特别之处,但您可以在jQuery Mobile事件页面上阅读有关不同触摸事件的信息。这些事件也适用于除iOS设备以外的其他设备。
它们包括:
值得注意的是,iOS设备在滚动事件(基于移动设备的触摸)期间会冻结DOM操作。
我有点担心只使用touchmove来完成我的项目,因为它似乎只在您的触摸从一个位置移动到另一个位置时(而不是在初始触摸时)触发。所以我将其与touchstart结合使用,这对于初始触摸和任何移动都非常有效。
<script>
function doTouch(e) {
e.preventDefault();
var touch = e.touches[0];
document.getElementById("xtext").innerHTML = touch.pageX;
document.getElementById("ytext").innerHTML = touch.pageY;
}
document.addEventListener('touchstart', function(e) {doTouch(e);}, false);
document.addEventListener('touchmove', function(e) {doTouch(e);}, false);
</script>
X: <div id="xtext">0</div>
Y: <div id="ytext">0</div>
document.getElementById("ttime").innerHTML = ((new Date()) - touchTime); touchTime = new Date();
- hanamj我刚刚测试了benmajor的GitHub jQuery触摸事件插件,适用于jQuery 1.4和1.7+版本。它很轻量级,可以完美地配合on
和bind
使用,并提供支持一系列触摸事件的全面功能。