setInterval и clearInterval jquery - стекопоток в IE7 - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть код jquery, который постоянно перемещается вверх и вниз по div, содержащему список с логотипами. Анимация повторяется в течение заданного интервала и, похоже, все работает должным образом в Chrome, FireFox и IE 9 и 8 (без ошибок консоли).

Однако в IE7 я получаю «ошибку сценария», и браузер полностью зависает ... Я думаю, что setInterval и clearInterval не работают должным образом, или я испортил свой код ...

Вот оно:

//<!------------------LOGOS ------------------>

// the automatic scroll start immediately
$(document).ready(function () { membersLogos() });

// set the interval after which to restart the animated scroll
$(function () {

  var intervalID;
  var resetTimer = function () {
    if (intervalID) { clearInterval(intervalID) };
    intervalID = setInterval(function () {
        membersLogos();
    }, 190000);
  };

});

// set the interval after which to restart the animated scroll

function membersLogos() {
  var pane = $('#mypane');

  if ($('#mypane').length) {
    pane.jScrollPane({
        animateScroll: true, //added
        animateDuration: 95000, //added - length each way in milliseconds
        stickToTop: true,
        //autoReinitialise: true,
        enableKeyboardNavigation: true
    });

    var api = pane.data('jsp');
    var logosHeight = parseInt($('#mypane .jspPane').height());

    //listen to the x-axis scrolling event
    pane.bind('jsp-scroll-y', function (event, pos_y, at_top, at_bottom) {
        //we're at the bottom now lets scroll back to the top
        if (at_bottom) {
            api.scrollToY(0);
            $(this).unbind(event); //added with edit
            $(this).bind('jsp-scroll-y', function (event, pos_y, at_top, at_bottom) {
                if (at_top) {
                    $(this).unbind(event);
                    api.scrollToY(logosHeight);
                }

            });

        }

    });

    //initial animate scroll to the top
    api.scrollToY(logosHeight);
  }
}

Есть идеи или предложения, что не так? Заранее спасибо! Vik

1 Ответ

1 голос
/ 01 декабря 2011

Поскольку вы установили свой интервал на точно сумму двух анимаций (190000 = 95000 * 2), я не удивлюсь, если функция интервала снова будет запущена до завершения анимациивозможно, заставляя что-то наступать на что-то еще.Это легко проверить: просто установите интервал в 300000 или что-то в этом роде и посмотрите, исчезнет ли проблема.

Чтобы избежать возможности возобновления интервала слишком рано, вместо использования setInterval (что почти всегдабольше проблем, чем стоит), я бы посмотрел, если jScrollPane предложит вам обратный вызов завершения после завершения анимации.Если это так, используйте этот обратный вызов завершения для запуска следующей анимации.Если этого не произойдет, я, вероятно, посмотрю, чтобы добавить его.

...