Javascript實(shí)現(xiàn)鼠標(biāo)移入方向感知
本文介紹了JavaScript檢測鼠標(biāo)移動(dòng)方向的方法,涉及javascript鼠標(biāo)操作的相關(guān)技巧,供大家參考,具體內(nèi)容如下
判斷鼠標(biāo)移入方向的功能函數(shù)
function getDir(ev, ele) {
var l = ele.getBoundingClientRect().left;
var t = ele.getBoundingClientRect().top;
var w = ele.getBoundingClientRect().width;
var h = ele.getBoundingClientRect().height;
var x = (ev.clientX - l - w / 2) * (w > h ? (h / w) : 1);
var y = (ev.clientY - t - h / 2) * (h > w ? (w / h) : 1);
var deg = Math.atan2(y, x) / (Math.PI / 180);
var d = (Math.round((deg + 180) / 90) + 3) % 4;
return d;
// d的值{上:0,右:1,下:2,左:3}
}
整體代碼:
html:
<div id="container">
<img src="./bg.jpg" alt="">
<p class="ps">故事成功地將原本隱藏在黑暗中,用世界上最強(qiáng)大的毅力和最艱辛的努力去做最密不可宣和隱諱殘酷的事情的忍者,描繪成了太陽下最值得驕傲最光明無限的職業(yè)。在岸本齊史筆下的忍者世界中,每一位年輕的忍者都在開拓著屬于自己的忍道。
</p>
</div>
CSS:
*{
margin: 0;
padding: 0;
}
#container{
width: 400px;
height: 200px;
position: relative;
margin-top: 100px;
margin-left: 200px;
overflow: hidden;
}
#container img{
width: 100%;
height: 100%;
transition: 0.5s;
}
#container p{
width: 100%;
height: 100%;
padding: 10px;
box-sizing: border-box;
position: absolute;
left: 0;
/* top: 0; */
background: rgba(0, 0, 0, .7);
color: #ccc;
font-size: 14px;
line-height: 24px;
}
#container:hover img{
transform: scale(1.1);
}
JS:
window.onload = function () {
var box = document.getElementById('container');
var ps = document.getElementsByClassName('ps');
var pos=[
{left:0,top:'-100%'},
{left:'100%',top:0},
{left:0,top:'100%'},
{left:'-100%',top:0}
]
box.onmouseenter = function(ev){
var dir = getDir(ev,this);
ps[0].style.transition='';
ps[0].style.left=pos[dir].left;
ps[0].style.top=pos[dir].top;
setTimeout(function(){
ps[0].style.transition='.3s';
ps[0].style.left=0;
ps[0].style.top=0;
},1000/60)
}
box.onmouseleave = function(ev){
var dir = getDir(ev,this);
setTimeout(function(){
ps[0].style.transition='';
ps[0].style.left=pos[dir].left;
ps[0].style.top=pos[dir].top;
},100)
}
}
function getDir(ev, ele) {
var l = ele.getBoundingClientRect().left;
var t = ele.getBoundingClientRect().top;
var w = ele.getBoundingClientRect().width;
var h = ele.getBoundingClientRect().height;
var x = (ev.clientX - l - w / 2) * (w > h ? (h / w) : 1);
var y = (ev.clientY - t - h / 2) * (h > w ? (w / h) : 1);
var deg = Math.atan2(y, x) / (Math.PI / 180);
var d = (Math.round((deg + 180) / 90) + 3) % 4;
return d;
// d的值{上:0,右:1,下:2,左:3}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js判斷鼠標(biāo)移入移出方向的方法
- JS實(shí)現(xiàn)盒子跟著鼠標(biāo)移動(dòng)及鍵盤方向鍵控制盒子移動(dòng)效果示例
- JS判斷鼠標(biāo)進(jìn)入容器的方向與window.open新窗口被攔截的問題
- 利用JS判斷鼠標(biāo)移入元素的方向
- JS用斜率判斷鼠標(biāo)進(jìn)入DIV四個(gè)方向的方法
- javascript鼠標(biāo)跟隨運(yùn)動(dòng)3種效果(眼球效果,蘋果菜單,方向跟隨)
- JavaScript檢測鼠標(biāo)移動(dòng)方向的方法
- JS判斷鼠標(biāo)從什么方向進(jìn)入一個(gè)容器實(shí)例說明
相關(guān)文章
利用JScript中運(yùn)算符"||"和"&&"的特殊特性實(shí)現(xiàn)代碼精
利用JScript中運(yùn)算符"||"和"&&"的特殊特性實(shí)現(xiàn)代碼精簡...2007-03-03
在線所見即所得HTML編輯器的實(shí)現(xiàn)原理淺析
這篇文章主要介紹了在線所見即所得HTML編輯器的實(shí)現(xiàn)原理淺析,本文用初始化、打開編輯功能、獲取編輯器的內(nèi)容、增加樣式設(shè)置、再進(jìn)一步等步驟闡述在線編輯器的基本實(shí)現(xiàn)原理,需要的朋友可以參考下2015-04-04
當(dāng)json鍵為數(shù)字時(shí)的取值方法解析
對(duì)于數(shù)字鍵名或者非正常變量字符(比如有空格),必須使用 aa[x]的方式2013-11-11
淺談javascript中for in 和 for each in的區(qū)別
兩個(gè)的作用都用來遍歷對(duì)象,但為什么有了for in語句了還要for each in語句呢,后來看了下for each in開發(fā)的文檔,for each in是作為E4X標(biāo)準(zhǔn)的一部分在javascript 1.6中發(fā)布的,而且它不是ECMAScript標(biāo)準(zhǔn)的一部分2015-04-04
JS數(shù)據(jù)類型STRING使用實(shí)例解析
這篇文章主要介紹了JS數(shù)據(jù)類型STRING使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
js基于setTimeout與setInterval實(shí)現(xiàn)多線程
這篇文章主要介紹了js基于setTimeout與setInterval實(shí)現(xiàn)多線程的方法,分析了多線程的原理與javascript模擬實(shí)現(xiàn)多線程的相關(guān)技巧,需要的朋友可以參考下2016-06-06
JavaScript中類型的強(qiáng)制轉(zhuǎn)換與隱式轉(zhuǎn)換詳解
類型強(qiáng)制Coercion是將值從一種類型轉(zhuǎn)換為另一種類型的過程(例如字符串轉(zhuǎn)換為數(shù)字,對(duì)象轉(zhuǎn)換為布爾值等),下面這篇文章主要給大家給大家介紹了JavaScript中類型的強(qiáng)制轉(zhuǎn)換與隱式轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2021-08-08
JavaScript位移運(yùn)算符(無符號(hào)) >>> 三個(gè)大于號(hào) 的使用方法詳解
這篇文章主要介紹了JavaScript位移運(yùn)算符(無符號(hào)) >>> 三個(gè)大于號(hào) 的使用方法詳解的相關(guān)資料,需要的朋友可以參考下2016-03-03
js中addEventListener()與removeEventListener()用法案例分析
這篇文章主要介紹了js中addEventListener()與removeEventListener()用法,結(jié)合實(shí)例形式分析了js中addEventListener()與removeEventListener()基本功能、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03

