【发布时间】:2015-02-11 15:51:32
【问题描述】:
我在 jquery 中有一个可拖动的函数来实现它,这样我就可以在 div 上拖动和移动元素。有时,当拖动鼠标离开 div 时,我无法放回元素。
我正在尝试为退出按钮或其他东西添加keydown 事件,以便在按下时,.on("mouseup", function(event) { 上会发生同样的事情
我试过.on("mouseup keydown", function(event) {,但它没有捕捉到任何被按下的键。
有人对我如何取消拖动有任何想法吗?通过keydown 甚至mouseup,无论鼠标是否在被拖动的 div 上?
需要明确的是,我遇到的问题是有时我会拖动元素,我会 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?除非被拖动的元素有focus,否则它不会接收到按键事件。 -
标签: javascript jquery html