js面向?qū)ο蠓绞綄?shí)現(xiàn)拖拽效果
更新時(shí)間:2021年03月03日 06:36:29 作者:web前端的清流
這篇文章主要為大家詳細(xì)介紹了js面向?qū)ο蠓绞綄?shí)現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了js面向?qū)ο蠓绞綄?shí)現(xiàn)拖拽的具體代碼,供大家參考,具體內(nèi)容如下
拖拽功能的實(shí)現(xiàn)原理:(直接拿走!)
<!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 { position: absolute; left: 100px; top: 100px; width: 100px; height: 100px; background: red; } #box2 { position: absolute; left: 200px; top: 200px; width: 100px; height: 100px; background: green; } </style> </head> <body> <div id="box">文字</div> <div id="box2">文字</div> </body> <script> class Drag { startMouse = {}; startEl = {}; #el = null; constructor(el, option) { this.#el = el; this.option = option; this.start(); } start() { let move = (e) => { this.move(e) } this.#el.addEventListener('mousedown', (e) => { this.startMouse = { x: e.clientX, y: e.clientY, } this.ondragstart && this.ondragstart(e) this.startEl = this.getOffset(); document.addEventListener('mousemove', move); document.addEventListener('mouseup', (e) => { document.removeEventListener('mousemove', move); this.end(e); }, { once: true }) e.preventDefault(); }) } move(e) { let nowMouse = { x: e.clientX, y: e.clientY, } let disMouse = { x: nowMouse.x - this.startMouse.x, y: nowMouse.y - this.startMouse.y } this.ondrag && this.ondrag(e) this.setOffset(disMouse) } end(e) { this.ondragend && this.ondragend(e) } getOffset() { return { x: parseFloat(getComputedStyle(this.#el)["left"]), y: parseFloat(getComputedStyle(this.#el)["top"]) } } setOffset(dis) { this.#el.style.left = this.startEl.x + dis.x + 'px' this.#el.style.top = this.startEl.y + dis.y + 'px' } } let box = document.querySelector("#box"); let box2 = document.querySelector("#box2"); let d = new Drag(box); let d2 = new Drag(box2); let clonex = null; d2.ondragstart = (e) => { clonex = box2.cloneNode(true); document.body.appendChild(clonex) box2.style.opacity = 0.5 } d2.ondragend = () => { document.body.removeChild(clonex); box2.style.opacity = 1 } </script> </html>
最終效果(拖動(dòng)的為綠色塊)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript創(chuàng)建createXmlHttpRequest對(duì)象示例代碼
這篇文章主要介紹了javascript創(chuàng)建createXmlHttpRequest對(duì)象的示例代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02jQuery 表單驗(yàn)證插件formValidation實(shí)現(xiàn)個(gè)性化錯(cuò)誤提示
這里介紹另外一個(gè)表單驗(yàn)證插件formValidation,這個(gè)插件與前面兩個(gè)插件的最大區(qū)別在于它實(shí)現(xiàn)了個(gè)性化的錯(cuò)誤提示信息,顯示在表單元素右上角類似于提示條2009-06-06js判斷手機(jī)和pc端選擇不同執(zhí)行事件的方法
這篇文章主要介紹了js判斷手機(jī)和pc端選擇不同執(zhí)行事件的方法,可實(shí)現(xiàn)判斷手機(jī)端還是PC端再選擇對(duì)應(yīng)的執(zhí)行事件的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2015-01-01純Javascript實(shí)現(xiàn)ping功能的方法
這篇文章主要介紹了純Javascript實(shí)現(xiàn)ping功能的方法,實(shí)例分析了javascript實(shí)現(xiàn)ping功能的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03