浏览网页的时候看到一个特效,遮罩层根据鼠标进入div的方向来显示,于是就对js判断鼠标进入div容器的方向这部分感兴趣,在网上找了一篇分析,总结在这里。
$(".S_service_div .on").hover(function(e){
var w = $(this).width();
var h = $(this).height();
var x=(e.pageX-this.offsetLeft-(w/2))*(w>h?(h/w):1);
var y=(e.pageY-this.offsetTop-(h/2))*(h>w?(w/h):1);
var dirNum=Math.round((((Math.atan2(y,x)*(180/Math.PI))+180)/90)+3)%4;//direction的值为“0,1,2,3”分别对应着“上,右,下,左”
if($(this).find(".show").length==0) {
if(dirNum==0){
$(this).find("dd").css({"top":"-100%","left":"0"});
}else if(dirNum==1){
$(this).find("dd").css({"top":"0","left":"100%"});
}else if(dirNum==2){
$(this).find("dd").css({"top":"100%","left":"0"});
}else if(dirNum==3){
$(this).find("dd").css({"top":"0","left":"-100%"});
}
$(this).find("dd").animate({ "top": "0","left":"0"} ,300);
}
});
$("#wrap").bind("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);
var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1);
var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; //direction的值为“0,1,2,3”分别对应着“上,右,下,左”
var eventType = e.type;
var dirName = new Array('上方','右侧','下方','左侧');
if(e.type == 'mouseenter'){
$("#result").html(dirName[direction]+'进入');
}else{
$('#result').html(dirName[direction]+'离开');
}
});
var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1);
计算x坐标值时,如果点原来的x坐标的绝对值大于圆的半径值,则按 h/w 这个比例进行缩小,使得到的点的位置在容器的边界位置所对应的象限区间里。 y 坐标的计算也是一样。
var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;