Это работает, проверено в jsfiddle :
$(document).ready(function() {
var start = 300;
var duration = 200;
var scrolled;
$('.scrollUp').css('opacity', '0.0');
$(window).scroll(function(){
var opacity = (scrolled - start) / duration;
scrolled = $(window).scrollTop();
if (0 < opacity < 1) {
$('.scrollUp').css('display', 'block').css('opacity', opacity);
} else if (1 < opacity) {
$('.scrollUp').css('display', 'block').css('opacity', '1.0');
} else {
$('.scrollUp').css('display', 'none').css('opacity', '0.0');
}
});
$('.scrollUp').click(function(){
$('html,body').animate({
scrollTop: 0
}, 500);
});
});
Обновление:
И вот рабочий пример с анимацией непрозрачности.
Похоже, этот парень искал то же уравнение.
Лучше использовать математику в такой ситуации:
scrolled = $(window).scrollTop();
height = $('body').height();
height = Math.ceil((scrolled / height) * 100);
height = height / 100;
Второе обновление
Хорошо, вы хотите, чтобы он начал появляться после темно-синей секции. Итак, что вам нужно сделать, это исключить эту часть вершины до градиента. Вы можете сделать это, создав предложение if, которое проверяет, достигло ли значение scrollTop верхней части светло-синего градиента; около 300 пикселей от верхней части документа.
Тогда вместо использования высоты тела в вышеприведенном уравнении используйте общую высоту сечения градиента; около 210px. Это значение заменит высоту var в jQuery выше. Дайте мне знать, если у вас есть проблемы с реализацией этого. Не заметил, что вы комментируете приведенный выше ответ.