1 // 非原创,来自demo:http://yuanoook.com/file?hash=579d738296490b2f9375ee15c547cd07
2 // http://www.w3cfuns.com
3 // http://cdn.res.w3cfuns.com/js/common/global.js
4 5 $(function(){ 6 $('[hover-slideout]').each(function(){ 7 $(this).hover(function(e){ 8 $(this).find('[smelly-cat]').css(induction_position($(this), e)).stop(true, true).animate({"left":0, "top":0}, 200); 9 },function(e){ 10 $(this).find('[smelly-cat]').stop(true, true).animate(induction_position($(this), e), 200); 11 }); 12 }); 13 14 //鼠标进入方向 15 function induction_position(elem, e){ 16 var w = elem.width(), h = elem.height(), direction=0, obj={}; 17 /** 计算x和y得到一个角到elem的中心,得到相对于x和y值到div的中心 **/ 18 var x = (e.pageX - elem.offset().left - (w / 2)) * (w > h ? (h / w) : 1); 19 var y = (e.pageY - elem.offset().top - (h / 2)) * (h > w ? (w / h) : 1); 20 21 /** 鼠标从哪里来 / 角度 和 方向出去顺时针(得出的结果是TRBL 0 1 2 3) **/ 22 /** 23 * 首先计算点的角度, 24 * 再加上180度摆脱负值 25 * 90初,一得到的象限(象限,又称象限角,意思就是一个圆之四分之一等份) 26 * 加上3,做一个模(求模 求余数)4的象限转移到一个适当的顺时针 得出 TRBL 0 1 2 3(上/右/下/左) 27 */ 28 direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; 29 30 switch(direction) 31 { 32 case 0://from top 33 obj.left = 0; 34 obj.top = "-100%"; 35 break; 36 case 1://from right 37 obj.left = "100%"; 38 obj.top = 0; 39 break; 40 case 2://from bottom 41 obj.left = 0; 42 obj.top = "100%"; 43 break; 44 case 3://from left 45 obj.left = "-100%"; 46 obj.top = 0; 47 break; 48 } 49 return obj; 50 } 51 });