0

我试图弄清楚 .stop() 和 clearQueue() 是如何工作的。这是我在 jsfiddle 中的示例代码:http: //jsfiddle.net/PsTQv/1/如果将鼠标悬停 在几个块上,您将看到动画正在排队。为了解决这个问题,我尝试使用 stop() 和 clearQueue.Simple add stop after hide() 或 show() 或两者都不起作用。行为如下:

1. .stop().hide() : text disappears at last;
2. .stop.show(): text is alway there, won't be hidden any more
3. add both: Same as only add to show()
4. add .clearQueue().stop() in the beginning: text disappears at last, like .stop().hide()

我想了解clearQueue和stop之间的区别来解释上面的行为。另外我想弄清楚在这个例子中如何实现不排队的动画,即悬停在块上并且文本显示在幻灯片效果中.

谢谢

4

3 回答 3

0

您需要在幻灯片动画完成时执行的回调函数中清除动画队列:

$('.block').hover(function(){
    $('section').hide('fast');
    //$('section').stop().show('slide',{direction:'left'},1000);
    $('section').show('slide',{direction:'left'},1000,function(){$(this).clearQueue()});
},function(){});


jsFiddle

于 2013-02-09T06:24:27.480 回答
0
var inAnimation = new Array();

$("div").hover(function(){
    if (!inAnimation[$("div").index(this)] ) {
        $(this).animate({ width: "200px" });
    }
}, function() {
    inAnimation[$("div").index(this)] = true;
    $(this).animate({ width: "100px" }, "normal", "linear", function() {
        inAnimation[$("div").index(this)] = false; 
    })
});
于 2014-01-16T12:48:01.733 回答
0
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>clearQueue demo</title>
  <style>
  div {
    margin: 3px;
    width: 40px;
    height: 40px;
    position: absolute;
    left: 0px;
    top: 30px;
    background: green;
    display: none;
  }
  div.newcolor {
    background: blue;
  }
  </style>
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>

<button id="start">Start</button>
<button id="stop">Stop</button>
<div></div>

<script>
$( "#start" ).click(function() {
  var myDiv = $( "div" );
  myDiv.show( "slow" );
  myDiv.animate({
    left:"+=200"
  }, 5000 );

  myDiv.queue(function() {
    var that = $( this );
    that.addClass( "newcolor" );
    that.dequeue();
  });

  myDiv.animate({
    left:"-=200"
  }, 1500 );
  myDiv.queue(function() {
    var that = $( this );
    that.removeClass( "newcolor" );
    that.dequeue();
  });
  myDiv.slideUp();
});

$( "#stop" ).click(function() {
  var myDiv = $( "div" );
  myDiv.clearQueue();
  myDiv.stop();
});
</script>

</body>
</html>
于 2014-01-16T12:53:07.463 回答