我正在使用HammerJS处理简单的拖放场景。当元素位于边界框的某个区域内时,我希望它能弹回;如果不在该区域内,则可以缩小并从屏幕上离开。我使用isFinal属性来确定何时调用回调函数,该函数处理反弹。问题是,除非元素在鼠标释放时仍在移动,否则它会被卡住,isFinal属性保持为false。因此,我需要找出如何在任何时候释放元素时触发isFinal属性。
以下是代码以供参考。
以下是代码以供参考。
var registerNodeDraggable = function(oArgs) {
if (!oArgs.id || !oArgs.el) { return; }
var x = parseInt(oArgs.el.style.left,10) || 0;
//var y = parseInt(oArgs.el.style.top,10) || 0;
window[oArgs.id + 'Hammer'] = {
hammer: new window.Hammer(oArgs.el),
x: x,
//y: y
};
var obj = window[oArgs.id + 'Hammer'];
if (obj.hammer) {
obj.hammer.on('panleft panright', function(e) {
console.log(e);
console.log(e.deltaTime);
console.log(e.type);
oArgs.el.style.left = obj.x + e.deltaX + 'px';
// oArgs.el.style.top = obj.y + e.deltaY + 'px';
if (e.isFinal && oArgs.callback) {
console.log('Is Final');
obj.x += e.deltaX;
//obj.y += e.deltaY;
oArgs.callback.call(this, e, obj);
}
});
}
};
registerNodeDraggable({
el: this.$ticker[0],
id: 'swipe',
callback: function(e, obj) {
console.log('I am being called');
//self.$ticker.velocity({opacity: 0});
var $container = $('.tickerContainer');
var offset = $container.offset();
var tickerOffset = self.$ticker.position();
var offsetRight = $container.width() - self.$ticker.width() - tickerOffset.left;
var offsetBottom = $container.height() - self.$ticker.height() - tickerOffset.top;
console.log(offsetRight + ' :Right');
console.log(tickerOffset.left + ' :Left');
if( offsetRight < -30 ){
console.log('Bull');
self.$ticker.velocity({translateX: 1000, opacity: 0},{duration: 250, complete: function(){
self.$ticker.velocity({ left:0, top: 0, translateX: 0 }, {complete: function() {
obj.x = 0;
//obj.y = 0;
self.pick(self._nextTicker.ticker, 'Bull'); console.log('Bull');
} });
} });
} else if(tickerOffset.left < -30){
console.log('Bear');
self.$ticker.velocity({translateX: -1000, opacity: 0},{duration: 250, complete: function(){
self.$ticker.velocity({ left:0, top: 0, translateX: 0 }, {complete: function() {
obj.x = 0;
//obj.y = 0;
self.pick(self._nextTicker.ticker, 'Bear'); console.log('Bear');
} });
} });
} else {
self.$ticker.velocity({
left: 0,
top: 0 },
{duration: 250,
complete: function(){
obj.x = 0;
//obj.y = 0;
}
});
}
}
});