jquery 和 hammer.js 平移时重击
jquery and hammer.js ghost click when panning
我正在使用 jQuery 191 和 Hammer JS 204。我有以下示例场景
<div> class="myDiv">
<div class="content">
<img>
</div>
</div>
示例 JS
$('.myDiv').hammer({}).bind("pan", function(h) {
h.gesture.srcEvent.preventDefault();
});
$('.content img').on('click', function(){
console.log('i was clicked');
});
当我单击图像开始平移 myDiv 时,在 panend 之后,myDiv img click 事件被触发。
我尝试了 stopPropagation 和 stopImmediatePropagation,但在我完成平移后仍然无法让它停止触发点击。
var hammering = false;
$('.myDiv').hammer({}).bind("pan", function(h) {
h.gesture.srcEvent.preventDefault();
}).bind("panstart", function(h) {
hammering = true;
}).bind("panend", function(h) {
setTimeout(function(){
hammering = false;
}, 300);
});
$('.content img').on('click', function(){
if(hammering) return false;
console.log('i was clicked');
});
另一种避免重击的方法是在锤子目标上创建伪class。
例如,您可以添加 class 和类似
的样式
`.block:after {
content: " ";
background: transparent;
top: 0;
left: 0;
width: 250px;
height: 100%;
z-index: 2;
display: block;
position: absolute;
}`
panstart 时 panend 时移除。
希望这个技巧对其他人有所帮助。
我发现一种简单的方法可以在 hammer.js 平移时阻止点击事件:
在平移开始时禁用 div 指针事件,然后在平移结束时启用它。
...
myPanGesture.on("panstart", function(ev) {
$(".tab-pane.active").css({'pointer-events':'none'});
});
...
myPanGesture.on("panend", function(ev) {
$(".tab-pane.active").css({'pointer-events':'auto'});
});
...
我正在使用 jQuery 191 和 Hammer JS 204。我有以下示例场景
<div> class="myDiv">
<div class="content">
<img>
</div>
</div>
示例 JS
$('.myDiv').hammer({}).bind("pan", function(h) {
h.gesture.srcEvent.preventDefault();
});
$('.content img').on('click', function(){
console.log('i was clicked');
});
当我单击图像开始平移 myDiv 时,在 panend 之后,myDiv img click 事件被触发。
我尝试了 stopPropagation 和 stopImmediatePropagation,但在我完成平移后仍然无法让它停止触发点击。
var hammering = false;
$('.myDiv').hammer({}).bind("pan", function(h) {
h.gesture.srcEvent.preventDefault();
}).bind("panstart", function(h) {
hammering = true;
}).bind("panend", function(h) {
setTimeout(function(){
hammering = false;
}, 300);
});
$('.content img').on('click', function(){
if(hammering) return false;
console.log('i was clicked');
});
另一种避免重击的方法是在锤子目标上创建伪class。
例如,您可以添加 class 和类似
的样式`.block:after {
content: " ";
background: transparent;
top: 0;
left: 0;
width: 250px;
height: 100%;
z-index: 2;
display: block;
position: absolute;
}`
panstart 时 panend 时移除。
希望这个技巧对其他人有所帮助。
我发现一种简单的方法可以在 hammer.js 平移时阻止点击事件:
在平移开始时禁用 div 指针事件,然后在平移结束时启用它。
...
myPanGesture.on("panstart", function(ev) {
$(".tab-pane.active").css({'pointer-events':'none'});
});
...
myPanGesture.on("panend", function(ev) {
$(".tab-pane.active").css({'pointer-events':'auto'});
});
...