jquery在鼠标悬停时停止图像旋转,从mouseout / hover开始

时间:2010-04-22 22:23:36

标签: javascript jquery animation

我已经构建了一个jQuery旋转器来旋转3个div并循环它们。我想在鼠标悬停上添加功能以“冻结”当前div,然后在鼠标输出时再次启动。

我已经考虑过在函数开始时将变量设置为false,并且当它在当前帧上时将其设置为true但是我让自己有点困惑。

我也试过使用悬停功能,但在使用输入和输出处理程序时,我很困惑如何停止,重新启动动画。

  function ImageRotate() {
 var CurrentFeature = "#container" + featureNumber;

 $(CurrentFeature).stop(false, true).delay(4500).animate({'top' : '330px'}, 3000);


 var featureNumber2 = featureNumber+1;
 if ( featureNumber == numberOfFeatures) {featureNumber2 = 1}
 var NewFeature = "#container" + featureNumber2;
 $(NewFeature).stop(false, true).delay(4500).animate({'top' : '0px'}, 3000); 

 var featureNumber3 = featureNumber-1;
 if ( featureNumber == 1) {featureNumber3 = numberOfFeatures};
 var OldFeature = "#container" + featureNumber3;
 $(OldFeature).stop(false, true).delay(4500).css('top' , '-330px'); 

 setTimeout('if (featureNumber == numberOfFeatures){featureNumber = 1} else {featureNumber++}; ImageRotate2()', 7500)};

任何帮助将不胜感激!! 谢谢,马特

3 个答案:

答案 0 :(得分:1)

如果您要添加此代码:

var timerId = null;
function startRotation() {
    if (timerId) {
        return;
    }
    timerId = setInterval('if (featureNumber == numberOfFeatures){featureNumber = 1} else {featureNumber++}; ImageRotate2()', 7500);
}
function stopRotation() {
    if (!timerId) {
        return;
    }
    clearInterval(timerId);
    timerId = null;
}

并通过简单调用startRotation();替换代码块的最后一行,然后当鼠标悬停在您的元素上时,您可以调用stopRotationstartRotation

$('your-element-selector').hover(stopRotation, startRotation);

答案 1 :(得分:0)

目前还不清楚你在没有看到HTML和更多代码的情况下尝试使用这三个div,所以我认为一个基本的例子可能会对你有所帮助(demo)。

HTML

<div class="test">image: <span></span></div>

脚本

$(document).ready(function(){

 var indx = 0, loop, numberOfFeatures = 5;

 function imageRotate(){
  indx++;
  if (indx > numberOfFeatures) { indx = 1; }
  $('.test span').text(indx);
  loop = setTimeout( imageRotate , 1000 );
 }
 imageRotate();

 $('.test').hover(function(){
  clearTimeout(loop);
 }, function(){
  imageRotate();
 });

})

答案 2 :(得分:0)

稍微改变了一下,这就是我最终如何做到这一点。 `

 var animRun = false;
var rotateHover = false;

function startRotation() {

            rotateHover = false;
            ImageRotate();
        }

    function stopRotation() {
        rotateHover = true;
        clearTimeout();
    }

    function ImageRotate() {

    if (rotateHover == false){
    animRun = true;

    var CurrentFeature = "#container" + featureNumber;

    $(CurrentFeature).stop(false, true).animate({'top' : '330px'}, featureDuration, function(){animRun = false;});

    var featureNumber2 = featureNumber+1;
    if ( featureNumber == numberOfFeatures) {featureNumber2 = 1}
    var NewFeature = "#container" + featureNumber2;
    $(NewFeature).stop(false, true).animate({'top' : '0px'}, featureDuration); /* rotate slide 2 into main frame */

    var featureNumber3 = featureNumber-1;
    if ( featureNumber == 1) {featureNumber3 = numberOfFeatures};
    var OldFeature = "#container" + featureNumber3;
    $(OldFeature).stop(false, true).css('top' , '-330px'); /*bring slide 3 to the top*/

    //startRotation();

    setTimeout('if (featureNumber == numberOfFeatures){featureNumber = 1} else {featureNumber++}; if (rotateHover == false){ImageRotate2()};', featureDelay);
    };
};
相关问题