今天我們來學習如何通過CSS3的特性和jQuery來創建一個感知鼠標滑動方向的hover效果。當鼠標滑進的時候,遮罩層會從上次鼠標滑出的方向滑入,當鼠標滑出的時候,遮罩層會跟隨鼠標,從鼠標滑出的方向滑出。這是一個十分有趣的效果。
我們使用無序列表來組織縮略圖和描述遮罩層:
<ul id="da-thumbs" class="da-thumbs"> <li> <a > <img src="http://www.gimoo.net/t/1901/images/7.jpg" /> <div><span>Natalie & Justin Cleaning by Justin Younger</span></div> </a> </li> <li> < ... --> </li> < ... --> </ul>
這些列表項將會向左浮動,并且相對定位,因為我們絕對定位描述遮罩層:
.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%; }
接下來我們將這樣做:根據鼠標進入的位置,我們將“from”樣式應用給遮罩層,它設置了遮罩層的初始位置。然后我們將使用過渡并將添加最終狀態的樣式。這樣遮罩層就滑入了。當我們離開元素時,我們再次應用“from”樣式給遮罩層(盡管現在實際上是滑出)并去除之前的最終狀態樣式。
嗯,以下就是這個小插件的核心:
this.$el.on( 'mouseenter.hoverdir, mouseleave.hoverdir', function( event ) { var $el = $( this ), $hoverElem = $el.find( 'div' ), direction = self._getDir( $el, { x : event.pageX, y : event.pageY } ), styleCSS = self._getStyle( direction ); if( event.type === 'mouseenter' ) { $hoverElem.hide().css( styleCSS.from ); clearTimeout( self.tmhover ); self.tmhover = setTimeout( function() { $hoverElem.show( 0, function() { var $el = $( this ); if( self.support ) { $el.css( 'transition', self.transitionProp ); } self._applyAnimation( $el, styleCSS.to, self.options.speed ); } ); }, self.options.hoverDelay ); } else { if( self.support ) { $hoverElem.css( 'transition', self.transitionProp ); } clearTimeout( self.tmhover ); self._applyAnimation( $hoverElem, styleCSS.from, self.options.speed ); } } );
我們主要是給列表項綁定‘mouseenter'和‘mouseleave'事件,通過_getDir函數我們獲得鼠標滑進或滑出的方向(想象檢測區域是個被分成四個三角形的矩形)。
你將會看到,在第二個demo中,我們添加了延遲,這樣當鼠標從一個角落移到另一個角落的時候不會發生太多的動畫。
我希望你可以喜歡這個小特效并覺得很有用!
如果瀏覽器不支持CSS過渡將會使用jQuery動畫。
原地址和插件下載
以上所述是小編給大家介紹的基于CSS3和jQuery實現跟隨鼠標方位的Hover特效,希望對大家有所幫助!