基于CSS3和jQuery实现跟随鼠标方位的Hover特效
今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果。当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑出。这是一个十分有趣的效果。
我们使用无序列表来组织缩略图和描述遮罩层:
<ulid="da-thumbs"class="da-thumbs"> <li> <ahref="http://dribbble.com/shots/502538-Natalie-Justin-Cleaning"> <imgsrc="images/7.jpg"/> <div><span>Natalie&JustinCleaningbyJustinYounger</span></div> </a> </li> <li> <!--...--> </li> <!--...--> </ul>
这些列表项将会向左浮动,并且相对定位,因为我们绝对定位描述遮罩层:
.da-thumbsli{ float:left; margin:5px; background:#fff; padding:8px; position:relative; box-shadow:01px3pxrgba(0,0,0,0.1); } .da-thumbslia, .da-thumbsliaimg{ display:block; position:relative; } .da-thumbslia{ overflow:hidden; } .da-thumbsliadiv{ 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动画。