jQuery使用drag效果實現自由拖拽div,jquerydrag拖拽div

來源:互聯網
上載者:User

jQuery使用drag效果實現自由拖拽div,jquerydrag拖拽div

偶然間看到了以前做的一個簡潔的div拖拽效果,修改了一下加點注釋,經測試完美通過firefox/chrome/ie6-11,現拿來分享一下。

先說一下實現原理及要點,最主要的有三步。第一步是mousedown事件,滑鼠mousedown的時候記錄此時的滑鼠X軸和Y軸以及拖拽框的left和top,並且給拖拽標記賦值true,代表拖拽動作就緒。第二步是mousemove事件,此時動態擷取滑鼠的X軸和Y軸,然後計算出來拖拽框新的left和top並賦值使其實現拖拽效果。第三步是mouseup事件,滑鼠彈起時給拖拽標記賦值false,拖拽動作完成。

html代碼如下:

<div class="divWrap" id="move1" style="width: 200px; height: 200px; background: Green; border: 1px solid red; position: absolute; top: 100px; left: 100px; cursor: move; -moz-user-select: none; -webkit-user-select: none;"></div><div class="divWrap" style="width: 200px; height: 200px; background: brown; border: 1px solid red; position: absolute; top: 300px; left: 100px;">  <h3 id="move2" style="height: 45px; line-height: 45px; font-size: 18px; background: red; margin: 0; cursor: move; -moz-user-select: none; -webkit-user-select: none;">Title--Move</h3></div>

js代碼如下:

(function($) {  $.fn.dragDiv = function(divWrap) {    return this.each(function() {      var $divMove = $(this);//滑鼠可拖拽地區      var $divWrap = divWrap ? $divMove.parents(divWrap) : $divMove;//整個移動地區      var mX = 0, mY = 0;//定義滑鼠X軸Y軸      var dX = 0, dY = 0;//定義div左、上位置      var isDown = false;//mousedown標記      if(document.attachEvent) {//ie的事件監聽,拖拽div時禁止選中內容,firefox與chrome已在css中設定過-moz-user-select: none; -webkit-user-select: none;        $divMove[0].attachEvent('onselectstart', function() {          return false;        });      }      $divMove.mousedown(function(event) {        var event = event || window.event;        mX = event.clientX;        mY = event.clientY;        dX = $divWrap.offset().left;        dY = $divWrap.offset().top;        isDown = true;//滑鼠拖拽啟動      });      $(document).mousemove(function(event) {        var event = event || window.event;        var x = event.clientX;//滑鼠滑動時的X軸        var y = event.clientY;//滑鼠滑動時的Y軸        if(isDown) {          $divWrap.css({"left": x - mX + dX, "top": y - mY + dY});//div動態位置賦值        }      });      $divMove.mouseup(function() {        isDown = false;//滑鼠拖拽結束      });    });  };})(jQuery);//$(document).ready(function() {  $("#move1").dragDiv();//拖拽整個div  $("#move2").dragDiv(".divWrap");//拖拽div頭部});

最後要說明一下,在開始拖拽動作之前,要禁止選中內容,否則影響拖拽效果。firefox和chrome可以通過css來設定:{-moz-user-select: none; -webkit-user-select: none;},ie本來也可以直接在html裡寫一個onselectstart="return false",但似乎chrome受了點影響,所以決定取消這個寫法,然後在js裡為ie瀏覽器寫一個onselectstart事件。

這個小外掛程式只是簡單實現拖拽效果,但相容性很好,裡面也用到了一些知識點和技巧。當然也可以藉助這個外掛程式或裡面的思想繼續擴充,寫一個比較完善的拖拽外掛程式(如:Draggable和Droppable)。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.