jquery остановить вращение изображения при наведении курсора, запустить при наведении мыши - PullRequest
1 голос
/ 23 апреля 2010

Я построил вращатель jQuery для поворота на 3 деления и зацикливания их. Я хотел бы добавить функциональность при наведении курсора мыши, чтобы «заморозить» текущий элемент 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 ]

1 голос
/ 23 апреля 2010

Если вы добавите этот код:

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();, тогда вы можете вызывать stopRotation и startRotation, когда мышь наводит курсор на элемент или покидает его:

$('your-element-selector').hover(stopRotation, startRotation);
0 голосов
/ 24 апреля 2010

немного изменил ситуацию, вот как я это сделал. `

 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);
    };
};
0 голосов
/ 23 апреля 2010

Непонятно, что вы пытаетесь сделать с тремя div, не видя HTML и больше кода, поэтому я думаю, что базовый пример может помочь вам лучше ( 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();
 });

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...