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