Это довольно простая функция, которую я сделал, чтобы сделать некоторые элементы перетаскиваемыми с помощью мыши.
$('.draggable').on('mousedown', function(e) {
var start = { top : parseInt($(this).css('top').replace(/px/,'')),
left: parseInt($(this).css('left').replace(/px/,'')) };
var mouse = { top : e.clientY, left: e.clientX };
$(this).addClass('dragged').on('mousemove',function(e) {
var end = {Y:start.top + e.clientY - mouse.top,
X:start.left + e.clientX - mouse.left }
$(this).css({top: end.Y+'px', left: end.X+'px'});
}).on('mouseup, mouseout, click',function() {
$(this).removeClass('dragged').off('mousemove');
});
return false;
});
Работает, проблема в том, что " animation " заикается и работает медленно. он не может справиться со скоростью мыши, и событие mouseup запускается неправильно (мне нужно снова щелкнуть элемент, чтобы освободить его).
Как это можно улучшить?
Я бы хотел, чтобы все было просто и глупо , поэтому я не собираюсь использовать какой-то раздутый скрипт, который я едва могу понять, и я не собираюсь использовать JQueryUI.
РЕДАКТИРОВАТЬ: благодаря rgthree, и с небольшой настройкой, это теперь работает!
$('.draggable').on('mousedown', function(e) {
var start = { top : parseInt($(this).css('top').replace(/px/,'')),
left: parseInt($(this).css('left').replace(/px/,'')) };
var mouse = { top : e.clientY,
left: e.clientX };
var element = this;
$(this).addClass('dragged');
$(window).on('mousemove',function(mme) {
var end = { Y: start.top + mme.clientY - mouse.top,
X: start.left + mme.clientX - mouse.left }
$(element).css({ top : end.Y+'px',
left: end.X+'px' });
});
}).on('mouseup',function() {
$(this).removeClass('dragged');
$(window).off('mousemove');
});