JS用斜率判斷鼠標(biāo)進(jìn)入DIV四個(gè)方向的方法
網(wǎng)上大部分判斷鼠標(biāo)移入div移入移出都是使用一下方法:
這個(gè)方法確實(shí)十分奇特,使用起來十分方便。
后來自己看了一些文章,看到有另一種以斜率的方法來判斷鼠標(biāo)的移動(dòng)方向。
上圖是此方法的示意圖,以瀏覽器左上角做原點(diǎn),水平軸作為x軸,往右為正;豎直軸作為y軸,向上為正。
中間的div的左上角坐標(biāo)(x1,y1),右下角坐標(biāo)(x2,y2),中心點(diǎn)的坐標(biāo)(x0,y0)。
設(shè)如圖兩點(diǎn)的斜率為k(k<0),關(guān)于x軸對(duì)稱的斜率為-k。
另外鼠標(biāo)剛移入時(shí),鼠標(biāo)的坐標(biāo)設(shè)為(x,y);
window.onload = function(){ var oDiv = document.getElementById('div1'); var x1 = oDiv.offsetLeft, y1 = -oDiv.offsetTop, //注意坐標(biāo),所有的y坐標(biāo)都是負(fù)數(shù) x2 = x1 + oDiv.offsetWidth, y2 = y1 - oDiv.offsetHeight, //同樣y坐標(biāo)為負(fù)數(shù) x0 = (x1 + x2) / 2, y0 = (y1 + y2) / 2; var k = (y2 - y1) / (x2 - x1); //斜率k // alert(-k) oDiv.onmouseover = function(e){ var e = e || window.event; var x = e.clientX, //鼠標(biāo)剛移入div內(nèi),記錄下當(dāng)前的x坐標(biāo) y = -e.clientY; //鼠標(biāo)剛移入div內(nèi),記錄下當(dāng)前的y坐標(biāo) var K = (y - y0) / (x - x0); //K是鼠標(biāo)移入點(diǎn)和中心點(diǎn)的斜率 //當(dāng)K大于k并且小于-k時(shí),則肯定是左右移入,當(dāng)移入點(diǎn)的x坐標(biāo)大于中心點(diǎn) ,則為右移入,小于則是左移入 if(k < K && K < -k){ if(x > x0){ alert('右'); }else{ alert('左'); } }else{ //注意此處y是負(fù)數(shù),判斷上下的方法同上 if(y > y0){ alert('上'); }else{ alert('下'); } } } }
首先我們計(jì)算出了斜率k和-k,主要是通過鼠標(biāo)進(jìn)入div的坐標(biāo)和中心點(diǎn)之間的斜率判斷‘左右'或者‘上下';
通過這張圖可以看出,當(dāng)鼠標(biāo)移入點(diǎn)和中心點(diǎn)的斜率K在 k和-k 之間時(shí),可以判斷出是左右移入。所以K在其他區(qū)間內(nèi)都是上下移入;
至于怎么分辨左還是右,則就通過移入點(diǎn)的x坐標(biāo)值是否大于中心點(diǎn)的x0值,大于就是右移入,小于就是左移入。
上下的判斷跟左右的原理一樣,不過要注意y坐標(biāo)都是負(fù)的,不可將大小分辨錯(cuò)了。
以上所述是小編給大家介紹的JS用斜率判斷鼠標(biāo)進(jìn)入DIV四個(gè)方向的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- js判斷鼠標(biāo)移入移出方向的方法
- JS實(shí)現(xiàn)盒子跟著鼠標(biāo)移動(dòng)及鍵盤方向鍵控制盒子移動(dòng)效果示例
- JS判斷鼠標(biāo)進(jìn)入容器的方向與window.open新窗口被攔截的問題
- 利用JS判斷鼠標(biāo)移入元素的方向
- javascript鼠標(biāo)跟隨運(yùn)動(dòng)3種效果(眼球效果,蘋果菜單,方向跟隨)
- JavaScript檢測(cè)鼠標(biāo)移動(dòng)方向的方法
- JS判斷鼠標(biāo)從什么方向進(jìn)入一個(gè)容器實(shí)例說明
- Javascript實(shí)現(xiàn)鼠標(biāo)移入方向感知
相關(guān)文章
js中的異步獲取到的數(shù)據(jù)到底能不能賦值給一個(gè)全局變量問題
這篇文章主要介紹了js中的異步獲取到的數(shù)據(jù)到底能不能賦值給一個(gè)全局變量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04javascript設(shè)置連續(xù)兩次點(diǎn)擊按鈕時(shí)間間隔的方法
這篇文章主要介紹了javascript設(shè)置連續(xù)兩次點(diǎn)擊按鈕時(shí)間間隔的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10解決layui的table插件無法多層級(jí)獲取json數(shù)據(jù)的問題
今天小編就為大家分享一篇解決layui的table插件無法多層級(jí)獲取json數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09解決火狐瀏覽器下JS setTimeout函數(shù)不兼容失效不執(zhí)行的方法
今天檢查自己用JQuery+AJAX+PHP做的網(wǎng)站后臺(tái)登錄檢測(cè),愛其他瀏覽器中兼容性還不錯(cuò) 結(jié)果到了火狐(FireFox)瀏覽器下setTimeout這個(gè)JS內(nèi)置函數(shù)不執(zhí)行了,本文將提供詳細(xì)的解決方法2012-11-11JavaScript動(dòng)態(tài)數(shù)量的文件上傳控件
本文給大家分享一段js代碼關(guān)于動(dòng)態(tài)數(shù)量的文件上傳控件,代碼簡單易懂,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看2016-11-11