[JS]普通のとはちょっと違う、オーバーレイのスライド方法が面白いホバーエフェクト
Post on:2012年4月26日
sponsorsr
画像を配置したパネルをホバーすると、各アイテムをまたいでオーバーレイのパネルがスライドするエフェクトを紹介します。

Direction-Aware Hover Effect with CSS3 and jQuery
[ad#ad-2]
デモ

デモでは3種類のホバーエフェクトが楽しめます。
[ad#ad-2]

デフォルトのデモで、オーバーレイのパネルがマウスに追従して四方向からスライドします。

タイミングを少し遅らせたデモです。

反対の面からスライドするデモです。
実装
HTML
各パネルは画像のimg要素とオーバーレイのdiv要素が一組になっており、リスト要素で実装します。
<ul id="da-thumbs" class="da-thumbs">
    <li>
        <a href="http://dribbble.com/shots/502538-Natalie-Justin-Cleaning">
            <img src="images/7.jpg" />
            <div><span>Natalie & Justin Cleaning by Justin Younger</span></div>
        </a>
    </li>
    <li>
        <!-- ... -->
    </li>
    <!-- ... -->
</ul>
CSS
まずは、各パネルの外観のスタイルです。各アイテムは「float:left;」で配置し、オーバーレイを「position: absolute;」にするので、画像とアイテムは「position: relative;」にします。
.da-thumbs li {
    float: left;
    margin: 5px;
    background: #fff;
    padding: 8px;
    position: relative;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.da-thumbs li a,
.da-thumbs li a img {
    display: block;
    position: relative;
}
.da-thumbs li a {
    overflow: hidden;
}
.da-thumbs li a div {
    position: absolute;
    background: rgba(75,75,75,0.7);
    width: 100%;
    height: 100%;
}
JavaScriptで加えるアニメーション用のclassを定義します。
.da-thumbs li a div.da-animate {
    -webkit-transition: all 0.3s ease;
    -moz-transition: all 0.3s ease-in-out;
    -o-transition: all 0.3s ease-in-out;
    -ms-transition: all 0.3s ease-in-out;
    transition: all 0.3s ease-in-out;
}
/* Initial state classes: */
.da-slideFromTop {
    left: 0px;
    top: -100%;
}
.da-slideFromBottom {
    left: 0px;
    top: 100%;
}
.da-slideFromLeft {
    top: 0px;
    left: -100%;
}
.da-slideFromRight {
    top: 0px;
    left: 100%;
}
/* Final state classes: */
.da-slideTop {
    top: 0px;
}
.da-slideLeft {
    left: 0px;
}
JavaScript
スクリプトではマウスの侵入する場所によって、オーバーレイの正確なポジションを設定します。
this.$el.on( 'mouseenter.hoverdir, mouseleave.hoverdir', function( event ) {
 
    var $el         = $(this),
        evType      = event.type,
        $hoverElem  = $el.find( 'div' ),
        direction   = _self._getDir( $el, { x : event.pageX, y : event.pageY } ),
        hoverClasses= _self._getClasses( direction );
 
    $hoverElem.removeClass();
 
    if( evType === 'mouseenter' ) {
 
        $hoverElem.hide().addClass( hoverClasses.from );
 
        clearTimeout( _self.tmhover );
 
        _self.tmhover   = setTimeout( function() {
 
            $hoverElem.show( 0, function() {
                $(this).addClass( 'da-animate' ).addClass( hoverClasses.to );
            } );
 
        }, _self.options.hoverDelay );
 
    }
    else {
 
        $hoverElem.addClass( 'da-animate' );
 
        clearTimeout( _self.tmhover );
 
        $hoverElem.addClass( hoverClasses.from );
 
    }
 
} );
sponsors















