如何使用js實作拖曳功能
這次帶給大家如何使用js實現拖曳功能,使用js實現拖曳功能的注意事項有哪些,以下就是實戰案例,一起來看一下。
如果要設定物體拖曳,那麼必須使用三個事件,而這三個事件的使用順序不能顛倒。
1.onmousedown:滑鼠按下事件
2.onmousemove:滑鼠移動事件
3.onmouseup:滑鼠抬起事件
拖曳的基本原則是根據滑鼠的移動來移動被拖曳的元素。滑鼠的移動也就是x、y座標的變化;元素的移動就是style.position的 top和left的改變。當然,並不是任何時候移動滑鼠都要造成元素的移動,而應該判斷滑鼠左鍵的狀態是否為按下狀態,是否是在可拖曳的元素上按下的。
基本想法如下:
拖拽状态 = 0鼠标在元素上按下的时候{ 拖拽状态 = 1 记录下鼠标的x和y坐标 记录下元素的x和y坐标 } 鼠标在元素上移动的时候{ 如果拖拽状态是0就什么也不做。 如果拖拽状态是1,那么 元素y = 现在鼠标y - 原来鼠标y + 原来元素y 元素x = 现在鼠标x - 原来鼠标x + 原来元素x } 鼠标在任何时候放开的时候{ 拖拽状态 = 0 }
部分實例程式碼:
HTML部分
<p class="calculator" id="drag">**********</p>
CSS部分
calculator { position: absolute; /*设置绝对定位,脱离文档流,便于拖拽*/ display: block; width: 218px; height: 280px; cursor: move; /*鼠标呈拖拽状*/ }
JS部分
window.onload = function() { //拖拽功能(主要是触发三个事件:onmousedown\onmousemove\onmouseup) var drag = document.getElementById('drag'); //点击某物体时,用drag对象即可,move和up是全局区域,也就是整个文档通用,应该使用document对象而不是drag对象(否则,采用drag对象时物体只能往右方或下方移动) drag.onmousedown = function(e) { var e = e || window.event; //兼容ie浏览器 var diffX = e.clientX - drag.offsetLeft; //鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离 var diffY = e.clientY - drag.offsetTop; /*低版本ie bug:物体被拖出浏览器可是窗口外部时,还会出现滚动条, 解决方法是采用ie浏览器独有的2个方法setCapture()\releaseCapture(),这两个方法, 可以让鼠标滑动到浏览器外部也可以捕获到事件,而我们的bug就是当鼠标移出浏览器的时候, 限制超过的功能就失效了。用这个方法,即可解决这个问题。注:这两个方法用于onmousedown和onmouseup中*/ if(typeof drag.setCapture!='undefined'){ drag.setCapture(); } document.onmousemove = function(e) { var e = e || window.event; //兼容ie浏览器 var left=e.clientX-diffX; var top=e.clientY-diffY; //控制拖拽物体的范围只能在浏览器视窗内,不允许出现滚动条 if(left<0){ left=0; }else if(left >window.innerWidth-drag.offsetWidth){ left = window.innerWidth-drag.offsetWidth; } if(top<0){ top=0; }else if(top >window.innerHeight-drag.offsetHeight){ top = window.innerHeight-drag.offsetHeight; } //移动时重新得到物体的距离,解决拖动时出现晃动的现象 drag.style.left = left+ 'px'; drag.style.top = top + 'px'; }; document.onmouseup = function(e) { //当鼠标弹起来的时候不再移动 this.onmousemove = null; this.onmouseup = null; //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动) //修复低版本ie bug if(typeof drag.releaseCapture!='undefined'){ drag.releaseCapture(); } }; }; };
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是如何使用js實作拖曳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

探索前端中類似VSCode的面板拖拽調整功能的實現在前端開發中,如何實現類似於VSCode...

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。
