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); } } } }