JavaScript實(shí)現(xiàn)簡單拖拽效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)簡單拖拽效果的具體代碼,供大家參考,具體內(nèi)容如下
先看實(shí)現(xiàn)的效果:

思路:里面用到了三個(gè)事件,鼠標(biāo)按下、移動、松開事件
那么首先創(chuàng)建盒子并且給它賦予css樣式
HTML:
// html
<div>
<p>我是個(gè)藍(lán)色的盒子</p>
</div>
CSS:
CSS
*{margin: 0;padding: 0;}
div{
width: 100px;
height: 100px;
background-color: cornflowerblue;
position: absolute;
}
p{
width: 100px;
height: 100px;
line-height: 100px;
font-size: 10px;
color: #fff;
text-align: center;
transition: .5s all;
}
p:hover{
transform: translateY(-5px);
transition: .5s all;
box-shadow: 10px 10px 5px gray;
}
然后在JS設(shè)置相應(yīng)的方法
var div = document.querySelector('div');
var p = document.querySelector('p');
// 先定義初始化變量x、y
var x =0;
var y = 0;
// var i = 3;
var TorF= false;
//盒子里的文字無法被選中
div.onselectstart = function (e) {
return false;
}
div.addEventListener('mousedown',function(e){
// client:鼠標(biāo)按鈕時(shí)輸出鼠標(biāo)指針的坐標(biāo)
x = e.clientX;
y = e.clientY;
// 格式:obj.offsetLeft:獲取左和上的偏移量
// 在這里特別說明一下:這個(gè)屬性是只讀的,不能夠賦值。
// 返回當(dāng)前元素距離父元素(body)左邊的距離
// 這里的l,t并不是聲明了一個(gè)全局變量,而是創(chuàng)建了一個(gè)全局對象的屬性。
l = div.offsetLeft;
t = div.offsetTop;
// 鼠標(biāo)設(shè)置移動箭頭
div.style.cursor = 'move';
p.innerHTML = '我被按下了 ^_^';
TorF= true;
});
// 當(dāng)整個(gè)屏幕觸發(fā)移動事件時(shí)
document.addEventListener('mousemove',function(e){
// 如果為false則終止函數(shù)的執(zhí)行并返回函數(shù)的值
if (Torf == false) {
return;
}
// 在此函數(shù)中定義局部變量
var twox = e.clientX;
var twoy = e.clientY;
// 用獲取到的鼠標(biāo)指針的坐標(biāo) - (鼠標(biāo)指針的坐標(biāo) - 偏移量) = 實(shí)際鼠標(biāo)拖動的位置
// 后面一定要加上px單位,因?yàn)楸旧慝@取是沒有單位的
var twol = twox - (x-l);
var twot = twoy - (y-t);
div.style.left = twol+'px';
div.style.top = twot+'px';
p.innerHTML = '我正在被拖動 -.-';
});
div.addEventListener('mouseup',function(){
// 松開鍵盤時(shí)停止鼠標(biāo)移動事件
TorF= false;
// 鼠標(biāo)恢復(fù)默認(rèn)樣式
div.style.cursor = 'default';
p.innerHTML = '我被彈開了QAQ';
})
注意:
1、想控制某一個(gè)盒子的位置,必須給盒子添加定位,否則盒子不會動
2、offsetLeft這個(gè)屬性是只讀的,不能夠賦值
3、鼠標(biāo)位置的的計(jì)算:鼠標(biāo)指針的坐標(biāo) - (鼠標(biāo)指針的坐標(biāo) - 偏移量) = 實(shí)際鼠標(biāo)拖動的位置
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript中常用的數(shù)組操作方法
- 深入淺出探究JavaScript中的async與await
- JavaScript實(shí)現(xiàn)經(jīng)典貪吃蛇游戲
- Javascript基礎(chǔ)知識中關(guān)于內(nèi)置對象的知識
- JavaScript 運(yùn)行機(jī)制詳解再淺談Event Loop
- Python 協(xié)程與 JavaScript 協(xié)程的對比
- javascript實(shí)現(xiàn)鼠標(biāo)拖尾特效
- JavaScript 數(shù)組去重詳解
- JavaScript實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
- JavaScript setinterval延遲一秒解決方案
- JavaScript 上傳文件限制參數(shù)案例詳解
- 簡單談?wù)凧avaScript變量提升
- 深入理解JavaScript的事件執(zhí)行機(jī)制
- 8個(gè)工程必備的JavaScript代碼片段
相關(guān)文章
JavaScript獲取網(wǎng)頁支持表單字符集的方法
這篇文章主要介紹了JavaScript獲取網(wǎng)頁支持表單字符集的方法,涉及javascript中acceptCharset方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
利用google提供的API(JavaScript接口)獲取網(wǎng)站訪問者IP地理位置的代碼詳解
利用google提供的API(JavaScript接口)獲取網(wǎng)站訪問者IP地理位置2010-07-07
uni-app?微信小程序授權(quán)登錄的實(shí)現(xiàn)步驟
本文主要介紹了uni-app?微信小程序授權(quán)登錄的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
javascript自定義滾動條實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了javascript自定義滾動條實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02
javascript實(shí)現(xiàn)的時(shí)間格式加8小時(shí)功能示例
這篇文章主要介紹了javascript實(shí)現(xiàn)的時(shí)間格式加8小時(shí)功能,涉及javascript日期時(shí)間轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
JavaScript中的動態(tài)?import()用法示例解析
這篇文章主要為大家介紹了JavaScript中的動態(tài)import()用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

