マウスカーソルの出入りの方向で表示、動きを変えるアニメーションです。
カーソルの入る方向で色が変わり、出た方向に動きます。
今回はCSSで色をつけていますが、backgroundに画像を指定する方法でも可能です。
アイコンなどのマウスオーバーに変化をつけることができると思います。
▼以下が実際のソースサンプルです。
$( function() {
var Enter = function( e ) {
var Hover = e.type === 'mouseenter',
$box = $( this ),
$overlay = $( '#overlay', $box ),
overlayW = $overlay.width(),
mouseX = e.clientX - ($box.offset().left + overlayW / 2),
mouseY = e.clientY - ($box.offset().top + overlayW / 2),
degrees = Math.atan2( mouseY, mouseX ) * 180 / Math.PI,
style = {};
if ( degrees > -135 && degrees <= -45 ) {
style.top = -overlayW;
style.left = 0;
$overlay.css('background-color','red')
} else if ( degrees > -45 && degrees <= 45 ) {
style.top = 0;
style.left = overlayW;
$overlay.css('background-color','blue')
} else if ( degrees > 45 && degrees <= 135 ) {
style.top = overlayW;
style.left = 0;
$overlay.css('background-color','green')
} else {
style.top = 0;
style.left = -overlayW;
$overlay.css('background-color','yellow')
}
$overlay
.show()
.css( {
top: Hover ? style.top : 0,
left: Hover ? style.left : 0,
} )
.stop( true )
.animate( {
top: Hover ? 0 : style.top,
left: Hover ? 0 : style.left
}, "slow");
};
var Leave = function( e ) {
var Hover = e.type === 'mouseenter',
$box = $( this ),
$overlay = $( '#overlay', $box ),
overlayW = $overlay.width(),
mouseX = e.clientX - ($box.offset().left + overlayW / 2),
mouseY = e.clientY - ($box.offset().top + overlayW / 2),
degrees = Math.atan2( mouseY, mouseX ) * 180 / Math.PI,
style = {};
if ( degrees > -135 && degrees <= -45 ) {
style.top = -overlayW;
style.left = 0;
} else if ( degrees > -45 && degrees <= 45 ) {
style.top = 0;
style.left = overlayW;
} else if ( degrees > 45 && degrees <= 135 ) {
style.top = overlayW;
style.left = 0;
} else {
style.top = 0;
style.left = -overlayW;
}
$overlay
.animate( {
top: - Hover ? 0 : style.top,
left: - Hover ? 0 : style.left
}, "slow");
};
$( '#box' )
.on('mouseenter', Enter )
.on('mouseleave', Leave );
});
図形の中心を基準にして角度で方向を指定しているので、長方形の場合は計算が必要です。
▼CSS
#main {
width:100%;
position: absolute;
}
#box {
margin:200px auto;
position: relative;
width: 200px;
height: 200px;
overflow: hidden;
background: #333;
}
#overlay {
position: absolute;
top: 200px;
width: 200px;
height: 200px;
}
▼HTML
<div id="main">
<div id="box">
<div id="overlay"></div>
</div>
</div>
今回、参考にさせていただいたのは、
『[JS] カーソル進入位置に合わせて変わるアニメーション – nbnote blog』さんです。
ありがとうございます。
