jQuery判断鼠标划入图片方向显示遮罩层特效
XML/HTML Code
- <div class="mkeContentBox">
- <!--效果html开始-->
- <ul id="container" class="clearfix">
- <li> <img class="img" src="images/huodong1.png">
- <p style="left: 0px; top: 152px;"> <span>如果有来生,我要做一棵树,站成永恒,没有悲欢的姿势。</span> <a target="_blank" href="#" style="left: 50%; top: 152px;"></a> <i></i> </p>
- </li>
- <li> <img class="img" src="images/huodong2.png">
- <p style="left: -232px; top: 0px;"> <span>一半在土里安详,一半在风里飞扬,一半洒落阴凉,一半沐浴阳光。</span> <a target="_blank" href="#" style="left: -232px; top: 20px;"></a> <i></i> </p>
- </li>
- <li> <img class="img" src="images/huodong3.png">
- <p style="left: 0px; top: 152px;"> <span>非常沉默非常骄傲,从不依靠从不寻找。</span> <a target="_blank" href="#" style="left: 50%; top: 20px;"></a> <i></i> </p>
- </li>
- <li> <img class="img" src="images/huodong4.png">
- <p style="left: 232px; top: 0px;"> <span>如果有来生,有没有人爱,我也要努力做一个可爱的人。</span> <a target="_blank" href="#" style="left: 232px; top: 20px;"></a> <i></i> </p>
- </li>
- <li> <img class="img" src="images/huodong5.png">
- <p style="left: 232px; top: 0px;"> <span>不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。</span> <a target="_blank" href="#" style="left: 232px; top: 20px;"></a> <i></i> </p>
- </li>
- <li> <img class="img" src="images/huodong6.png">
- <p style="left: 0px; top: 0px;"> <span>如果有来生——三毛</span> <a target="_blank" href="#" style="left: 50%; top: 20px;"></a> <i></i> </p>
- </li>
- </ul>
- <img src="images/a2.jpg" class="explain">
- <script>
- $("#container li").each(function(){
- $(this).on('mouseenter',function(e){
- var ee=e||window.event;
- var angle=direct(e,this)
- mouseEvent(angle,this,'in')
- })
- $(this).on('mouseleave',function(e){
- var ee=e||window.event;
- var angle=direct(e,this)
- mouseEvent(angle,this,'off')
- })
- })
- function direct(e,o){
- var w=o.offsetWidth;
- var h=o.offsetHeight;
- var top= o.offsetTop; //包含滚动条滚动的部分
- var left= o.offsetLeft;
- var scrollTOP=document.body.scrollTop||document.documentElement.scrollTop;
- var scrollLeft=document.body.scrollLeft||document.documentElement.scrollLeft;
- var offTop=top- scrollTOP;
- var offLeft= left- scrollLeft;
- //console.log(offTop+";"+offLeft)
- // e.pageX|| e.clientX;
- //pageX 是从页面0 0 点开始 clientX是当前可视区域0 0开始 即当有滚动条时clientX 小于 pageX
- //ie678不识别pageX
- //PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同) 页面上的位置=可视区域位置+页面滚动条切去高度-自身border高度
- var ex= (e.pageX-scrollLeft)|| e.clientX;
- var ey=(e.pageY-scrollTOP)|| e.clientY;
- var x=(ex-offLeft-w/2)*(w>h?(h/w):1);
- var y=(ey-offTop-h/2)*(h>w?(w/h):1);
- var angle=(Math.round((Math.atan2(y,x)*(180/Math.PI)+180)/90)+3)%4 //atan2返回的是弧度 atan2(y,x)
- var directName=["上","右","下","左"];
- return directName[angle]; //返回方向 0 1 2 3对应 上 右 下 左
- }
- function mouseEvent(angle,o,d){ //方向 元素 鼠标进入/离开
- var w=o.offsetWidth;
- var h=o.offsetHeight;
- if(d=='in'){
- switch(angle){
- case '上':
- $(o).find("p").css({left:0,top:-h+"px"}).stop(true).animate({left:0,top:0},300)
- setTimeout(function(){
- $(o).find("p a").css({left:'50%',top:-h+"px"}).stop(true).animate({left:'50%',top:'20px'},300)
- },200)
- break;
- case '右':
- $(o).find("p").css({left:w+"px",top:0}).stop(true).animate({left:0,top:0},300)
- setTimeout(function(){
- $(o).find("p a").css({left:w+"px",top:'20px'}).stop(true).animate({left:'50%',top:'20px'},300)
- },200)
- break;
- case '下':
- $(o).find("p").css({left:0,top:h+"px"}).stop(true).animate({left:0,top:0},300)
- setTimeout(function(){
- $(o).find("p a").css({left:'50%',top:h+"px"}).stop(true).animate({left:'50%',top:'20px'},300)
- },200)
- break;
- case '左':
- $(o).find("p").css({left:-w+"px",top:0}).stop(true).animate({left:0,top:0},300)
- setTimeout(function(){
- $(o).find("p a").css({left:-w+"px",top:'20px'}).stop(true).animate({left:'50%',top:'20px'},300)
- },200)
- break;
- }
- }else if(d=='off'){
- switch(angle){
- case '上':
- $(o).find("p a").stop(true).animate({left:'50%',top:-h+"px"},300)
- setTimeout(function(){
- $(o).find("p").stop(true).animate({left:0,top:-h+"px"},300)
- },200)
- break;
- case '右':
- $(o).find("p a").stop(true).animate({left:w+"px",top:'20px'},300)
- setTimeout(function(){
- $(o).find("p").stop(true).animate({left:w+"px",top:0},300)
- },200)
- break;
- case '下':
- $(o).find("p a").stop(true).animate({left:'50%',top:h+"px"},300)
- setTimeout(function(){
- $(o).find("p").stop(true).animate({left:0,top:h+"px"},300)
- },200)
- break;
- case '左':
- $(o).find("p a").stop(true).animate({left:-w+"px",top:'20px'},300)
- setTimeout(function(){
- $(o).find("p").stop(true).animate({left:-w+"px",top:0},300)
- },200)
- break;
- }
- }
- }
- </script>
- <!--效果html结束-->
- </div>
原文地址:http://www.freejs.net/article_jquerytupiantexiao_687.html