CSS是一種用來(lái)控制網(wǎng)頁(yè)樣式的語(yǔ)言。除了控制布局、顏色、字體等方面的設(shè)計(jì),CSS還可以實(shí)現(xiàn)許多交互效果,比如拖拽這一常見(jiàn)需求。
下面我們來(lái)看一下如何使用CSS實(shí)現(xiàn)一個(gè)div的拖拽效果。
.draggable { position: absolute; width: 100px; height: 100px; background-color: red; cursor: move; /*設(shè)置鼠標(biāo)為手型*/ }
首先,我們需要給要拖拽的div添加一個(gè)class名,并設(shè)置好其樣式。其中,position我們?cè)O(shè)置為absolute,表示該div可以相對(duì)于其父元素進(jìn)行移動(dòng)。
同時(shí),我們?cè)O(shè)置了cursor為move,這樣當(dāng)鼠標(biāo)懸停在該div上時(shí)會(huì)顯示手型,提示用戶可以拖拽移動(dòng)該元素。
.draggable:active { cursor: grabbing; /*設(shè)置拖動(dòng)時(shí)的鼠標(biāo)圖標(biāo)*/ }
接下來(lái),我們需要設(shè)置鼠標(biāo)拖動(dòng)該div時(shí)的效果,我們使用:active偽類實(shí)現(xiàn)。當(dāng)用戶按下鼠標(biāo)時(shí),該偽類會(huì)生效。
我們將cursor的值設(shè)置為grabbing,在拖動(dòng)時(shí)會(huì)出現(xiàn)拳頭圖標(biāo),表示正在拖動(dòng)中。
.draggable { /*設(shè)置元素初始位置為left: 0px;top: 0px;*/ left: 0px; top: 0px; } .draggable:active { /*根據(jù)鼠標(biāo)的位置動(dòng)態(tài)改變?cè)氐膌eft和top值*/ left: calc(var(--x) - 50px); top: calc(var(--y) - 50px); }
最后,我們需要使用變量來(lái)動(dòng)態(tài)改變?cè)氐膌eft和top值。這里我們使用了calc()函數(shù),計(jì)算的是鼠標(biāo)當(dāng)前位置減去元素寬度或高度的一半。
我們可以通過(guò)在容器元素上添加onmousemove事件來(lái)獲取鼠標(biāo)當(dāng)前位置,然后將值賦給元素的--x和--y變量。
拖拽我哦
最后,在容器元素上添加onmousemove事件,獲取鼠標(biāo)當(dāng)前位置并將值賦給--x和--y變量即可。
這樣,我們就成功實(shí)現(xiàn)了一個(gè)div的拖拽效果啦~