JS面向?qū)ο髮崿F(xiàn)簡單拖拽心得

一、思路

1 、先用面向?qū)ο蟮姆椒ò淹献У墓δ軐崿F(xiàn)

(1)
           先要我們所需要拖拽的物體 DragBox(boxId)
(2)
          然后在得到我們物體的節(jié)點屬性this.ele = document.getElementById(boxId);
(3)將我們物體的三種方法start、move、stop用對象形式表達出來,為了不占用多的空間我們使用DragBox.prototype.
  (4)因為物體一開始創(chuàng)建就具有拖拽的能力,所以,我們一開始就設(shè)置按下的函數(shù)this.ele.onmousedown

以下是我們的拖拽代碼:

function Dray(boxId){
    if (boxId == undefined)
    {
        return
    }
    this.elem = document.getElementById(boxId);
    var self = this
    this.elem.onmousedown = function (e){
        e.preventDefault();
        self.dateX = e.clientX - self.elem.offsetLeft;
        self.dateY = e.clientY - self.elem.offsetTop;
        self.start();
        document.onmouseup = function (){
            self.stop();
        }
    }
}
Dray.prototype.start = function (){
    var self = this;
    document.onmousemove = function (e){
        var x = e.clientX - self.dateX;
        var y = e.clientY - self.dateY;
        self.move(x, y)
    }
}
Dray.prototype.move = function (x , y){
    var self = this
    self.elem.style.left = x + "px"
    self.elem.style.top = y + "px"
}
Dray.prototype.stop = function (){
    document.onmousemove = null
}

2 、 我們需要重新創(chuàng)建一個html然后將我們的之前下的拖拽代碼鏈接進來;再在body里面設(shè)置你所需要拖拽的物體。<script src="DragBox.js"></script>

<style>
        div {
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
        }

        #box2 {
            background: green;
        }

        #box3 {
            background: blue;
        }
    </style>
  
    <div id="box1"></div>
    <div id="box2"></div>
    <div id="box3"></div>
3、 我們可以用面向?qū)ο笾械睦^承來實現(xiàn)拖拽
(1)繼承之前拖拽功能的屬性
        function DragBoxTaxt(boxId){
        DragBox.call(this,boxId);  
    }

 (2)  繼承之前拖拽功能的方法
     DragBoxText.prototype = new DragBox();

(3)還可以修改之前拖拽功能的方法

     DragBoxText.prototype.move = function(x, y) {
        // this.ele.style.left = x + "px";
        // this.ele.style.top = y + "px";
        DragBox.prototype.move.call(this, x, y)

        this.ele.innerHTML = x + ", " + y;
    }

(4)創(chuàng)建對象讓他們具有拖拽的功能;
new DragBoxText("box1");
new DragBoxText("box2");
new DragBoxText("box3");

二 、 難點

(1)修改move方法是用到的DragBox.prototype.move.call(this, x, y)
這是是我們有搞懂滴!
(2) 在封裝的之前拖拽的代碼中if (boxId == undefined){return}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ECMAScript有兩種開發(fā)模式:1.函數(shù)式(過程化),2.面向?qū)ο?OOP)。面向?qū)ο蟮恼Z言有一個標志,那就是...
    dxxwdong閱讀 723評論 0 2
  • 在昨天通過“拖拽”了解了this在不同情況下的指向,今天在此基礎(chǔ)上我們來對對象的繼承與對象的冒充來進行了解。在昨天...
    風之傷_3eed閱讀 268評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 六月十三號 星期二 天氣晴 下午放學(xué)接到女兒就聽她說今晚要趕緊寫完作業(yè)七點出去玩。我說好?;貋硭踔鴮懽?..
    楚亦菲媽媽閱讀 140評論 0 0
  • 咫尺最近的距離中 閉著眼睛在尋找 以為緣分上天早已注定 信仰里最美的花是那 曼珠沙華 此生此世,開在亡者之路 卻不...
    浮生幻塵閱讀 219評論 0 2

友情鏈接更多精彩內(nèi)容