我为我的活动实现了hammer.js库。问题是同时触发多个事件。
我可以设置一些事件优先级。假设在进行转换时,忽略所有其他事件。当转换停止时,可以完成其他事件。
hammertime.on("transform", function(evt) {
//transform
}
hammertime.on("drag", function(ev) {
//drag
}
我已经尝试过这样的事:
当我们开始转换时禁止阻力
hammertime.on("transform", function(evt) {
//transform
hammertime.options.drag="false";
}
在变换完成后让它恢复原状
hammertime.on("transformend", function(evt) {
//transformend
hammertime.options.drag="true";
}
这种方法工作正常,除了某些时候拖动不会返回设置为true。我想要100%的工作溶剂。请帮忙...
一种廉价的方法是让你的事件处理程序合作:
var transforming = false;
hammertime.on("transformstart", function (ev) { transforming = true; ... });
hammertime.on("transformend", function (ev) { transforming = false; });
hammertime.on("drag", function (ev) { if (!transforming) { ... } });
如果锤子并不总是打电话给你 transformend
,然而不幸的是,你可以做的就是使用某种计时器,如果一段时间过去,它会结束你的变换。它并不完美,但它可以帮助您从Hammer中可能的错误中恢复:
var transformTimer = undefined,
transforming = false;
hammertime.on("transform", function (ev) {
transforming = true;
if (transformTimer !== undefined) clearTimeout(transformTimer);
transformTimer = setTimeout(function () {
transformTimer = undefined;
transforming = false;
}, 1000); // end the transform after 1s of idle time.
// your transform code goes here
});
hammertime.on("transformend", function () {
if (transformTimer !== undefined) {
clearTimeout(transformTimer);
transformTimer = undefined;
}
transforming = false;
});
hammertime.on("drag", function (ev) { if (!transforming) { ... } });
我刚刚设法解决了这个问题。
var transforming = false;
var transformTimer = null;
hammertime2.on('touch drag dragend transform', function(ev) {
manageMultitouch(ev);
});
hammertime2.on("transformstart", function(evt) {
transforming = true;
});
hammertime2.on("transformend", function(evt) {
setTimeout(function () {
transforming = false;
}, 1000);
});
function manageMultitouch(ev){
if (transforming && (ev.type == 'drag' || ev.type =='dragend') ) return;
switch(ev.type) {
case 'touch':
break;
case 'drag':
break;
case 'transform':
transforming = true;
break;
case 'dragend':
break;
}
}
这里的重要部分是,当你正在做'变换'总是设置 transforming = true;