The essence of the problem line:

$('.previewblock').animate({ left: "-=200" }, 300); 

or

 $('.previewblock').animate({ left: "+=200" },300); 

It works several times bypassing the condition:

 if (leftint > diff) 

or

  if (leftint < 0) 

It only checks the first time more precisely, and then performs the animation Nth number of times (how many wheels were turned) Code:

 // провСряСм Π½Π°Π²ΠΎΠ΄ΠΊΡƒ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ $('.previewblock').mouseenter(function () { hoverpreview = true; }); $('.previewblock').mouseleave(function () { hoverpreview = false; }); //ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΡ‹ΡˆΠΊΠΈ function addHandler(object, event, handler) { if (object.addEventListener) { object.addEventListener(event, handler, false); } else if (object.attachEvent) { object.attachEvent('on' + event, handler); } else alert("error"); } addHandler(window, 'DOMMouseScroll', wheel); addHandler(window, 'mousewheel', wheel); addHandler(document, 'mousewheel', wheel); //РСализация скрола function wheel(event) { var delta; event = event || window.event; if (event.wheelDelta) { delta = event.wheelDelta / 120; if (window.opera) delta = -delta; } else if (event.detail) { delta = -event.detail / 3; } if (event.preventDefault) event.preventDefault(); event.returnValue = false; //провСряСм, Π½Π°Π²Π΅Π΄Π΅Π½Π° Π»ΠΈ ΠΌΡ‹ΡˆΠΊΠ° if (hoverpreview == true) { //Ссли скролим Π²Π½ΠΈΠ· if (delta < 0) { //Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, ΠΌΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сдвига. var leftstr = $('.previewblock').css("left"); leftstr = leftstr.substring(0, leftstr.length - 2); var leftint = parseInt(leftstr); var previewint = $('.previewblock').width(); var sliderint = $('.viewport').width(); var diff = sliderint - previewint; //Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сдвиг Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π½ΠΎΡ€ΠΌΡ‹ if (leftint > diff) { //Π°Π½ΠΈΠΌΠΈΡ€ΡƒΠ΅ΠΌ сдвиг $('.previewblock').animate({ left: "-=200" }, 300); } } // Ссли ΠΊΡ€ΡƒΡ‚ΠΈΠΌ Π²Π½ΠΈΠ· else { var leftstr = $('.previewblock').css("left"); leftstr = leftstr.substring(0, leftstr.length - 2); var leftint = parseInt(leftstr); if (leftint < 0) { $('.previewblock').animate({ left: "+=200" },300); } } } } 
  • when doing a relative animation, put in front of it .finish () - zb '

1 answer 1

@Shadower , for starters:

 $('.previewblock').finish().animate(/* ... */); 

And it would not be bad to make an example on jsfiddle.net , but you have to guess what and how it is with you.