Javascript實現(xiàn)鼠標移入方向感知
本文介紹了JavaScript檢測鼠標移動方向的方法,涉及javascript鼠標操作的相關(guān)技巧,供大家參考,具體內(nèi)容如下
判斷鼠標移入方向的功能函數(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">故事成功地將原本隱藏在黑暗中,用世界上最強大的毅力和最艱辛的努力去做最密不可宣和隱諱殘酷的事情的忍者,描繪成了太陽下最值得驕傲最光明無限的職業(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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用JScript中運算符"||"和"&&"的特殊特性實現(xiàn)代碼精
利用JScript中運算符"||"和"&&"的特殊特性實現(xiàn)代碼精簡...2007-03-03淺談javascript中for in 和 for each in的區(qū)別
兩個的作用都用來遍歷對象,但為什么有了for in語句了還要for each in語句呢,后來看了下for each in開發(fā)的文檔,for each in是作為E4X標準的一部分在javascript 1.6中發(fā)布的,而且它不是ECMAScript標準的一部分2015-04-04js基于setTimeout與setInterval實現(xiàn)多線程
這篇文章主要介紹了js基于setTimeout與setInterval實現(xiàn)多線程的方法,分析了多線程的原理與javascript模擬實現(xiàn)多線程的相關(guān)技巧,需要的朋友可以參考下2016-06-06JavaScript中類型的強制轉(zhuǎn)換與隱式轉(zhuǎn)換詳解
類型強制Coercion是將值從一種類型轉(zhuǎn)換為另一種類型的過程(例如字符串轉(zhuǎn)換為數(shù)字,對象轉(zhuǎn)換為布爾值等),下面這篇文章主要給大家給大家介紹了JavaScript中類型的強制轉(zhuǎn)換與隱式轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2021-08-08JavaScript位移運算符(無符號) >>> 三個大于號 的使用方法詳解
這篇文章主要介紹了JavaScript位移運算符(無符號) >>> 三個大于號 的使用方法詳解的相關(guān)資料,需要的朋友可以參考下2016-03-03js中addEventListener()與removeEventListener()用法案例分析
這篇文章主要介紹了js中addEventListener()與removeEventListener()用法,結(jié)合實例形式分析了js中addEventListener()與removeEventListener()基本功能、用法與操作注意事項,需要的朋友可以參考下2020-03-03