hammer.js在改变挤压方向时表现出挤压滞后(在Android上测试)
我注意到,在使用缩放事件时,如果您在不将手指从屏幕上移开的情况下从“收缩”切换到“收缩”(反之亦然),则“收缩缩放”事件会出现明显的延迟 我只在安卓系统上测试过,因为我只有安卓手机和平板电脑 通常情况下,即使用户已反转操作,变焦仍会在转弯和再次熄灭之前继续进行。当使用这种方法放大照片之类的东西时,这是显而易见的 我在演示中使用的jQuery代码非常简单:hammer.js在改变挤压方向时表现出挤压滞后(在Android上测试),android,jquery,hammer.js,Android,Jquery,Hammer.js,我注意到,在使用缩放事件时,如果您在不将手指从屏幕上移开的情况下从“收缩”切换到“收缩”(反之亦然),则“收缩缩放”事件会出现明显的延迟 我只在安卓系统上测试过,因为我只有安卓手机和平板电脑 通常情况下,即使用户已反转操作,变焦仍会在转弯和再次熄灭之前继续进行。当使用这种方法放大照片之类的东西时,这是显而易见的 我在演示中使用的jQuery代码非常简单: var myElement = document.getElementById('zoom_div'); var hammertime = n
var myElement = document.getElementById('zoom_div');
var hammertime = new Hammer(myElement);
hammertime.get('pinch').set({ enable: true });
hammertime.on("pinchin", onpinchin).on("pinchout", onpinchout);
function onpinchin(e) {
document.getElementById("zoom_div").innerHTML = "IN";
}
function onpinchout(e) {
document.getElementById("zoom_div").innerHTML = "OUT";
}
请参见以下示例:
在不将手指从屏幕上移开的情况下进行捏入和捏出,您将看到对相反方向的反应通常会明显滞后。我的问题的解决方案是删除Hammer.js以进行捏入事件处理,而是实现我自己的捏入处理程序。我继续在其他触摸活动中使用锤子
//Non - hammer detection
$('#zoom_div_manual').on('touchstart', function(e){
trigger_start = true;
});
$('#zoom_div_manual').on('touchmove', function(e){
pinchMove(e);
});
$('#zoom_div_manual').on('touchend', function(e){
if(scaling) {
trigger_start = false;
}
});
var last_pinch = 0;
function pinchMove(e) {
e.preventDefault();
var dist =Math.sqrt((e.originalEvent.touches[0].pageX-e.originalEvent.touches[1].pageX) * (e.originalEvent.touches[0].pageX-e.originalEvent.touches[1].pageX)+(e.originalEvent.touches[0].pageY-e.originalEvent.touches[1].pageY) * (e.originalEvent.touches[0].pageY-e.originalEvent.touches[1].pageY));
if(dist => last_pinch)document.getElementById("zoom_div_manual").innerHTML = "IN";
if(dist < last_pinch)document.getElementById("zoom_div_manual").innerHTML = "OUT";
last_pinch = dist;
}
//非锤式检测
$('zoom_div_manual')。打开('touchstart',函数(e){
触发器\启动=真;
});
$('zoom#u div_manual')。打开('touchmove',函数(e){
pinchMove(e);
});
$('zoom#u div_manual')。打开('touchend',函数(e){
如果(缩放){
触发器启动=错误;
}
});
var last_pinch=0;
函数pinchMove(e){
e、 预防默认值();
var dist=Math.sqrt((e.originalEvent.touchs[0].pageX-e.originalEvent.touchs[1].pageX)*(e.originalEvent.touchs[0].pageX-e.originalEvent.touchs[1].pageX)+(e.originalEvent.touchs[0].pageY)*(e.originalEvent.touchs[0].pageY-e.originalEvent.touchs[1].pageY));
if(dist=>last\u pinch)document.getElementById(“zoom\u div\u manual”).innerHTML=“IN”;
if(dist
下面的JSFIDLE中的绿色框演示了以下内容。我已经包括了锤子版本,以便在上面进行比较。您将看到与Hammer版本相比没有滞后:
我还没有在iOS上测试过 所以我也面临同样的问题。我搜索了很多,找到了一个解决方案,至少对我的问题是这样。 基于munrocket:中的代码。 您需要保存将要调整的比例。 我希望这有帮助
//adjustScale = 1;
//scale = 1
hammertime.on('pinchmove',function(e){
scale = adjustScale * ev.scale;
//do another things you want to
}
hammertime.on('pinchend',function(e){
adjustScale = scale;
}