图片/图形

鼠标滑过鼠标点击圆形图片扩散jQuery特效

阿里云


这是一款 jQuery 和 css3 鼠标滑过、鼠标离开、鼠标点击圆形图片的图片特效插件。在 a 元素上使用:hover 伪元素来制作鼠标滑过、鼠标点击等效果是一个网站最常使用的方法。但是有一个非常头疼的问题,如果引入了 border-radius 属性,某些区域在鼠标滑过时将不可见,特别是设置 border-radius 为 50%的时候(圆形)。这个插件就是为解决这类问题而制作的。

html 结构:

  1. <a href="#" id="circle" class="ec-circle">
  2.     <h3>Hovered</h3>
  3. </a>
也想出现在这里?联系我们
创客主机

CSS 部分

将它做成圆形图片,样式如下:

  1. .ec-circle{
  2.     width: 420px;
  3.     height: 420px;
  4.     -webkit-border-radius: 210px;
  5.     -moz-border-radius: 210px;
  6.     border-radius: 50%;
  7.     text-align: center;
  8.     overflow: hidden;
  9.     font-family:'Kelly Slab', Georgia, serif;
  10.     background: #dda994 url(../images/1.jpg) no-repeat center center;
  11.     box-shadow: 
  12.         inset 0 0 1px 230px rgba(0,0,0,0.6),
  13.         inset 0 0 0 7px #d5ad94;
  14.     transition: box-shadow 400ms ease-in-out;
  15.     display: block;
  16.     outline: none;
  17. }

现在定义一个鼠标滑过样式,但是这里不适用:hover 伪元素。这里使用 jQuery 来切换鼠标滑过的样式。

  1. .ec-circle-hover{
  2.     box-shadow: 
  3.         inset 0 0 0 0 rgba(0,0,0,0.6),
  4.         inset 0 0 0 20px #c18167,
  5.         0 0 10px rgba(0,0,0,0.3);
  6. }

如果浏览器不支持 javascript,我们定义还是使用伪元素,这个 class 可以在 noscript.css 中找到:

  1. .ec-circle:hover{
  2.     box-shadow: 
  3.         inset 0 0 0 0 rgba(0,0,0,0.6),
  4.         inset 0 0 0 20px #c18167,
  5.         0 0 10px rgba(0,0,0,0.3);
  6. }

JAVASCRIPT

我们将使插件中的所有事件仅仅应用于圆形图片上:

  1. $.CircleEventManager            = function( options, element ) {
  2.     this.$el            = $( element );
  3.     this._init( options ); 
  4. };
  5. $.CircleEventManager.defaults   = {
  6.     onMouseEnter    : function() { return false },
  7.     onMouseLeave    : function() { return false },
  8.     onClick         : function() { return false }
  9. };
  10. $.CircleEventManager.prototype  = {
  11.     _init               : function( options ) {  
  12.         this.options        = $.extend( true, {}, $.CircleEventManager.defaults, options ); 
  13.         // set the default cursor on the element
  14.         this.$el.css( 'cursor', 'default' );
  15.  
  16.         this._initEvents();      
  17.     },
  18.     _initEvents         : function() { 
  19.         var _self   = this;      
  20.         this.$el.on({
  21.             'mouseenter.circlemouse'    : function( event ) {             
  22.                 var el  = $(event.target),               
  23.                           circleWidth   = el.outerWidth( true ),
  24.                           circleHeight  = el.outerHeight( true ),
  25.                           circleLeft    = el.offset().left,
  26.                           circleTop     = el.offset().top,
  27.                           circlePos     = {
  28.                               x     : circleLeft + circleWidth / 2,
  29.                               y     : circleTop + circleHeight / 2,
  30.                               radius: circleWidth / 2
  31.                           };               
  32.                 // save cursor type
  33.                 var cursor  = 'default';               
  34.                 if( _self.$el.css('cursor') === 'pointer' || _self.$el.is('a') )
  35.                     cursor = 'pointer';
  36.  
  37.                 el.data( 'cursor', cursor );                
  38.                 el.on( 'mousemove.circlemouse', function( event ) {
  39.                     var distance    = Math.sqrt( Math.pow( event.pageX - circlePos.x, 2 ) + Math.pow( event.pageY - circlePos.y, 2 ) );    
  40.                     if( !Modernizr.borderradius ) {                   
  41.                         // inside element / circle
  42.                         el.css( 'cursor', el.data('cursor') ).data( 'inside', true );
  43.                         _self.options.onMouseEnter( _self.$el );                    
  44.                     }
  45.                     else {                  
  46.                         if( distance <= circlePos.radius && !el.data('inside') ) {                           
  47.                             // inside element / circle
  48.                             el.css( 'cursor', el.data('cursor') ).data( 'inside', true );
  49.                             _self.options.onMouseEnter( _self.$el );                            
  50.                         }
  51.                         else if( distance > circlePos.radius && el.data('inside') ) {
  52.  
  53.                             // inside element / outside circle
  54.                             el.css( 'cursor', 'default' ).data( 'inside', false );
  55.                             _self.options.onMouseLeave( _self.$el );                        
  56.                         }
  57.                     }
  58.                 });   
  59.             },
  60.             'mouseleave.circlemouse'    : function( event ) {
  61.  
  62.                 var el  = $(event.target);
  63.  
  64.                 el.off('mousemove');
  65.  
  66.                 if( el.data( 'inside' ) ) {
  67.  
  68.                     el.data( 'inside', false );
  69.                     _self.options.onMouseLeave( _self.$el );
  70.                 } 
  71.             },
  72.             'click.circlemouse'         : function( event ) {  
  73.                 // allow the click only when inside the circle
  74.                 var el  = $(event.target);
  75.                 if( !el.data( 'inside' ) )
  76.                     return false;
  77.                 else
  78.                     _self.options.onClick( _self.$el ); 
  79.             }
  80.         });   
  81.     },
  82.     destroy             : function() {  
  83.         this.$el.unbind('.circlemouse').removeData('inside').removeData('cursor');
  84.     }
  85. };

当鼠标进入正方形的图片区域,我们为元素绑定“mousemove”事件,这样我们就能跟踪鼠标离圆心的距离,如果这个距离大于圆形的半径,我们就知道鼠标还没有滑过圆形图片,如下图:

当检测到距离小于圆形的半径,我们为其绑定“mouseenter”事件。

调用插件:

  1. $('#circle').circlemouse({
  2.     onMouseEnter    : function( el ) {
  3.         el.addClass('ec-circle-hover');
  4.     },
  5.     onMouseLeave    : function( el ) {  
  6.         el.removeClass('ec-circle-hover');   
  7.     },
  8.     onClick         : function( el ) {     
  9.         alert('clicked');      
  10.     }
  11. });

鼠标滑过鼠标点击圆形图片扩散 jQuery 特效

已有 552 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!