使用js来确定鼠标移动到元素中的方向。

最终效果

这里的关键是判断鼠标进入和离开的方向。


$(礼),(MouseEnter MouseLeave
无功W = this.offsetwidth;
var H = this.offsetheight;
Var x = e.pageX - this.getBoundingClientRect ().Left - w/2;
var y = e.pagey - this.getboundingclientrect()。顶H / 2;
无功方向= math.round(((math.atan2(Y,X)* 180 /数学。PI)+ 180)/ 90)+ 3)% 4; / /方向值为0,1,2,3,对应上,右,左,左,分别。
风险事件类型= e.type;
VaR既= math.atan2(Y,X)/(math.pi / 180)+ 180;
$(线),Css('transform ','rotate(RES + 'deg));
(((console.log / math.atan2(Y,X)* 180 /数学。PI)+ 180));
/ / console.log(math.round((math.atan2(Y,X)/(math.pi / 180)+ 180)/ 90 + 3)% 4);
var目录=新的数组('above ','权','在','左');
$('。水库')。文本(RES + 'deg);
如果(事件类型= = 'mouseenter){
$('。水库')。文本(目录{方向} + '进入');
AnimationIn(方向);
其他{ }
$('。水库')。文本(目录{方向} +离开);
AnimationOut(方向);
}
});


上述代码的重点主要是计算方向的值。

math.atan2(Y,X)返回值之间的PI和PI(零下180度到180度),这是从X轴正轴角度(x,y)。这里的结果是一个弧值。你如何把这个值变成一个角度

我们可以先找出一个角度的弧度值(math.pi / 180),然后利用上述计算结果除以弧度的程度。


正如你可以看到上面的图片,当鼠标从右边,角度是45度45度之间~,底部45 ~ 135、135的~ 180-180 ~ -左侧135 - 135 - 45 ~。

因为上面的计算结果与我们的习惯不符,而负值会影响计算的正确性。现在我们把180的结果加在我们习惯的0到360个角上。当你加180时,0度在左边。


0度的位置

那么现在的范围变成了

左侧0~44~360~315。

在45到134的顶部

右边135到224

225~314底

我们继续转换,现在我们把计算的角度分为90,然后是四到五,这可以使45度成为一条分界线。

顶部的结果是1。


以上

右边的结果是2。


赖特

结果是3。


下面

结果表明,在315~0的360中,两种0~44是4。


左边

结果现在有5个值(左边2个,另一个三个),然后简化结果。我们对每个结果加3,然后是4。

左加3是3和7,然后盈余是3。

加上3是4,盈余是0。

在右边,3是5,剩下的是1。

在底部,3是6,其余的是2。

我们最后的结果是在左边的3 -左边的1 - 0的右边,然后我们可以通过控制左上角来达到这个效果。








文件

{ *
填充:0;
保证金:0;
}

HTML,
{体
宽度:100%;
身高:100%;
}

{ UL
列表样式:无;
职位:相对;
宽度:600px;
宽度:100%;
}

李{
保证金:50px汽车;
职位:相对;
宽度:300px;
身高:300px;
背景颜色:黑色;
溢出:隐藏;
}


位置:绝对;
宽度:300px;
身高:300px;
左:- 100%;
顶部:0;
背景颜色:红色;
文本对齐:中心;
行高:300px;
颜色:蓝色;
字体大小:150px;
}

{线。
位置:绝对;
宽度:50%;
身高:1px;
背景:红色;
权利:0;
顶部:50%;
过渡:all.3s;
转换原点:左;
}

{。水库
文本对齐:中心;
}







某人






$(礼),(MouseEnter MouseLeave
var$ = $(this);
无功W = this.offsetwidth; / /获取元素的宽度
var H = this.offsetheight; / /获取元素的高度
功往上爬的= this.getboundingclientrect(前+文档。身体。scrollTop); / /兼容的滚动条
var x = e.pagex - this.getboundingclientrect(左)- W / / / x 2;获取当前鼠标位置(相对于李中心)
var y = e.pagey -上-的H / Y / 2;获取当前鼠标的位置(相对于李中心)
无功方向= math.round(((math.atan2(Y,X)* 180 /数学。PI)+ 180)/ 90)+ 3)% 4; / /方向值为0,1,2,3,对应上,右,左,左,分别。
风险事件类型= e.type;
VaR既= math.atan2(Y,X)/(math.pi / 180)+ 180;
$(线),Css('transform ','rotate(+物+ 'deg));
var目录=新的数组('above ','权','在','左');
如果(事件类型= = 'mouseenter){
$('。水库')。文本(目录{方向} + '进入');
AnimationIn(方向,为BG);
{人}
$('。水库')。文本(目录{方向} +离开);
AnimationOut(方向,为BG);
}
});
功能动画(方向、ELE){
开关(方向){
案例0:
ele.css({
左:0,
顶部:100%
}。动画({
上图:0
},300);
打破;
案例1:
ele.css({
左:100 %,
上图:0
}。动画({
左:0
},300);
打破;
案例2:
ele.css({
左:0,
上图:100 %
}。动画({
上图:0
},300);
打破;
案例3:
ele.css({
左:100%,
上图:0
}。动画({
左:0
},300);
打破;
}
}
功能animationout(方向、ELE){
开关(方向){
案例0:
ele.animate({
顶部:100%
},300);
打破;
案例1:
ele.animate({
左:100 %
},300);
打破;
案例2:
ele.animate({
上图:100 %
},300);
打破;
案例3:
ele.animate({
左:100%
},300);
打破;
}
}





以上是本文的全部内容,希望本文的内容能给大家的学习或工作带来一定的帮助,同时也希望能给予更多的支持!