大连仟亿科技
客服中心
  • 电话
  • 电话咨询:0411-39943997
  • 手机
  • 手机咨询:15840979770
    手机咨询:13889672791
网络营销 >更多
您现在的位置:仟亿科技 > 新闻中心 > 常见问题

网页应用jQuery开辟的圆形页面元素悬浮和点击触发教程

作者:billionnet 发布于:2012/2/22 18:05:57 点击量:

 


在线演示


对于一个元素应用一个:hover伪类的体式格式是一个典范办法来实现一个页面元素的悬浮结果。然则题目是应用border-radius来实现的悬浮并不是很是幻想的体式格式来对一个圆形元素实现悬浮事务处理惩罚,因为你无法针对真正的可视圆形区域处理惩罚悬浮事务,而只能针对对应的外边框矩形区域实现悬浮。希罕是当你设置border-radius为50%的时辰。


今天我们这里将分享一个解决体式格式来针对圆形来实现悬浮结果。我们将开辟一个插件来处理惩罚真正的圆形区域对应的‘mouseenter’,‘mou搜刮引擎优化ut’和‘click’事务而不是对应的矩形区域。


起首我们须要创建一个圆形。如下:



 

Hovered



以下为对应的样式表:


.ec-circle{
 width: 420px;
 height: 420px;
 -webkit-border-radius: 210px;
 -moz-border-radius: 210px;
 border-radius: 50%;
 text-align: center;
 overflow: hidden;
 font-family:""Kelly Slab"", Georgia, serif;
 background: #dda994 url(../images/1.jpg) no-repeat center center;
 box-shadow:
  inset 0 0 1px 230px rgba(0,0,0,0.6),
  inset 0 0 0 7px #d5ad94;
 transition: box-shadow 400ms ease-in-out;
 display: block;
 outline: none;
}

接下来我们为悬浮结果定义一个class,但不是应用一个动态的伪class :hover。首要的设法是当我们进入圆形区域的时辰应用jQuery履行这个class:


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

只有当javascript被禁用的时辰,我们才应用伪类体式格式。如下:


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

JavaScript



¥.CircleEventManager    = function( options, element ) {
 this.¥el   = ¥( element );
 this._init( options );
};


¥.CircleEventManager.defaults  = {
 onMouseEnter : function() { return false },
 onMouseLeave : function() { return false },
 onClick   : function() { return false }
};


¥.CircleEventManager.prototype  = {
 _init     : function( options ) {
  this.options   = ¥.extend( true, {}, ¥.CircleEventManager.defaults, options );
  // set the default cursor on the element
  this.¥el.css( ""cursor"", ""default"" );
  this._initEvents();
 },
 _initEvents   : function() {
  var _self = this;
  this.¥el.on({
   ""mouseenter.circlemouse"" : function( event ) {
    var el = ¥(event.target),
        circleWidth = el.outerWidth( true ),
        circleHeight = el.outerHeight( true ),
        circleLeft = el.offset().left,
        circleTop  = el.offset().top,
        circlePos  = {
         x  : circleLeft + circleWidth / 2,
         y  : circleTop + circleHeight / 2,
         radius: circleWidth / 2
        };
    // save cursor type
    var cursor = ""default"";
    if( _self.¥el.css(""cursor"") === ""pointer"" || _self.¥el.is(""a"") )
     cursor = ""pointer"";
    el.data( ""cursor"", cursor );
    el.on( ""mousemove.circlemouse"", function( event ) {
     var distance = Math.sqrt( Math.pow( event.pageX - circlePos.x, 2 ) + Math.pow( event.pageY - circlePos.y, 2 ) );
     if( !Modernizr.borderradius ) {


      // inside element / circle
      el.css( ""cursor"", el.data(""cursor"") ).data( ""inside"", true );
      _self.options.onMouseEnter( _self.¥el );


     }
     else {
      if( distance <= circlePos.radius && !el.data(""inside"") ) {
       // inside element / circle
       el.css( ""cursor"", el.data(""cursor"") ).data( ""inside"", true );
       _self.options.onMouseEnter( _self.¥el );


      }
      else if( distance > circlePos.radius && el.data(""inside"") ) {
       // inside element / outside circle
       el.css( ""cursor"", ""default"" ).data( ""inside"", false );
       _self.options.onMouseLeave( _self.¥el );
      }
     }
    }); 
   },
   ""mouseleave.circlemouse"" : function( event ) {
    var el  = ¥(event.target);
    el.off(""mousemove"");
    if( el.data( ""inside"" ) ) {
     el.data( ""inside"", false );
     _self.options.onMouseLeave( _self.¥el );
    }
   },
   ""click.circlemouse""   : function( event ) {
    // allow the click only when inside the circle
    var el  = ¥(event.target);
    if( !el.data( ""inside"" ) )
     return false;
    else
     _self.options.onClick( _self.¥el );
   }
  });
 },
 destroy    : function() {
  this.¥el.unbind("".circlemouse"").removeData(""inside"").removeData(""cursor"");
 }
};


当我们的鼠标进入圆形区域对应的外部矩形边框后,我们将绑定mousemove办法到对应元素。然后我们策画鼠标离元素中间的间隔。若是间隔大于圆形半径,那么我们就知道不须要悬浮,不然,就触发自定义的‘mouseenter’事务。



同时若是出于圆内我们也可以容许触发鼠标的点击事务。


在我们的例子中我们可以针对任何元素履行我们的插件。在这个实例中,我们添加hover的class到‘mouseenter’并且在‘mouseleave’中删除掉。


¥(""#circle"").circlemouse({
 onMouseEnter : function( el ) {
  el.addClass(""ec-circle-hover"");
 },
 onMouseLeave : function( el ) {
  el.removeClass(""ec-circle-hover"");
 },
 onClick   : function( el ) {
  alert(""clicked"");
 }
});

记住正常的伪类悬浮体式格式也须要定义到noscript.css中,如许若是javascript被禁用后,依然可以实现悬浮,固然不如JS实现的完美。


via:tympanus

 


分享到:


评论加载中...
内容:
评论者: 验证码:
  

Copyright@ 2011-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号   google网站地图   百度网站地图   网站地图

公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563

法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明