jquery實現(xiàn)拖動效果
因為想實現(xiàn)相框的拖到,找了半天的原因愣是沒有找到錯誤,所以,只能翻看源碼了
如何實現(xiàn)拖動效果?



首先分析下拖動效果原理:
1.當鼠標在被拖動對象上按下鼠標(觸發(fā)onmousedown事件,且鼠標在對象上方)
2.開始移動鼠標(觸發(fā)onmousemove事件)
3.移動時更顯對象的top和left值
4.鼠標放開停止拖動(觸發(fā)onmouseup事件)
注意:拖動的對象必須是定位對象(即設(shè)置了position:absolute或 relative)。
也就是說拖動事件=onmousedown事件+onmousemove事件
整個過程就是處理這三個事件來模擬drag事件
現(xiàn)在看看我實現(xiàn)的源代碼:
html代碼:
<div class="drag"> <p class="title">標題(點擊標題拖動)</p> </div> <div class="drag1"> <p class="title">標題</p> 點擊我移動 </div>
jquery插件代碼:
(function($){
$.fn.drag=function(options){
//默認配置
var defaults = {
handler:false,
opacity:0.5
};
// 覆蓋默認配置
var opts = $.extend(defaults, options);
this.each(function(){
//初始標記變量
var isMove=false,
//handler如果沒有設(shè)置任何值,則默認為移動對象本身,否則為所設(shè)置的handler值
handler=opts.handler?$(this).find(opts.handler):$(this),
_this=$(this), //移動的對象
dx,dy;
$(document)
//移動鼠標,改變對象位置
.mousemove(function(event){
// console.log(isMove);
if(isMove){
//獲得鼠標移動后位置
var eX=event.pageX,eY=event.pageY;
//更新對象坐標
_this.css({'left':eX-dx,'top':eY-dy});
}
})
//當放開鼠標,停止拖動
.mouseup(function(){
isMove=false;
_this.fadeTo('fast', 1);
//console.log(isMove);
});
handler
//當按下鼠標,設(shè)置標記變量isMouseDown為true
.mousedown(function(event){
//判斷最后觸發(fā)事件的對象是否是handler
if($(event.target).is(handler)){
isMove=true;
$(this).css('cursor','move');
//console.log(isMove);
_this.fadeTo('fast', opts.opacity);
//鼠標相對于移動對象的坐標
dx=event.pageX-parseInt(_this.css("left"));
dy=event.pageY-parseInt(_this.css("top"));
}
});
});
};
})(jQuery);
調(diào)用方法:
$(function(){
//拖動標題
$(".drag").drag({
handler:$('.title'),//操作拖動的對象,此對象必須是移動對象的子元素
opacity:0.7 //設(shè)置拖動時透明度
});
//拖動主體對象
$(".drag1").drag({
opacity:0.7
});
});
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Jquery實現(xiàn)點擊文字后變成文本框且可修改
使用Jquery實現(xiàn)點擊文字變?yōu)槲谋究蛐Ч?,可對文本框文字進行修改,具體的實現(xiàn)思路如下,感興趣的朋友可以參考下,希望對大家有所幫助2013-09-09
以jQuery中$.Deferred對象為例講解promise對象是如何處理異步問題
Promises是一種令代碼異步行為更加優(yōu)雅的抽象,它很有可能是JavaScript的下一個編程范式,一個Promise即表示任務(wù)結(jié)果,無論該任務(wù)是否完成。本文以jQuery中$.Deferred對象為例講解promise對象是如何處理異步問題,需要的朋友參考下2015-11-11

