原生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
通過(guò)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、放開(kāi)鼠標(biāo)取消dom事件
下面是詳細(xì)代碼:我只開(kāi)了橫向移動(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í)有所幫助,也希望大家多多支持腳本之家。
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- Sortable.js拖拽排序使用方法解析
- js實(shí)現(xiàn)拖拽效果
- javascript實(shí)現(xiàn)移動(dòng)端上的觸屏拖拽功能
- 使用js實(shí)現(xiàn)的簡(jiǎn)單拖拽效果
- JS實(shí)現(xiàn)漂亮的窗口拖拽效果(可改變大小、最大化、最小化、關(guān)閉)
- JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼
- 使用javaScript實(shí)現(xiàn)鼠標(biāo)拖拽事件
- js完美的div拖拽實(shí)例代碼
- Javascript拖拽系列文章2之offsetLeft、offsetTop、offsetWidth、offsetHeight屬性
相關(guān)文章
關(guān)于javaScript注冊(cè)click事件傳遞參數(shù)的不成功問(wèn)題
在javaScript中給一個(gè)html元素注冊(cè)click事件處理函數(shù)時(shí),比如給該處理函數(shù)傳3個(gè)參數(shù)??墒遣还苁鞘褂孟旅婺欠N方式都不能給事件處理函數(shù)傳遞參數(shù)2014-07-07
圖片動(dòng)畫橫條廣告帶上下滾動(dòng)的JS代碼
可以自定義廣告的圖片、鏈接、長(zhǎng)、寬等。光標(biāo)移到圖片上會(huì)出現(xiàn)左右箭頭,有需要的朋友可以參考一下2013-10-10
JavaScript中document.forms[0]與getElementByName區(qū)別
在很多情況下JavaScript中document.forms[0]與getElementByName這兩種用法沒(méi)有區(qū)別,這片文章詳細(xì)的解釋了兩者的區(qū)別和用法,有興趣的朋友可以參考一下。2015-01-01
JS實(shí)現(xiàn)時(shí)間格式化的方式匯總
這篇文章介紹了JS實(shí)現(xiàn)時(shí)間格式化的方式,有需要的朋友可以參考一下2013-10-10
微信小程序websocket聊天室的實(shí)現(xiàn)示例代碼
這篇文章主要介紹了微信小程序websocket聊天室的實(shí)現(xiàn)示例代碼,小程序本身對(duì)http、websocket等連接均有諸多限制,所以這次項(xiàng)目選擇了node.js自帶的ws模塊。感興趣的可以參考一下2019-02-02
基于JS正則表達(dá)式實(shí)現(xiàn)模板數(shù)據(jù)動(dòng)態(tài)渲染(實(shí)現(xiàn)思路詳解)
這篇文章主要介紹了基于JS正則表達(dá)式實(shí)現(xiàn)模板數(shù)據(jù)動(dòng)態(tài)渲染 ,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
JavaScript中實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種常用方法總結(jié)
本文主要介紹了網(wǎng)頁(yè)開(kāi)發(fā)中頁(yè)面跳轉(zhuǎn)的概念和重要性,及使用JS實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種常見(jiàn)方法,包括使用window.location.href,window.location.replace(),window.location.assign(),window.open(),form表單提交以及HTML的a標(biāo)簽等方法實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),需要的朋友可以參考下2024-10-10

