這幾天在做一個(gè)拖拽元素的附加功能,就是對(duì)齊到網(wǎng)格,實(shí)際上就是確定好元素的初始位置,然后拖拽元素時(shí),每次移動(dòng)固定的距離。讓元素都可以在網(wǎng)格內(nèi)對(duì)齊。先上效果圖,然后在詳細(xì)說(shuō)明一下細(xì)節(jié)問(wèn)題

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

做了一個(gè)gif圖,可以看到,每次元素的移動(dòng)都是按照最小單位距離移動(dòng)的。且每次元素都是對(duì)齊到網(wǎng)格的。

先根據(jù)demo說(shuō)明一下思路和細(xì)節(jié),后面會(huì)給出demo代碼。

1. 確定元素的每次移動(dòng)的最小單位(demo中為10px和10px),也就是每次水平或垂直的位移量都是10px。鋪上一層網(wǎng)格背景是為了幫助我們更好的看到效果(demo中的每個(gè)網(wǎng)格也是10px * 10px)。

2. 為了可以更加明顯的看到效果,初始化了元素的寬高(均為10px的倍數(shù))和默認(rèn)位置(同樣為10px的倍數(shù))。舉例說(shuō)明:元素寬高 50px * 50px,元素的初始位置為0xp * 0px。這樣做的好處是一開(kāi)始加載時(shí)就可以保證元素覆蓋整數(shù)個(gè)的小網(wǎng)格(也就是 5 * 5 個(gè)小網(wǎng)格),不會(huì)出現(xiàn)覆蓋不完整的網(wǎng)格。這一條其實(shí)為了讓用戶或者有強(qiáng)迫癥的人不用這么糾結(jié),實(shí)際上只是一個(gè)美化規(guī)置位置的操作。懂的朋友可以不用這么刻意,明白就好。

3. 最重要就是要如何確定什么時(shí)候移動(dòng)固定的距離。這個(gè)demo效果要明白一件事:鼠標(biāo)移動(dòng)和元素移動(dòng)是對(duì)應(yīng)的,但不是實(shí)時(shí)對(duì)等的(當(dāng)然,如果不考慮最小單位,只是純拖拽元素,然后將元素的位置設(shè)置為鼠標(biāo)的位置,這時(shí)可以理解為鼠標(biāo)移動(dòng)和元素移動(dòng)是實(shí)時(shí)對(duì)等的)?;氐絛emo說(shuō)明,鼠標(biāo)在網(wǎng)頁(yè)上移動(dòng)時(shí),是一個(gè)像素一個(gè)像素移動(dòng)的(可以通過(guò)console.log(e.pageX) 觀察鼠標(biāo)移動(dòng)的位置 )。而元素是每10px移動(dòng)一次。這一點(diǎn)就是我們要理解的關(guān)鍵,也是整個(gè)demo的關(guān)鍵。

了解了上面的思路,結(jié)合代碼和注釋,再說(shuō)明一下: