jsfiddle link.
Я хочу, чтобы событие mousedown
срабатывало на #flyingDiv
Я могу переместить его вокруг #holder
, когда mouseup
и мышь уходят от #holer
Я не могу его переместить. В моем коде иногда #flyingDiv
, расположенный вблизи черной границы, когда я перемещаю мышь в центре #holder
.
HTML:Flying div в другой div
<div id="holder" style="position: relative; margin: 20px auto; border: 1px solid black; width: 400px !important; height: 400px !important;">
<div id="flyingDiv" style="position: absolute; background-color: green; width: 10px !important; height: 10px !important; left: 195px; top: 195px;"></div>
</div>
Javascript:
$(function(){
var fd = $("#flyingDiv");
$("#flyingDiv").bind("mousedown", function(event) {
$(this).attr("pressed", true);
});
$("#holder").bind("mouseup", function(event) {
$("#flyingDiv").removeAttr("pressed");
});
$("#holder").bind("mousemove", function(event) {
var div = $("#flyingDiv");
if (div.attr("pressed")) {
var width = div.width();
if (event.offsetX >= width/2 && ($(this).width() - event.offsetX) >= width/2) {
div.css("left", parseInt(event.offsetX - width/2) + "px");
}
var height = div.height();
if (event.offsetY >= height/2 && ($(this).height() - event.offsetY) >= width/2) {
div.css("top", parseInt(event.offsetY - height/2) + "px");
}
}
});
});
UPD
Я обнаружил, что если event.eventPhase == 3
это старое событие. Link
Но все же код работает не быстро.
Это хорошо 'функция JQuery UI', но я не буду писать на Javascript и понимать, почему мой вариант не работает. И я использую 'jQuery' просто для легкого добавления атрибутов и свойств css и для простого понимания сообщества, легко заменить мой код чистым кодом Javascript. Но я поддерживаю ваш ответ и сначала пытаюсь использовать 'jQuery UI', спасибо. – ostapische
Это хорошая идея! Вы можете начать с просмотра перетаскиваемого источника jQuery и посмотреть, что сделано по-другому. Помните, что запрос и запись DOM всегда являются медленными действиями. – algoni