我在jquery中有一個可拖動的功能,因此我可以拖動和移動div上的元素。有時,當拖動鼠標離開div時,我無法放下元素。當鼠標滑過div時取消自定義拖動功能
我想,這樣按壓時,同樣的事情發生在.on("mouseup", function(event) {
我試着做.on("mouseup keydown", function(event) {
添加事件的逃生按鈕或東西,但它並沒有趕上任何鍵被按下。
有沒有人有關於如何取消拖動的任何想法?不管鼠標是在div上還是在沒有被拖動的情況下,通過甚至在mouseup
上?
只是要清楚,我遇到的問題有時會拖動元素,我會mouseup
,但當調用mouseup
時,鼠標不在元素上。因此,該元素仍在拖動,我不再有手指在鼠標上,並且我無法阻止元素拖動以重新獲取文檔。
編輯:這是一個jsfiddle,注意我試圖讓它在縮放的容器上工作。 youtube video showing drag glitch
(function($) {
$.fn.drags = function(opt, callback) {
opt = $.extend({
handle: "",
cursor: "move"
}, opt);
if (opt.handle === "") {
var $el = this;
} else {
var $el = this.find(opt.handle);
}
return $el.css('cursor', opt.cursor).on("mousedown", function(e) {
if (opt.handle === "") {
var $drag = $(this).addClass('draggable');
} else {
var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
}
var z_idx = $drag.css('z-index'),
drg_h = $drag.outerHeight(),
drg_w = $drag.outerWidth(),
pos_y = $drag.offset().top + drg_h - e.pageY,
pos_x = $drag.offset().left + drg_w - e.pageX;
$drag.css('z-index', 1000).parents().on("mousemove", function(e) {
$('.draggable').offset({
top: e.pageY + pos_y - drg_h,
left: e.pageX + pos_x - drg_w
}).on("mouseup", function() {
$(this).removeClass('draggable').css('z-index', z_idx);
});
});
e.preventDefault();
}).on("mouseup", function(event) {
if (opt.handle === "") {
$(this).removeClass('draggable');
} else {
$(this).removeClass('active-handle').parent().removeClass('draggable');
}
if (typeof callback == 'function') {
alert("this is a callback");
}
});
}
})(jQuery);
您是否嘗試將'keydown'事件偵聽器添加到'window'?除非被拖動的元素具有「焦點」,否則它將不會收到關鍵事件。 – 2015-02-19 03:32:17
@ AlexanderO'Mara我在我的函數中有一個回調函數,所以在'window'中添加一個'keydown'會導致回調在它沒有準備好的時候發生 – bryan 2015-02-19 19:59:42