Итак, у меня есть div, который я пытаюсь сохранить на 100 пикселей с верхней части страницы между точками страницы во время прокрутки. На данный момент мой код работает-ish, но div не поддерживается ровно на 100 пикселей сверху, вместо этого изменяется от 0px до 200px
вот что я использую atm:
$(window).scroll(function(){
var tpxl = $(window).scrollTop();
if( tpxl<100) {
$('#div').css('top',-Math.abs(tpxl)+100 + 'px');
}
else if(tpxl>700) {
$('#div').css('top',-Math.abs(tpxl)+800 + 'px');
}
});
Вам не нужен Math.abs()
потому что tpxl
всегда будет положительным числом. Чтобы установить позицию div равным 100px из текущей вершины окна, используйте $(window).scrollTop() + 100 + 'px'
.
Я действительно не понимаю, почему у вас есть структура if
/else if
. Следующие будут держать div фиксированным на 100px все время:
$(window).scroll(function () {
$('#div').css('top', $(window).scrollTop() + 100 + 'px');
}).scroll();
Демо: http://jsfiddle.net/G5BVU/
Чтобы установить положение "фиксировано", когда точка прокрутки меньше 100 или более 700, как для вашего исходного кода, попробуйте следующее:
$(window).scroll(function () {
var tpxl = $(window).scrollTop();
if (tpxl < 100 || tpxl > 700) {
$('#div').css('top', tpxl + 100 + 'px');
}
}).scroll();
Демо: http://jsfiddle.net/G5BVU/1/
РЕДАКТИРОВАТЬ. Чтобы прокрутка элемента была нормальной, за исключением случаев, когда окно прокручивается между этими двумя точками, просто отмените условие if
из моего предыдущего примера:
if (tpxl > 100 && tpxl < 700)
$('#div').css('top', tpxl + 100 + 'px');
Во всех случаях при необходимости устанавливайте начальную top
настройку.
tpxl
или использовать-Math.abs(tpxl)
.