JavaScript實現(xiàn)鼠標(biāo)拖拽調(diào)整div大小
更新時間:2021年03月07日 06:51:00 作者:BDawn
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)鼠標(biāo)拖拽調(diào)整div大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JavaScript實現(xiàn)鼠標(biāo)拖拽調(diào)整div大小的具體代碼,供大家參考,具體內(nèi)容如下
實現(xiàn)思路:
- 根據(jù)鼠標(biāo)位置改變鼠標(biāo)樣式
- 當(dāng)鼠標(biāo)在div的邊緣和四個角時顯示不同的樣式,通過cursor修改
- 當(dāng)鼠標(biāo)在div的邊緣和四個角按下時記錄具體坐標(biāo)點位置, 并開始根據(jù)鼠標(biāo)的移動修改div的尺寸
- 鼠標(biāo)松開時結(jié)束尺寸修改
代碼實現(xiàn):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body, html {
width: 100%;
height: 100%;
margin: 0;
}
#container {
width: 200px;
height: 200px;
padding: 15px;
border: #00cdcd 2px solid;
box-sizing: border-box;
}
.item {
cursor: default;
width: 100%;
height: 100%;
background: #757575;
}
</style>
</head>
<body id="body">
<div id="container">
<div class="item"></div>
</div>
<script>
//需要調(diào)整尺寸的div
let c = document.getElementById('container')
// body監(jiān)聽移動事件
document.getElementById('body').addEventListener('mousemove', move)
// 鼠標(biāo)按下事件
c.addEventListener('mousedown', down)
// 鼠標(biāo)松開事件
document.getElementById('body').addEventListener('mouseup', up)
// 是否開啟尺寸修改
let resizeable = false
// 鼠標(biāo)按下時的坐標(biāo),并在修改尺寸時保存上一個鼠標(biāo)的位置
let clientX, clientY
// div可修改的最小寬高
let minW = 8, minH = 8
// 鼠標(biāo)按下時的位置,使用n、s、w、e表示
let direc = ''
// 鼠標(biāo)松開時結(jié)束尺寸修改
function up() {
resizeable = false
}
// 鼠標(biāo)按下時開啟尺寸修改
function down(e) {
let d = getDirection(e)
// 當(dāng)位置為四個邊和四個角時才開啟尺寸修改
if (d !== '') {
resizeable = true
direc = d
clientX = e.clientX
clientY = e.clientY
}
}
// 鼠標(biāo)移動事件
function move(e) {
let d = getDirection(e)
let cursor
if (d === '') cursor = 'default';
else cursor = d + '-resize';
// 修改鼠標(biāo)顯示效果
c.style.cursor = cursor;
// 當(dāng)開啟尺寸修改時,鼠標(biāo)移動會修改div尺寸
if (resizeable) {
// 鼠標(biāo)按下的位置在右邊,修改寬度
if (direc.indexOf('e') !== -1) {
c.style.width = Math.max(minW, c.offsetWidth + (e.clientX - clientX)) + 'px'
clientX = e.clientX
}
// 鼠標(biāo)按下的位置在上部,修改高度
if (direc.indexOf('n') !== -1) {
c.style.height = Math.max(minH, c.offsetHeight + (clientY - e.clientY)) + 'px'
clientY = e.clientY
}
// 鼠標(biāo)按下的位置在底部,修改高度
if (direc.indexOf('s') !== -1) {
c.style.height = Math.max(minH, c.offsetHeight + (e.clientY - clientY)) + 'px'
clientY = e.clientY
}
// 鼠標(biāo)按下的位置在左邊,修改寬度
if (direc.indexOf('w') !== -1) {
c.style.width = Math.max(minW, c.offsetWidth + (clientX - e.clientX)) + 'px'
clientX = e.clientX
}
}
}
// 獲取鼠標(biāo)所在div的位置
function getDirection(ev) {
let xP, yP, offset, dir;
dir = '';
xP = ev.offsetX;
yP = ev.offsetY;
offset = 10;
if (yP < offset) dir += 'n';
else if (yP > c.offsetHeight - offset) dir += 's';
if (xP < offset) dir += 'w';
else if (xP > c.offsetWidth - offset) dir += 'e';
return dir;
}
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript instanceof 內(nèi)部機制探析
在 JavaScript 中,可以用 instanceof 來判斷一個對象是不是某個類或其子類的實例。2010-10-10
在一個js文件里遠程調(diào)用jquery.js會在ie8下的一個奇怪問題
這樣的腳本你在ie8下調(diào)用,在ie8地址欄下按下回車后調(diào)用jquery的對像、方法什么的沒有問題,但是刷新之后就有問題。就是刷新之后無論怎樣你要在地址欄按一下回車。2010-11-11
JS 實現(xiàn)導(dǎo)航欄懸停效果(續(xù))
上次導(dǎo)航欄懸停的那個頁面在IE上運行的時候,會出導(dǎo)航欄不停的抖動問題,在本文已有完美的解決方法,將導(dǎo)航欄的定位方式由原來的absolute改為fixed即可2013-09-09
JS中實現(xiàn)replaceAll的方法(實例代碼)
本文是對JS中實現(xiàn)replaceAll的方法進行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11
LayUI+Shiro實現(xiàn)動態(tài)菜單并記住菜單收展的示例
這篇文章主要介紹了LayUI+Shiro實現(xiàn)動態(tài)菜單并記住菜單收展的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
微信小程序通過websocket實時語音識別的實現(xiàn)代碼
這篇文章主要介紹了微信小程序通過websocket實時語音識別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

