jQuery 判断鼠标从哪个方向进入元素

34 篇文章 2 订阅
5 篇文章 0 订阅
$(".item").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(eventType == 'mouseenter'){
		console.log(dirName[direction]+'进入');
	}else{
		console.log(dirName[direction]+'离开');
	}
});

在列表中使用:

HTML:

<div class="item">
	<div class="img"><img src="img/img1.jpg" alt=""></div>
	<div class="mask">文字</div>
</div>
<div class="item">
	<div class="img"><img src="img/img2.jpg" alt=""></div>
	<div class="mask">文字</div>
</div>
<div class="item">
	<div class="img"><img src="img/img3.jpg" alt=""></div>
	<div class="mask">文字</div>
</div>
<div class="item">
	<div class="img"><img src="img/img4.jpg" alt=""></div>
	<div class="mask">文字</div>
</div>

JS(jQuery):

$(".item").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 styles = {
		center: {top: 0, left: 0},
		top: {top: '-100%', left: 0},
		right: {top: 0, left: '100%'},
		bottom: {top: '100%', left: 0},
		left: {top: 0, left: '-100%'}
	}
	var item = $(this).find('.mask').stop();
	if(eventType == 'mouseenter'){
		if(direction == 0) {
			item.css(styles.top);
		}else if(direction == 1) {
			item.css(styles.right);
		}else if(direction == 2) {
			item.css(styles.bottom);
		}else if(direction == 3) {
			item.css(styles.left);
		}
		item.animate(styles.center);
	}else{
		if(direction == 0) {
			item.animate(styles.top);
		}else if(direction == 1) {
			item.animate(styles.right);
		}else if(direction == 2) {
			item.animate(styles.bottom);
		}else if(direction == 3) {
			item.animate(styles.left);
		}
	}
});

CSS(Less): 

.item {
  float: left;
  position: relative;
  margin-right: 13px;
  margin-bottom: 13px;
  width: 290px;
  height: 160px;
  overflow: hidden;
  img {
    width: 290px;
    height: 160px;
  }
  .mask {
    position: absolute;
    top: 160px;
    left: 0;
    width: 290px;
    height: 160px;
    background: #C2001D;
    text-align: center;
    color: #fff;
    font-size: 18px;
    line-height: 160px;
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mossbaoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值