This is because you are using the parallax scroll library (Stellar.js), which causes different elements to scroll at different speeds.
A possible fix is ββto scroll at a faster speed if no item is in the current viewport until the edge of the next item is removed from the screen, and then immediately scroll to the original scroll speed until the viewport again and continue repeating this until you reach the desired scroll offset.
Edit:
Sorry I came up with my answer and I did not have time to complete the code.
However, after some time working on it, I begin to think that my proposed solution will not work. I was thinking something along these lines:
$(window).scrollTo(640, {onAfter: function () { var scrollRatio = 3; var distance = 855 - 640; $(window).scrollTo(855, { easing: 'linear', duration: distance * scrollRatio / speed, onAfter: function () { var scrollRatio = 1; var distance = 1200 - 855; $(window).scrollTo(1200, { easing: 'linear', duration: distance * scrollRatio / speed, onAfter: function () { var scrollRatio = 3; var distance = 1280 - 1200; $(window).scrollTo(1280, { easing: 'linear', duration: distance * scrollRatio / speed }); } }); } }); }});
If you paste the previous code onto the website indicated in the question ( http://dev.du.st/field-station/ ), you will be taken to the first element and it will try to scroll you to the next using the described method. I hard coded the offset values ββbecause I was still experimenting with it. However, I do not think this approach will work as it still feels. This is because the instantaneous velocity change in the middle of the animation will always be noticeable.
Right now, I think the best way to mitigate the slow scrolling that causes the parallax scrolling is to use a different attenuation function. In the end, making the background image slower is exactly what you use to scroll through parallax.
The following code running on your website will force all animations to use the easeOutCirc function for their default easing function, after some experimentation, I found that this is the one that makes the scroll the least odd:
// Add the jQuery-easing plugin, needed for the more sophisticated easing functions. $.getScript('//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js'); // Set easeOutCirc as the default easing. jQuery.easing.def = 'easeOutCirc';
You can find more facilitating features on this website.
After you finish experimenting, if you decide to use attenuation (you can use different ones to scroll up and down), then you should probably keep the default attenuation as it is, and just change the attenuation in the animation scroll by adding {easing: EASING_NAME} to your hash function in scrollTo function. So your code would look something like this:
$.scrollTo($($(this).attr("href")), { duration: 750, easing: 'easeOutCirc' });