javascript實現(xiàn)鼠標點擊頁面 移動DIV
<script type="text/javascript"> //那種方式移動 var choMove = false; //是否綁定過click var isClick = true; //引用DIV var oDiv = null; //引用Input var oInput = null; //封裝事件綁定的通用對象 var evnetUtil = { addEventHandle:function(oElement,evtype,fun){ oElement.attachEvent?oElement.attachEvent("on"+evtype,fun):oElement.addEventListener(evtype,fun,false); }, removeEventHandle:function(oElement,evtype,fun){ oElement.detachEvent?oElement.detachEvent("on"+evtype,fun):oElement.removeEventListener(evtype,fun,false); } } //根據(jù)開關(guān),來讓document的Click事件綁定不同的動畫函數(shù) var eventMove = function(event){ var ev = event || window.event; choMove==true?clickMove(ev):slideMove(ev); } //根據(jù)鼠標點擊位置移動動畫一 var clickMove = function(cev){ var mouseX = cev.clientX; //鼠標點擊的橫坐標 var mouseY = cev.clientY; //鼠標點擊的縱坐標 //取消document的click事件綁定的函數(shù),以避免在動畫中,擊點頁面會又一次觸發(fā)這個動畫 evnetUtil.removeEventHandle(document,'click',eventMove); var setCliMove = setInterval(function(){ var oDivLeft = oDiv.offsetLeft; //DIV在頁面中的Left值; var oDivTop = oDiv.offsetTop; //DIV在頁面中的Top值; /*橫坐標移動的速,即每30毫秒,移動speedX距離 *mouseX-oDivLeft當前DIV與目標點之間的距離, *除以5,就是將這個距離分成5份 *分母5不變,距離越小,所以移動速度就越慢 */ var speedX = (mouseX-oDivLeft)/5; //縱坐標移動的速度,即每30毫秒,移動speedX距離,這個speedY是變化的,距離鼠標點擊的位置越近,這個值越小 var speedY = (mouseY-oDivTop)/5; /*這里必需使用向上或向下取舍的函數(shù)(Math.ceil和Math.floor) *因為speedX和speedY是一個變化的值,即將DIV和鼠標點擊的點X坐標之間的距離,平均分成5分, *mouseX == oDiv.offsetLeft就永遠不可能相等,就不會執(zhí)行if里面的語句了,所以這將一直循環(huán)下去 */ oDivLeft = mouseX-oDivLeft>0?Math.ceil(oDivLeft+speedX):Math.floor(oDivLeft+speedX); oDivTop = mouseY-oDivTop>0?Math.ceil(oDivTop+speedY):Math.floor(oDivTop+speedY); console.log(oDivLeft); //用當位置的TOP或left值,去加上每一次,即每30毫秒移動的距離,就得到新的坐標 oDiv.style.left = oDivLeft + "px"; oDiv.style.top = oDivTop + "px"; //如果到達鼠標點擊的位置 if(mouseX == oDiv.offsetLeft && mouseY == oDiv.offsetTop){ //清除這個運動動畫 clearInterval(setCliMove); //恢復(fù)document的click綁定的事件 evnetUtil.addEventHandle(document,'click',eventMove); } },30); } //根據(jù)標鼠標軌跡移動動畫二 var slideMove = function(cev){ alert("正在制做當中……"); } //綁定事件,改變input狀態(tài)(事件對象,input對象,標識點擊的那個Input) var binds = function(cev,oElem,index){ //防止多次點擊同一個Input if(oElem.className == ""){ oElem.value=oElem.value+"(已激活)" oElem.className = "cur"; } //點擊不同的input顯示不同文字和啟用不同動畫開關(guān) if(index==0){ oInput[1].value = "根據(jù)標鼠標軌跡移動"; oInput[1].className = ""; choMove = true; }else{ oInput[0].value = "根據(jù)鼠標點擊位置移動"; oInput[0].className = ""; choMove = false; } //只綁document定一次,再次點擊無需綁定,只需要啟用不同的動畫模式 if(isClick){ evnetUtil.addEventHandle(document,'click',eventMove); isClick = false; } //防止冒泡 cev.stopPropagation ?cev.stopPropagation() : (cev.cancelBubble=true); } window.onload = function(){ oInput = document.getElementsByTagName("input"); oDiv = document.getElementsByTagName("div")[0]; oInput[0].onclick = function(event){ var This = this; var ev = event || window.event; binds(ev,This,0); } oInput[1].onclick = function(event){ var This = this; var ev = event || window.event; binds(ev,This,1); } } </script>
一、原理分析:
1.怎么移動?
要移動DIV到指到的坐標點(X,Y),其實質(zhì),就是同時改變DIV的DIV.style.top 和 DIV.style.left 這兩個值;
2.如何看到移動?
因為要有移動效果,而不是突然間就將某個DIV的TOP和LEFT值變化為另一個值,所以就要用到:
setInterval這個阻塞函數(shù),讓函數(shù)的執(zhí)行,延遲,這樣就能看到移動效果。(只要是有的運動和移動都要用到這個函數(shù));
二、現(xiàn)實思路
1.速度
有運動,肯定就離不開速度這個概念,在這個例子中,速度是變化的,即DIV和鼠標點擊的坐標,之間的距離越大,這個速度應(yīng)該越快。反之速度越慢。以保證在同一個時間內(nèi),完成不同距離的運動。
所以 速度=距離/固定值;
這樣,當距離越大,速度越快。反之越小
2.如何判斷DIV移動到了鼠標點擊的點?
即:DIV的LEFT值和TOP值,與鼠標點擊時的X和Y值都相等。
在這個例子中。要使用函數(shù)(Math.ceil和Math.floor) 具體可以看代碼中的注釋
總結(jié):寫這個的時候想的太復(fù)雜,所以卡了好半天。思路一定要理清,再動手。
以上就是本文的全部內(nèi)容,希望對大家有所幫助,謝謝對腳本之家的支持!
- js實現(xiàn)鍵盤控制DIV移動的方法
- js+html+css實現(xiàn)鼠標移動div實例
- 利用javascript移動div層-javascript 拖動層
- javascript DIV實現(xiàn)跟隨鼠標移動
- JavaScript與Div對層定位和移動獲得坐標的實現(xiàn)代碼
- JS onmousemove鼠標移動坐標接龍DIV效果實例
- js拖動div 當鼠標移動時整個div也相應(yīng)的移動
- js實現(xiàn)鍵盤操作實現(xiàn)div的移動或改變的原理及代碼
- javascript實現(xiàn)點擊按鈕讓DIV層彈性移動的方法
- JavaScript利用鍵盤碼控制div移動
相關(guān)文章
url傳遞的參數(shù)值中包含&時,url自動截斷問題的解決方法
下面小編就為大家?guī)硪黄猽rl傳遞的參數(shù)值中包含&時,url自動截斷問題的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08JavaScript檢測是否開啟了控制臺(F12調(diào)試工具)
通過js來檢測開發(fā)者工具是否打開,防止別人惡意調(diào)試我們的代碼,最近我發(fā)現(xiàn)還是有蠻多人去瀏覽那篇文章,所以這里再放出一段代碼,算是個升級版吧2020-10-10JavaScript實現(xiàn)的CRC32函數(shù)示例
這篇文章主要介紹了JavaScript實現(xiàn)的CRC32函數(shù),簡單介紹了CRC32函數(shù)的概念和功能,并給出實例形式分析了CRC32函數(shù)的javascript實現(xiàn)與使用方法,需要的朋友可以參考下2016-11-11JavaScript cookie與session的使用及區(qū)別深入探究
這篇文章主要介紹了Java中Cookie和Session詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-10-10JavaScript知識點總結(jié)(五)之Javascript中兩個等于號(==)和三個等于號(===)的區(qū)別
這篇文章主要介紹了JavaScript知識點總結(jié)(五)之Javascript中兩個等于號(==)和三個等于號(===)的區(qū)別的相關(guān)資料,需要的朋友可以參考下2016-05-05