使用jquery實現簡單的拖動效果,分享源碼

來源:互聯網
上載者:User

標籤:

因為想實現相框的拖到,找了半天的原因愣是沒有找到錯誤,所以,只能翻看源碼了

如何?拖動效果?

瀏覽DEMO

首先分析下拖動效果原理:

1.當滑鼠在被拖動對象上按下滑鼠(觸發onmousedown事件,且滑鼠在對象上方)

2.開始移動滑鼠(觸發onmousemove事件)

3.移動時更顯對象的top和left值

4.滑鼠放開停止拖動(觸發onmouseup事件)

注意:拖動的對象必須是定位對象(即設定了position:absolute或 relative)。

也就是說拖動事件=onmousedown事件+onmousemove事件

整個過程就是處理這三個事件來類比drag事件

現在看看我實現的原始碼:

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如果沒有設定任何值,則預設為移動對象本身,否則為所設定的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    //當按下滑鼠,設定標記變數isMouseDown為true    .mousedown(function(event){    //判斷最後觸發事件的對象是否是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);

調用方法:

  $(function(){  //拖動標題  $(".drag").drag({handler:$(‘.title‘),//操作拖動的對象,此對象必須是移動對象的子項目opacity:0.7 //設定拖動時透明度});  //拖動主體對象  $(".drag1").drag({ opacity:0.7 });  });

表明:參考http://www.muzilei.com/文章,太贊了!

使用jquery實現簡單的拖動效果,分享源碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.