setInterval et clearInterval de - stackoverflow dans IE7
-
26-10-2019 - |
Question
J'ai un code jquery qui se déplace vers le haut et vers le bas en continu un div contenant une liste avec des logos. L'animation se répète dans un intervalle de consigne et est tout semble fonctionner comme prévu dans Chrome, FireFox et IE 9 et 8 (pas d'erreur de la console).
Cependant, dans IE7 j'obtenir « erreur de script » et le navigateur se bloque totalement ... Je pense que le setInterval et clearInterval ne fonctionnent pas correctement ou j'ai foiré mon code ...
Ici, il est:
//<!------------------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);
}
}
Toutes les idées ou suggestions que ce qui est faux? Merci d'avance! Vik
La solution
Puisque vous avez défini votre intervalle exactement la somme des deux animations (190000 = 95000 * 2), je ne serais pas surpris si la fonction d'intervalle était tiré à nouveau avant que l'animation terminé, ce qui peut-être quelque chose à pas sur autre chose. Il est facile de vérifier. Il suffit de régler votre intervalle ou quelque chose et 300000 voir si le problème disparaît
Pour éviter la possibilité d'avoir le feu intervalle encore trop tôt, plutôt que d'utiliser setInterval
(ce qui est presque toujours plus de mal que ça vaut le coup), je vois si jScrollPane
vous offre un de rappel d'achèvement lorsque l'animation est terminée. Dans le cas contraire, utilisez-le rappel d'achèvement pour déclencher l'animation suivante. Si elle ne le fait pas, je chercherais probablement ajouter.