这是我用来在移动设备上绑定“点击”事件的功能。基本上是一个正常的功能。
bindTapEvent: function(container, selector, run, bindClickAlso){
var startX, startY, currentX, currentY = 0;
var moved = false;
var self;
if(touchDevice){
container.on({
click: function(e){
e.preventDefault();
},
touchstart: function(e){
e.preventDefault();
self = $(this);
startX = e.originalEvent.touches[0].pageX;
startY = e.originalEvent.touches[0].pageY;
},
touchmove: function(e){
currentX = e.originalEvent.touches[0].pageX;
currentY = e.originalEvent.touches[0].pageY;
if(Math.abs(startX - currentX) > 10 || Math.abs(startY - currentY) > 10){
moved = true;
}
},
touchend: function(e){
e.preventDefault();
run();
}
},
selector
)
} else {
if(bindClickAlso != false){
container.on('click', selector, function(){
run();
});
}
}
}
我这样使用它:
tt.bindTapEvent(container, '.showColumns', function(){
container.find('.column').addClass('visible');
$(this).doSomething();
});
唯一的问题是我不能(显然)在这样的事情中使用 $(this) 。我已经阅读了有关更改上下文的 jQuery $.proxy 的信息,但我无法理解它,因此我可以使用它。是否有可能(在我的情况下)将 tt.bindTapEvent 中使用的匿名函数的上下文更改为当我使用 $(this) 时它仅在 bindTapEvent 函数中“存储”和“使用”?