Jquery scrollTop анімація - javascript, jquery

У мене є анімація, яку потрібно запустити один разscrollTop () потрапляє на певну позицію на сторінці. Ця частина працює чудово, але те, що я хочу, - це щоб анімація поверталася назад, коли я прокручую назад сторінку, повертаючи елемент у вихідне положення.

http://cdpn.io/dphBx

Код у моєму прикладі працює нормально, а JSідентичний веб-сайту, над яким я працюю локально, але в Chrome цей елемент не повертається до його початкового положення, коли ви прокручуєте сторінку назад. JQuery - це єдиний Javascript, на який я посилаюся, тому немає конфліктів, і в CSS немає нічого такого, що це також повинно було б запобігти. Я все ще досить зелений, коли мова йде про JQuery, тож потерпіть мене. Я думаю, що, можливо, твердження if / else хіба не найкращий спосіб досягти цього? Будь-які думки?

Відповіді:

1 для відповіді № 1

Це працює для мене, використовуючи Chrome 31 на Mac. Однак, ви повинні спробувати наступні модифікації для підвищення продуктивності:

  1. Використовуйте .stop(true, true) перед тим, як прив'язати анімацію, щоб переконатися, що анімація закінчується.
  2. Вимкніть або зніміть подію зміни розміру, щоб вона не запускалася занадто часто, економлячи кількість обчислень, необхідних для виконання, і запобігає швидкому переключенню між двома кінцевими станами анімації занадто часто.
  3. Отримайте позицію прокрутки за допомогою $(window).scrollTop() замість на тілі.

Я вирішив використовувати плагін jQuery throttle + debounce, доступний тут: http://cdnjs.cloudflare.com/ajax/libs/jquery-throttle-debounce/1.1/jquery.ba-throttle-debounce.min.js

$(document).ready(function(){
$(window).scroll($.throttle(100, function(){
var position = $("window").scrollTop();
if(position >= 200){
$("#foo").stop(true,true).animate({left: "200px"}, "fast");
} else{
$("#foo").stop(true,true).animate({left: 0}, "fast");
}
}));
});