這是一個非常基本的功能,我用鼠標拖動一些元素。我簡單的拖放功能口吃
$('.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;
});
它的工作原理,問題是「動畫」口吃是緩慢的。它無法跟上鼠標速度,並且mouseup事件沒有正確觸發(我需要再次點擊元素才能釋放它)。
如何改進? 我想保持簡單&愚蠢,所以我不打算使用一些臃腫的腳本,我幾乎不能理解,我不打算使用JQueryUI。
編輯:感謝rgree,並有一點調整,現在可以工作!
$('.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');
});
這是你的電話老闆,但爲什麼不使用jQuery UI? – gdoron 2012-02-06 18:28:22
,因爲我不認爲我需要一個100K腳本來完成這個簡單的任務 – Valentino 2012-02-06 18:32:01