1. 程式人生 > >判斷鼠標進入容器方向

判斷鼠標進入容器方向

得到 pan UNC sele http 角度 盒子寬度 PE direction

技術分享圖片

<script src="jquery-3.2.1.min.js"></script>
<script>
    $("#div").on("mouseenter mouseleave",function(e) {
        var w = $(this).width(); // 得到盒子寬度
        var h = $(this).height();// 得到盒子高度
        var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1);
        // 獲取x值
var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1); // 獲取y值 var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; //direction的值為“0,1,2,3”分別對應著“上,右,下,左” // 將點的坐標對應的弧度值換算成角度度數值 var dirName = new Array(‘上方‘, ‘右側‘, ‘下方‘, ‘左側‘);
if (e.type == ‘mouseenter‘) { $(this).html(dirName[direction] + ‘進入‘); } else { $(this).html(dirName[direction] + ‘離開‘); } }) </script>

原理代碼:

以div容器的中心點作為圓心,以高和寬的最小值作為直徑畫圓,將圓以[π/4,3π/4),[3π/4,5π/4),[5π/4,7π/4),[-π/4,π/4)劃分為四個象限,鼠標進入容器時的點的atan2(y,x)值在這四個象限裏分別對應容器邊框的下,右,上,左。

計算x坐標值時,如果點原來的x坐標的絕對值大於圓的半徑值,則按 h/w 這個比例進行縮小,使得到的點的位置在容器的邊界位置所對應的象限區間裏。 y 坐標的計算也是一樣。

技術分享圖片

判斷鼠標進入容器方向