原生JS實(shí)現(xiàn)拖拽功能
本文實(shí)例為大家分享了JS實(shí)現(xiàn)拖拽功能的具體代碼,供大家參考,具體內(nèi)容如下
拖拽的原理:三個(gè)事件 onmousedown、onmousemove、onmousemove
1、鼠標(biāo)按下,觸發(fā)onmousedown,獲取鼠標(biāo)坐標(biāo)x,y,獲取元素坐標(biāo)x,y
通過event.clientX、event.clientY獲取鼠標(biāo)位置的坐標(biāo)
let x = e.clientX - box.offsetLeft; //鼠標(biāo)點(diǎn)擊坐標(biāo)距離盒子左邊緣的距離let y = e.clientY - box.offsetTop; //鼠標(biāo)點(diǎn)擊坐標(biāo)距離盒子上邊緣的距離
2、設(shè)置元素left、top值,(元素要設(shè)置position:absolute)
box.style.left = ev.clientX - x + ’px’;box.style.top = ev.clientY - y + ’px’;
3、放開鼠標(biāo)取消dom事件
下面是詳細(xì)代碼:我只開了橫向移動(dòng)
<!DOCTYPE html><html lang='en'> <head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>Document</title> <style> #box { width: 100px; height: 100px; background: red; position: absolute } </style></head> <body style='position: relative;overflow: hidden;'> <div id='box'> </div> <script> window.onload = function () { let box = document.getElementById(’box’) box.onmousedown = function (ev) { let e = ev || event; let x = e.clientX - box.offsetLeft; //鼠標(biāo)點(diǎn)擊坐標(biāo)距離盒子左邊緣的距離 let y = e.clientY - box.offsetTop; //鼠標(biāo)點(diǎn)擊坐標(biāo)距離盒子上邊緣的距離 document.onmousemove = function (ev) { let e = ev || event; box.style.left = ev.clientX - x + ’px’; box.style.top = ev.clientY - y + ’px’; let bodyScreenX = ev.screenX let bodyClientWidth = document.body.clientWidth document.onmouseup = function (ev) { if (ev.clientX - x < 0) { box.style.left = 0 } else if (bodyScreenX > bodyClientWidth) { box.style.right = 0 box.style.left = bodyClientWidth - 100 + ’px’ } document.onmousemove = null; document.onmouseup = null; } } } } </script></body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. java實(shí)現(xiàn)圖形化界面計(jì)算器2. Spring-Richclient 0.1.0 發(fā)布3. javascript設(shè)計(jì)模式 ? 建造者模式原理與應(yīng)用實(shí)例分析4. 解決idea中yml文件不識(shí)別的問題5. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟6. Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考7. IDEA的Mybatis Generator駝峰配置問題8. IIS Express 取代 ASP.NET Development Server的配置方法9. IntelliJ Idea2017如何修改緩存文件的路徑10. JSP servlet實(shí)現(xiàn)文件上傳下載和刪除
