首頁  >  文章  >  web前端  >  js實作可拖曳DIV的方法_javascript技巧

js實作可拖曳DIV的方法_javascript技巧

WBOY
WBOY原創
2016-05-16 17:08:491239瀏覽

隨著時代的變化,越來越感覺到js的重要性,js不僅可以做web頁面(如Ext框架),還可以做一些web的特效,這些特效不僅兼容PC,而且兼容手機端,畢竟是基於瀏覽器的,跟平台沒關係。現在微軟的windows8 系統的App都可以用js開發了,大家有時間可以去試試看。

     現在切入正題,說一下js 實作可拖曳Div.實現這個功能我們先說一下想法:

     1.捕捉滑鼠div的mousedown事件

     2.捕捉 document的   mousemove事件

     3.取消事件

然後我們看一下程式碼:

複製程式碼 程式碼如下:

function Drag(id) {
            var $ = function (flag) {
                return document.getElementById(flag);
            }
            $(id).onmousedown = function (e) {
                var d = document;
                var page = {
                    event: function (evt) {
                        var ev = evt || window.event;
                        return ev;
                    },
                    pageX: function (evt) {
                        var e = this.event(evt);
                        return e.pageX || (e.clientX + document.body.scrollLeft - document.body.clientLeft);
                    },
                    pageY: function (evt) {
                        var e = this.event(evt);
                        return e.pageY || (e.clientY + document.body.scrollTop - document.body.clientTop);

                     },
                           var e = this.event(evt); e.offsetX;
                   },
                       var e = this.event(evt);
          | | e.offsetY;
                 }
                    var x = page.layerX(e);
             var y = page.layer Y(e);       
               if (dv.setCapture) {
              }
              else if (window.captureEvents) {               }
                >                 var tx = page.pageX(e) - x;
                                                  dv .style.left = tx "px ";
                   dv.style.top = ty "px";
               }
               d.onmouseup = function () {
                                                                         與C. if 🎜>                     dv.releaseCapture();
                 }
                  else if (window.releaseEvents) {
                                       d.onmousemove = null;
                
             }
        }

程式碼分析:

1.

取得div物件

複製程式碼 程式碼如下:

var $ = function (var $ ) {
                return document.getElementById(flag);
       
裡面有這麼一段程式碼:


複製程式碼 程式碼如下:
程式碼如下:

{
                    event: function (evt) {
       ;
                        return ev;
                   pageX: function (evt) {
                = this.event(evt);
                        return e.pageX || (e.clientX ument.body.scrollum. 含            },
                    pageY: function (evt) {
                        var e = this.event(evt);
  || (e.clientY document.body.scrollTop - document.body.clientTop);

                    },                             var e = this.event(evt);

                            },
                 : function (evt) {
                        var e =    return e.layerY || e.offsetY;
                    }
   event取得滑鼠事件,pageX,pageY取得滑鼠的座標,layerX,layerY取得滑鼠距離div邊框的距離。

還有一段程式碼:



複製程式碼

程式碼如下:


             if (dv.setCapture) {
                    dv.setCapture();
                }
                else if (window.captureEvents) {
                    window.captureEvents(Event.MOUSEMOVE | Event. MOUSEUP);
                }

這就是捕捉div的MouseMove和MouseUp事件,不懂得查到可以上網查到網路上。
3. document的MouseMove和mouseUp事件:
複製程式碼 程式碼如下:                          var ty = page.pageY(e) - y;
         px";
                    dv.style.top = ty "px";
             d.onmouseup = function () {
                           dv.releaseCapture() ;
                    }
                              window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
                  d.onmousemove = null;
                            onmouseup = null;
                }


其中的tx,ty就是最重要的程式碼了,是設定為設定的
其中的tx,ty就是最重要的程式碼。
有的人可能會問為什麼要-x,-y?

x,y其實就是取得滑鼠距離div邊框的距離,如果不減掉的話

滑鼠箭頭的座標和div的x,y座標一樣了,這樣拖曳之後,滑鼠的位置會偏到左上角,效果就是,拖曳之後會彈動一下。

複製程式碼

程式碼如下:


                if (dv.releaseCapture) {
                            }
                            window.releaseEvents(Event.MOUSEMOVE | Event. MOUSEUP);
                    }
                        d.onmouseup = null;


這段程式碼就是在滑鼠放開之後取消document的onmousemove,onmouseup事件。
最近都在學習js,後續有新的心得體會也會與大家分享,希望與大家共同學習,進步。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn