Как я могу вызвать clearInterval вне функции в jQuery? Вне setInterval

    function iPadMovie(id) {
    $(function () {
        var i = 1;
        var interval = setInterval(function () {
            jQuery('.animationMax img').attr({
                src: 'http://jdsports.scene7.com/is/image/JDSports/127932jd' + ('0' + i).slice(-2) + '?hei=255&wid=427&resmode=sharp&op_usm=1.1,0.5,0,0&defaultImage=JDSports/sizeImageMissing'
            });
            i++;
            if (i === 28) i = 1;
        }, 100);
    });
}

function playIpad(){
    iPadMovie();
}


function stopIpad(){
    clearInterval = interval;
}

Вы можете увидеть скрипку здесь: http://jsfiddle.net/Vv2u3/15/ Я хочу иметь возможность остановить фильм и перезапустить его, если они нажмут кнопку воспроизведения. Конечно, я могу использовать clearInterval вне метода?


person TheBlackBenzKid    schedule 23.12.2013    source источник
comment
Попробуйте вызвать функцию, а не перезаписывать ее ;-)   -  person John Dvorak    schedule 23.12.2013
comment
@JanDvorak, можешь показать пример?   -  person TheBlackBenzKid    schedule 23.12.2013
comment
Ваша переменная interval связана с анонимной функцией, переданной обработчику готовности DOM jQuery, поэтому она не будет видна в функции stopIpad(). После того, как вы это исправили, это просто: clearInterval(interval), а не clearInterval = interval.   -  person Anthony Grist    schedule 23.12.2013
comment
определить переменную интервала на внешнем уровне (глобальный???)   -  person A. Wolff    schedule 23.12.2013


Ответы (2)


Вот пример ссылка.

var interval;

function iPadMovie(id) {
    $(function () {
        var i = 1;
        interval = setInterval(function () {
            jQuery('.animationMax img').attr({
                src: 'http://jdsports.scene7.com/is/image/JDSports/127932jd' + ('0' + i).slice(-2) + '?hei=255&wid=427&resmode=sharp&op_usm=1.1,0.5,0,0&defaultImage=JDSports/sizeImageMissing'
            });
            i++;
            if (i === 28) i = 1;
        }, 100);
    });
}

function playIpad(){
    iPadMovie();
}

Немного пояснений здесь. Прежде всего, ваша интервальная переменная (которая является фактическим обработчиком возвращаемой функции обратного вызова setInterval) не видна за пределами функции iPadMovie(), поэтому интервальная переменная должна быть объявлена ​​вне этой функции. Во-вторых, вы должны вызвать функцию clearInterval(handler) внутри функции stopIpad(). Дополнительную информацию можно найти здесь.

function stopIpad(){
    clearInterval(interval);
}
person Khamidulla    schedule 23.12.2013

clearInterval — это функция. Вы должны вызвать его, передав ему интервал, который вы хотите очистить, в качестве единственного аргумента:

function stopIpad(){
    clearIntervar(interval);
}

Эта часть почти верна, interval — это переменная, в которой вы помните дескриптор интервала, который хотите очистить:

var interval = setInterval(...);

Однако переменную interval необходимо объявить вне функции iPadMovie, чтобы она была видна функции stopIpad. Переместите оператор var наружу.

Кроме того, что произойдет, если кнопку воспроизведения нажать дважды? Вы можете остановить текущий интервал, прежде чем установить новый:

var interval;
function iPadMovie(){
    clearInterval(interval);
    interval = setInterval(...);
}

В качестве примечания, есть ли причина, по которой iPadMovie ждет готовности документа? Я ожидаю, что это будет вызвано только после этого момента. В этом случае вы можете удалить оболочку $(function(){...}).

person John Dvorak    schedule 23.12.2013