Bonjour, j'ai ce JQuery qui déplace un div à gauche et à droite lorsque survolé les boutons gauche et droit, mais j'ai besoin qu'il s'arrête lorsque la position de l'image est à 0px;
Mon code actuel – https://jsfiddle.net/38da9pca/2/
$(function() { $('#right').on('mouseenter', rscroll); $('#left').on('mouseenter', lscroll); $('#right, #left').on('mouseleave', function() { $('#bg').stop(); }); function rscroll() { $('#bg').animate({ left: '-=25' }, 10, rscroll); } function lscroll() { $('#bg').animate({ left: '+=25' }, 10, lscroll); } });
Cependant, je ne peux pas sembler suivre la position #bg
laissée. J'ai fatigué .position().left
.offset().left
et .offset().left
et les deux donnent un résultat statique lorsque console.log();
Au lieu de changer radicalement pendant le défilement.
Vous devez essentiellement vérifier si l'élément touche déjà ses limites
25
pixels En outre, vous devez cacher vos objets jQuery pour une meilleure performance, comme je l'ai fait ici.
( Demo )
$(function() { var bg = $('#bg'), left, maxLeft, maxRight; $('#right').on('mouseenter', rscroll); $('#left').on('mouseenter', lscroll); $('#right, #left').on('mouseleave', function() { bg.stop(); }); function rscroll() { maxRight = (bg.width() - $(window).width()) * -1; left = bg.position().left; if(left > maxRight) { bg.animate({ left: '-=' + (left + 25 > maxRight ? 25 : left) }, 10, rscroll); } } function lscroll() { maxLeft = bg.width() - $(window).width(); left = bg.position().left; if(left < 0) { bg.animate({ left: '+=' + (maxLeft - left > 25 ? 25 : left) }, 10, lscroll); } } });
Essayez ceci: https://jsfiddle.net/38da9pca/4/
Cela fonctionne en disant seulement animé s'il n'a pas parcouru plus loin que sa largeur – largeur intérieure de la fenêtre
Et pour la gauche si elle ne s'est pas déroulée après 0.
$(function () { var bg = $('#bg'); $('#right').on('mouseenter', rscroll); $('#left').on('mouseenter', lscroll); $('#right, #left').on('mouseleave', function () { bg.stop(); }); function rscroll() { if (bg.position().left * -1 > bg.width() - $(window).innerWidth()) { bg.stop(); return; } bg.animate({ left: '-=25' }, 10, rscroll); } function lscroll() { if (bg.position().left > 0) { bg.stop(); return; } bg.animate({ left: '+=25' }, 10, lscroll); } });