javascript利用canvas實(shí)現(xiàn)鼠標(biāo)拖拽功能
利用canvas實(shí)現(xiàn)鼠標(biāo)拖拽功能,當(dāng)在元素上按下鼠標(biāo)并移動時(shí),元素跟著鼠標(biāo)移動。
效果:
主要思路:
當(dāng)鼠標(biāo)按下時(shí),用isPointInPath方法判斷鼠標(biāo)位置是否在元素上,如果在則鼠標(biāo)移動時(shí)元素跟著移動;當(dāng)鼠標(biāo)抬起時(shí),將鼠標(biāo)移動事件和抬起事件置空。
代碼如下:
<canvas id="can" width="400" height="400"></canvas> <script type="text/javascript"> var can = document.getElementById("can"); var ctx = can.getContext("2d"); //創(chuàng)建圓滑塊 function createBlock(a,b){ ctx.beginPath(); ctx.fillStyle = "red"; ctx.arc(a,b,30,0,Math.PI*2); ctx.fill(); } //鼠標(biāo)按下,將鼠標(biāo)按下坐標(biāo)保存在x,y中 createBlock(50,50); can.onmousedown = function(ev){ var e = ev||event; var x = e.clientX; var y = e.clientY; drag(x,y); }; //拖拽函數(shù) function drag(x,y){ // 按下鼠標(biāo)判斷鼠標(biāo)位置是否在圓上,當(dāng)畫布上有多個路徑時(shí),isPointInPath只能判斷最后那一個繪制的路徑 if(ctx.isPointInPath(x,y)){ //路徑正確,鼠標(biāo)移動事件 can.onmousemove = function(ev){ var e = ev||event; var ax = e.clientX; var ay = e.clientY; //鼠標(biāo)移動每一幀都清楚畫布內(nèi)容,然后重新畫圓 ctx.clearRect(0,0,can.width,can.height); createBlock(ax,ay); }; //鼠標(biāo)移開事件 can.onmouseup = function(){ can.onmousemove = null; can.onmouseup = null; }; }; } </script>
更多精彩文章請點(diǎn)擊專題: Javascript拖拽特效匯總
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用javaScript實(shí)現(xiàn)鼠標(biāo)拖拽事件
- 鼠標(biāo)拖拽移動子窗體的JS實(shí)現(xiàn)
- js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法
- js實(shí)現(xiàn)鼠標(biāo)拖拽多選功能示例
- JS鼠標(biāo)拖拽實(shí)例分析
- jsMind通過鼠標(biāo)拖拽的方式調(diào)整節(jié)點(diǎn)位置
- js實(shí)現(xiàn)鼠標(biāo)拖拽div左右滑動
- JavaScript鼠標(biāo)拖拽事件詳解
- js實(shí)現(xiàn)鼠標(biāo)拖拽縮放div實(shí)例代碼
- JavaScript實(shí)現(xiàn)鼠標(biāo)拖拽效果
相關(guān)文章
完美實(shí)現(xiàn)八種js焦點(diǎn)輪播圖(上篇)
這篇文章主要介紹了完美實(shí)現(xiàn)八種js焦點(diǎn)輪播圖的具體資料,基于完美運(yùn)動框架move2.js而完成的八種焦點(diǎn)錄播圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07微信小程序?qū)崿F(xiàn)帶參數(shù)的分享功能(兩種方法)
本文通過兩種方法給大家介紹微信小程序?qū)崿F(xiàn)帶參數(shù)的分享,需要的朋友可以參考下2019-05-05JavaScript之Canvas_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JavaScript之Canvas,Canvas是HTML5新增的組件,它就像一塊幕布,可以用JavaScript在上面繪制各種圖表、動畫等2017-07-07在JavaScript中模擬類(class)及類的繼承關(guān)系
眾所周知,JavaScript中沒有類,然而我們卻可以動手實(shí)現(xiàn)一個擁有繼承特性的類,所以接下來我們要討論的便是在JavaScript中模擬類(class)及類的繼承關(guān)系:2016-05-05js實(shí)現(xiàn)的點(diǎn)擊超鏈顯示隱藏層
js實(shí)現(xiàn)的點(diǎn)擊超鏈顯示隱藏層...2007-05-05微信小程序?qū)崿F(xiàn)根據(jù)日期和時(shí)間排序功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)根據(jù)日期和時(shí)間排序功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08解決Babylon.js中AudioContext was not allowed&nbs
這篇文章主要介紹了解決Babylon.js中AudioContext was not allowed to start異常問題方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04