Это происходит потому, что вы используете библиотеку прокрутки parallax (Stellar.js), которая заставляет разные элементы прокручиваться с разной скоростью.
Возможное исправление заключается в прокрутке с более высокой скоростью, если ни один элемент не находится в текущем видовом экране, пока край следующего элемента не находится за пределами экрана, а затем немедленно прокрутите исходную скорость прокрутки до тех пор, пока в ней не будет элементов в окне просмотра снова и продолжайте повторять это, пока не достигнете желаемого смещения прокрутки.
Edit:
К сожалению, что-то придумал, когда я писал свой ответ, и у меня не было времени, чтобы закончить код.
Однако, работая над этим в течение некоторого времени, я начинаю думать, что мое предлагаемое решение не сработает. Я что-то вдоль этих линий мышления:
$(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
});
}
});
}
});
}});
Если вставить предыдущий код в веб-сайте, представленной в этом вопросе (http://dev.du.st/field-station/), вы будете приняты на первый элемент, и он будет пытаться прокрутить вас следующий с использованием метода, который я описал. Я жестко закодировал значения смещения, потому что я все еще экспериментировал с ним. Тем не менее, я не думаю, что этот подход будет работать, поскольку он все еще чувствует. Это связано с тем, что изменение мгновенной скорости в середине анимации всегда будет заметным.
Прямо сейчас, я думаю, что лучший способ смягчить медленную прокрутку, вызвавшую прокрутку параллакса, заключается в использовании другой функции ослабления. В конце концов, делая фоновый снимок медленнее, это именно то, что вы используете для прокрутки параллакса.
Следующий код, когда побежал в свой веб-сайт, будет делать все анимации использовать «easeOutCirc» для их ослабления функции по умолчанию, после некоторого экспериментирования, я нашел, что это тот, который делает скроллинг чувствовать себя не менее странным:
// 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';
вы можете найти более функции замедления в this website
После того, как вы закончите экспериментировать, если вы решили на использовании смягчении (вы можете использовать разные для прокрутки вверх и вниз), то вы, вероятно, следует держать по умолчанию, как есть, и просто измените ослабление в анимации прокрутки, добавив {easing: EASING_NAME}
к вашим параметрам хэш в функции scrollTo
. Таким образом, ваш код будет выглядеть примерно так:
$.scrollTo($($(this).attr("href")), {
duration: 750,
easing: 'easeOutCirc'
});
вы можете добавить скрипку с текущим кодом, который у вас есть? – udnisap
jsFIddle: http://jsfiddle.net/hfg2v/ - хотя в учебнике используется jQuery 1.4.1, который jsFiddle не поддерживает. Вот ссылка на мой рабочий пример: http://goo.gl/INbvG –
Рассматривали ли вы анимацию изображений в slidedown(), поскольку они передаются в виде прокрутки, чтобы дать аналогичный эффект? Если они будут перемещаться вниз, изображение будет отображаться так же долго? –