摘要:因?yàn)閷ο笾怀霈F(xiàn)在事件中,所以我們要把對象保存變量,然后通過參數(shù)傳遞后面的函數(shù)和函數(shù)就沒什么要注意的地方了要注意的問題關(guān)于指針的問題,面向?qū)ο罄锩嫣貏e重要拓展閱讀關(guān)于對象的問題,對象只出現(xiàn)在事件里面,所以寫方法的時候要注意一下
首先來了解一下,面向?qū)ο缶毩?xí)的基本規(guī)則和問題:
先寫出普通的寫法,然后改成面向?qū)ο髮懛?xiàng)
普通方法變形
·盡量不要出現(xiàn)函數(shù)嵌套函數(shù)
·可以有全局變量
·把onload函數(shù)中不是賦值的語句放到多帶帶函數(shù)中
改成面向?qū)ο?br>
·全局變量就是屬性
·函數(shù)就是方法
·onload中創(chuàng)建對象
·改this指針問題
先把拖拽效果的布局完善好:
HTML結(jié)構(gòu):
csc樣式:
#box{position: absolute;width: 200px;height: 200px;background: red;}
第一步,首先把面向過程的拖拽回顧一下
window.onload = function (){ // 獲取元素和初始值 var oBox = document.getElementById("box"), disX = 0, disY = 0; // 容器鼠標(biāo)按下事件 oBox.onmousedown = function (e){ var e = e || window.event; disX = e.clientX - this.offsetLeft; disY = e.clientY - this.offsetTop; document.onmousemove = function (e){ var e = e || window.event; oBox.style.left = (e.clientX - disX) + "px"; oBox.style.top = (e.clientY - disY) + "px"; }; document.onmouseup = function (){ document.onmousemove = null; document.onmouseup = null; }; return false; }; };
第二步,把面向過程改寫為面向?qū)ο?/strong>
window.onload = function (){ var drag = new Drag("box"); drag.init(); }; // 構(gòu)造函數(shù)Drag function Drag(id){ this.obj = document.getElementById(id); this.disX = 0; this.disY = 0; } Drag.prototype.init = function (){ // this指針 var me = this; this.obj.onmousedown = function (e){ var e = e || event; me.mouseDown(e); // 阻止默認(rèn)事件 return false; }; }; Drag.prototype.mouseDown = function (e){ // this指針 var me = this; this.disX = e.clientX - this.obj.offsetLeft; this.disY = e.clientY - this.obj.offsetTop; document.onmousemove = function (e){ var e = e || window.event; me.mouseMove(e); }; document.onmouseup = function (){ me.mouseUp(); } }; Drag.prototype.mouseMove = function (e){ this.obj.style.left = (e.clientX - this.disX) + "px"; this.obj.style.top = (e.clientY - this.disY) + "px"; }; Drag.prototype.mouseUp = function (){ document.onmousemove = null; document.onmouseup = null; };
第三步,看看代碼有哪些不一樣
首頁使用了構(gòu)造函數(shù)來創(chuàng)建一個對象:
// 構(gòu)造函數(shù)Drag function Drag(id){ this.obj = document.getElementById(id); this.disX = 0; this.disY = 0; }
遵守前面的寫好的規(guī)則,把全局變量都變成屬性!
然后就是把函數(shù)都寫在原型上面:
Drag.prototype.init = function (){ }; Drag.prototype.mouseDown = function (){ }; Drag.prototype.mouseMove = function (){ }; Drag.prototype.mouseUp = function (){ };
先來看看init函數(shù):
Drag.prototype.init = function (){ // this指針 var me = this; this.obj.onmousedown = function (e){ var e = e || event; me.mouseDown(e); // 阻止默認(rèn)事件 return false; }; };
我們使用me變量來保存了this指針,為了后面的代碼不出現(xiàn)this指向的錯誤
接著是mouseDown函數(shù):
Drag.prototype.mouseDown = function (e){ // this指針 var me = this; this.disX = e.clientX - this.obj.offsetLeft; this.disY = e.clientY - this.obj.offsetTop; document.onmousemove = function (e){ var e = e || window.event; me.mouseMove(e); }; document.onmouseup = function (){ me.mouseUp(); } };
改寫成面向?qū)ο蟮臅r候要注意一下event對象。因?yàn)?b>event對象只出現(xiàn)在事件中,所以我們要把event對象保存變量,然后通過參數(shù)傳遞!
后面的mouseMove函數(shù)和mouseUp函數(shù)就沒什么要注意的地方了!
要注意的問題關(guān)于this指針的問題,面向?qū)ο罄锩?b>this特別重要!
this拓展閱讀:
http://div.io/topic/809
關(guān)于event對象的問題,event對象只出現(xiàn)在事件里面,所以寫方法的時候要注意一下!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85521.html
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:獲取下一個元素節(jié)點(diǎn),存在的話,取消現(xiàn)有選中狀態(tài),設(shè)置下一個元素節(jié)點(diǎn)為選擇中,調(diào)用運(yùn)動框架實(shí)現(xiàn)動畫,添加定時器,調(diào)用該函數(shù),實(shí)現(xiàn)自動播放。移出時,開啟定時器,繼續(xù)輪播。輪播間隔時間單位為毫秒,默認(rèn)為,在內(nèi)部,以下部分進(jìn)行修改或添加。 轉(zhuǎn)載自我的個人博客 歡迎大家批評指正 包括5部分: 小練習(xí)1-處理用戶輸入 小練習(xí)2-日期對象的使用 小練習(xí)3:輪播圖 小練習(xí)4:輸入提示框 小練習(xí)...
摘要:獲取下一個元素節(jié)點(diǎn),存在的話,取消現(xiàn)有選中狀態(tài),設(shè)置下一個元素節(jié)點(diǎn)為選擇中,調(diào)用運(yùn)動框架實(shí)現(xiàn)動畫,添加定時器,調(diào)用該函數(shù),實(shí)現(xiàn)自動播放。移出時,開啟定時器,繼續(xù)輪播。輪播間隔時間單位為毫秒,默認(rèn)為,在內(nèi)部,以下部分進(jìn)行修改或添加。 轉(zhuǎn)載自我的個人博客 歡迎大家批評指正 包括5部分: 小練習(xí)1-處理用戶輸入 小練習(xí)2-日期對象的使用 小練習(xí)3:輪播圖 小練習(xí)4:輸入提示框 小練習(xí)...
閱讀 2310·2021-11-25 09:43
閱讀 2946·2019-08-30 15:52
閱讀 1897·2019-08-30 15:44
閱讀 985·2019-08-30 10:58
閱讀 764·2019-08-29 18:43
閱讀 3220·2019-08-29 18:36
閱讀 2321·2019-08-29 17:02
閱讀 1461·2019-08-29 17:01