0

我正在浏览,我看到了这个网站

http://www.toybox.co.nz/

我喜欢当我们将鼠标悬停在图像上时发生的动画。由于它仅适用于 chrome,因此我决定对其进行编码。

下面是我的代码

var len,i,hoverindex,flag=0;
  $(function(){
    len = $(".clubsevent").length;
    $(".clubsevent").hoverIntent(function(){
      if(flag==0){
        flag=1;
            hoverindex= $(".clubsevent").index(this);
     $(".clubsevent").eq(hoverindex).css('z-index',2);
     for(i=0;i<len;i++){
      if(i!=hoverindex){
        var rand=Math.random();
        var elemheight =rand*parseInt($(".clubsevent").eq(i).css('height'));
        var elemwidth =rand*parseInt($(".clubsevent").eq(i).css('width'));
        var elemleft = Math.random()*250;
        var elemtop = Math.random()*250;
        var elemopacity = Math.random()*.6;
        $(".clubsevent").eq(i).animate({
          left:elemleft,
          top:elemtop,
          height:elemheight,
          width:elemwidth,
          opacity:elemopacity,
        },250);
      }

     }

      }


    },function(){
         if(flag==1){
           flag=0;
           for(i=0;i<len;i++){
        var elemheight =50;
        var elemwidth =100;
        var elemleft = $(".clubsevent").eq(i).attr('left');
        var elemtop = $(".clubsevent").eq(i).attr('top');
        var elemopacity = 1;
       $(".clubsevent").eq(i).animate({
          left:elemleft,
          top:elemtop,
          height:elemheight,
          width:elemwidth,
          opacity:elemopacity,
       },250);
      }
         }




    });
  })

这是我的 CSS 部分

  .clubsevent{
    height:50px;
    width: 100px;
    opacity:1;
    position: absolute;
  }
  #cepheid{
    top:100px;
    left:100px;
    background: #6600FF;
  }
  #endeavour{
    top:100px;
    left:210px;
    background: #FF0000;
  }
  #electronika{
    top:100px;
    left:320px;
    background: #6600FF;
  }
  #e-cell{
    top:100px;
    left:430px;
    background: #6600FF;
  }
  #infero{
    top:160px;
    left:100px;
    background: #6600FF;
  }
  #informals{
    top:160px;
    left:210px;
    background: #6600FF;
  }
  #kludge{
    top:160px;
    left:320px;
    background: #6600FF;
  }
  #robotics{
    top:160px;
    left:430px;
    background: #6600FF;
  }
  #torque{
    top:220px;
    left:100px;
    background: #6600FF;
  }

这是我的 html 部分

<div class="clubsevent" left="100" top="100" id="cepheid"></div>
<div class="clubsevent" left="210" top="100" id="endeavour"></div>
<div class="clubsevent" left="320" top="100" id="electronika"></div>
<div class="clubsevent" left="430" top="100" id="e-cell"></div>
<div class="clubsevent" left="100" top="160" id="infero"></div>
<div class="clubsevent" left="210" top="160" id="informals"></div>
<div class="clubsevent" left="320" top="160" id="kludge"></div>
<div class="clubsevent" left="430" top="160" id="robotics"></div>
<div class="clubsevent" left="100" top="220" id="torque"></div>

我能够将所有其他图像发送到随机位置。但问题是,有时当我将鼠标悬停在一个元素上时。动画反复发生。我认为这可能是因为其他正在制作动画的元素触发了它。我添加了一个标志,但它没有用。

4

2 回答 2

1
var len,i,hoverindex,flag=0;
$(function(){
len = $(".clubsevent").length;
$(".clubsevent").hoverIntent(function(){
  if(flag==0){
    flag=1;
        hoverindex= $(".clubsevent").index(this);
 $(".clubsevent").eq(hoverindex).css('z-index',2);
 for(i=0;i<len;i++){
  if(i!=hoverindex){
    var rand=Math.random();
    var elemheight =rand*parseInt($(".clubsevent").eq(i).css('height'));
    var elemwidth =rand*parseInt($(".clubsevent").eq(i).css('width'));
    var elemleft = Math.random()*250;
    var elemtop = Math.random()*250;
    var elemopacity = Math.random()*.6;
    $(".clubsevent").eq(i).animate({
      left:elemleft,
      top:elemtop,
      height:elemheight,
      width:elemwidth,
      opacity:elemopacity,
    },250);
  }

 }

  }


},function(){
     if(flag==1){
       flag=0;
       for(i=0;i<len;i++){
    var elemheight =50;
    var elemwidth =100;
    var elemleft = $(".clubsevent").eq(i).attr('left');
    var elemtop = $(".clubsevent").eq(i).attr('top');
    var elemopacity = 1;
   $(".clubsevent").eq(i).stop().animate({
      left:elemleft,
      top:elemtop,
      height:elemheight,
      width:elemwidth,
      opacity:elemopacity,
   },250);
  }
     }




});
})

我在动画函数之前添加了 .stop():http: //api.jquery.com/stop/

于 2013-08-19T20:49:12.843 回答
0

像这样尝试,在这里参考我的答案,以获取相同类型的问题设置计时器/在 mouseenter 函数中设置超时延迟

 var flag = false;
 $('#ele').hover(function(){
   flag = true;
   var that = $(this);
   window.setTimeout(function(){
      if(flag) that.animate({...}, 500);
   }, 300);
 }, function(){
   flag = false;
 });
于 2013-08-19T20:49:54.080 回答