怎么實(shí)現(xiàn)頁(yè)面節(jié)點(diǎn)的拖動(dòng)搜骡?

解決這個(gè)問(wèn)題要考慮以下幾個(gè)因素:
1.被拖動(dòng)的節(jié)點(diǎn)是否脫離文檔流拂盯?
2.整個(gè)過(guò)程會(huì)觸發(fā)幾個(gè)事件?

a.被拖動(dòng)的節(jié)點(diǎn)是要脫離文檔流记靡,如果不脫離谈竿,節(jié)點(diǎn)會(huì)依照上一個(gè)節(jié)點(diǎn)來(lái)定位团驱,這樣就無(wú)法實(shí)現(xiàn)功能
b.為了實(shí)現(xiàn)拖動(dòng),基本方法是每次移動(dòng)空凸,計(jì)算出當(dāng)前節(jié)點(diǎn)的left和top值嚎花,然后添加到對(duì)應(yīng)節(jié)點(diǎn)的style中,對(duì)其進(jìn)行重新的定位和渲染
計(jì)算方法:(我們使用div做拖動(dòng))
首先需要知道javascript中關(guān)于尺寸的屬性:

clientWidth是對(duì)象看到的寬度(不含邊線,即border)
scrollWidth是對(duì)象實(shí)際內(nèi)容的寬度(若無(wú)padding呀洲,那就是邊框之間距離紊选,如有padding,就是左padding和右padding之間距離)道逗。
offsetWidth是指對(duì)象自身的寬度兵罢,整型,單位像素(含邊線滓窍,如滾動(dòng)條的占用的寬卖词,值會(huì)隨著內(nèi)容的輸入而不斷改變)。
offsetHeight:獲取對(duì)象相對(duì)于版面或由父坐標(biāo) offsetParent 屬性指定的父坐標(biāo)的高度
scrollHeight: 獲取對(duì)象的滾動(dòng)高度吏夯。
scrollLeft:設(shè)置或獲取位于對(duì)象左邊界和窗口中目前可見(jiàn)內(nèi)容的最左端之間的距離
scrollTop:設(shè)置或獲取位于對(duì)象最頂端和窗口中可見(jiàn)內(nèi)容的最頂端之間的距離
scrollWidth:獲取對(duì)象的滾動(dòng)寬度
offsetLeft:獲取對(duì)象相對(duì)于版面或由 offsetParent 屬性指定的父坐標(biāo)的計(jì)算左側(cè)位置
offsetTop:獲取對(duì)象相對(duì)于版面或由 offsetTop 屬性指定的父坐標(biāo)的計(jì)算頂端位置
clientX 設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于當(dāng)前窗口的 x 坐標(biāo)此蜈,其中客戶區(qū)域不包括窗口自身的控件和滾動(dòng)條。
clientY 設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于當(dāng)前窗口的 y 坐標(biāo)噪生,其中客戶區(qū)域不包括窗口自身的控件和滾動(dòng)條裆赵。

其次:拖動(dòng)的時(shí)候有一個(gè)變量是不變的,就是鼠標(biāo)指針到div的長(zhǎng)寬距離是不變的杠园,因此可以使用這個(gè)特性計(jì)算div所處的left和top值
綜上顾瞪,我們可將整個(gè)過(guò)程分成三個(gè)事件
1.按下鼠標(biāo)時(shí)的事件
這時(shí):指針當(dāng)前的位置 - div對(duì)象所在位置獲得那個(gè)常量
2.鼠標(biāo)拖動(dòng)的事件
這時(shí):a.指針當(dāng)前的位置 - 上一步驟獲得的常量就能得到div對(duì)象當(dāng)前所處位置
b.將得到的值填入到div對(duì)象style中,進(jìn)行重新渲染
3.松開鼠標(biāo)后的事件
將拖動(dòng)事件關(guān)閉

代碼展示:

css:
<style type="text/css">
        #box{width: 100px;height: 100px; background-color: red;position: absolute;}
</style>

html:
<div id="box" ></div>

javascript:
<script type="text/javascript">
    var box=document.getElementById('box');
    box.onmousedown=function (ev) {
//考慮win8兼容性
        var ev=ev||window.event;
//獲取指針到box對(duì)象(div)的left抛蚁、top距離
        var a=ev.clientX-box.offsetLeft;
        var b=ev.clientY-box.offsetTop;
        document.onmousemove=function (ev) {
            var ev=ev||window.event;
//獲取當(dāng)前box的位置
            var c=ev.clientX-a;
            var d=ev.clientY-b;
            if(c<=0){
                c=0;
            }
            if (d<=0) {
                d=0;
            }
//將得到的值載入
            box.style.left=c+'px';
            box.style.top=d+'px';
        }
    }
    box.onmouseup=function () {
//將拖動(dòng)關(guān)閉
        document.onmousemove=null;
    }    
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陈醒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞧甩,更是在濱河造成了極大的恐慌钉跷,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肚逸,死亡現(xiàn)場(chǎng)離奇詭異爷辙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)朦促,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門膝晾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人务冕,你說(shuō)我怎么就攤上這事血当。” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵臊旭,是天一觀的道長(zhǎng)落恼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)离熏,這世上最難降的妖魔是什么佳谦? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮滋戳,結(jié)果婚禮上钻蔑,老公的妹妹穿的比我還像新娘。我一直安慰自己胧瓜,他們只是感情好矢棚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著府喳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘑拯。 梳的紋絲不亂的頭發(fā)上钝满,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音申窘,去河邊找鬼弯蚜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剃法,可吹牛的內(nèi)容都是我干的碎捺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贷洲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼收厨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起优构,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诵叁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钦椭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拧额,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年彪腔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侥锦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡德挣,死狀恐怖恭垦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤署照,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布祸泪,位于F島的核電站,受9級(jí)特大地震影響建芙,放射性物質(zhì)發(fā)生泄漏没隘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一禁荸、第九天 我趴在偏房一處隱蔽的房頂上張望右蒲。 院中可真熱鬧,春花似錦赶熟、人聲如沸瑰妄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)间坐。三九已至,卻和暖如春邑退,著一層夾襖步出監(jiān)牢的瞬間竹宋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工地技, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜈七,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓莫矗,卻偏偏與公主長(zhǎng)得像飒硅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子作谚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • HTML標(biāo)簽解釋大全 一三娩、HTML標(biāo)記 標(biāo)簽:!DOCTYPE 說(shuō)明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,229評(píng)論 1 41
  • 本文是針對(duì)剛學(xué)編程的小白,都是一些基礎(chǔ)知識(shí),如果想了解更多深層一點(diǎn)的東西,歡迎移步本人博客!! 博客地址 點(diǎn)擊跳轉(zhuǎn)...
    西巴擼閱讀 563評(píng)論 0 2
  • 因?yàn)橐鲆粋€(gè)地圖操作的項(xiàng)目,需要用到這個(gè)地圖庫(kù)食磕,但是查詢官方API麻煩尽棕,而且這個(gè)地圖框架的API做的用起來(lái)確實(shí)太麻...
    虛幻的銹色閱讀 33,833評(píng)論 1 15
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,734評(píng)論 1 92
  • 我希望有一個(gè)人真正的了解我彬伦,知道我喜歡什么滔悉、害怕什么,知道我用什么牌子的洗發(fā)水和牙膏单绑,在我沉默的時(shí)候久久的握住我的...
    會(huì)想多的姑娘閱讀 387評(píng)論 0 0