在观察不少网站的时候,会有一个特效,遮罩层移入方向会随着鼠标的移入方向来改变,这样就须要对鼠标移入的方向进行判断。编程
1 var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1); 2 var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1); 3 var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;
判断鼠标移入的值落入该区域的哪一个部位,得出鼠标的移入方向。编程语言
1)、将判断区域问题转成判断角度。函数
2)、x和y的计算:网站
该元素的坐标原点是(offsetLeft, offsetTop),那么要转成判断角度,必须将原点拉到该元素的中点上。则中点的坐标是Oz( offsetLeft + w/2, offsetTop + h/2 );this
那么鼠标落入的点M(e.pageX,e.pageY);spa
若是要将这个点转成以Oz为中心,那么就得换算成 x点:e.pageX - (offsetLeft + w/2) ; y点:e.pageY - (offsetTop + h/2)。3d
那么x和y就出来了。 (w > h ? (h / w) : 1)和 (h > w ? (w / h) : 1)这两个请先忽略,后面会解释。code
3)、Math.atan2(x,y)函数:blog
这个函数返回的值至关于这个点的角度,固然貌似这些编程语言里返回的基本都是弧度。而这代码是用角度来算的因此避免不了弧度和角度的转换,io
公式:弧度=角度乘以π后再除以180,
角度=弧度除以π再乘以180
(Math.atan2(y, x) * (180 / Math.PI) 其实等于这个 (Math.atan2(y, x) / ( Math.PI/ 180)
4)、核心部分,
Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;