2016-10-14 6 views
0

Я использую значение JQuery scrollTop(), чтобы изменить элемент непрозрачности на странице свиткаJQuery scrollTop() точность при быстрой прокрутке страницы (во избежание потери пикселей)

$(document).on('scroll', function(){ 
    if($(document).scrollTop() >= 1){ 
     $('#elem').css({'opacity': ($(document).scrollTop() * 0.02)}); 
    } 
}); 

он работает нормально, но проблема в том, что если Я быстро прокручиваю страницу, «пропускает» много пикселей, что приводит к уродливому эффекту, потому что возвращенные пиксели, например,

0 
30 
50 
80 
90 
... 

и не

0 
1 
2 
3 
4 

как, когда я медленно прокручивать ...

Кроме того, еще раз, когда я была такая же проблема, где мне нужно гладкие значения, но это поведение «пиксель перескакивание» осложнена вещи ...

Как я могу это решить?

+1

К сожалению, это невозможно. По соображениям производительности значение считывается каждый раз, когда пользовательский интерфейс обновляется, а не при каждом прокрутке каждого пикселя. Это означает, что пиксели будут пропускаться между обновлениями. Вы ничего не можете с этим поделать. Чтобы исправить это, вы можете использовать CSS 'переход' по значению' opacity', чтобы сделать настройку более плавной –

+0

О, это звучит плохо ... :(На данный момент я не знаю, что делать – neoDev

ответ

2

Если вы хотите, чтобы все было плавным, вы должны добавить переход CSS к элементу. Так что даже если прокрутка скачком от 0 до 500, переход останется плавным.

#elem { 
    -webkit-transition: opacity 0.5s ease; 
    -moz-transition: opacity 0.5s ease; 
    transition: opacity 0.5s ease; 
} 

Попытка добиться плавных значений пикселей в jQuery сама по себе не сработает.

+0

Спасибо, как @Rory уже Я мог бы использовать css-переходы для «маскарада» потери пикселей, но даже если это может быть нормально для моего реального проекта, это не нормально в других ситуациях, например, перемещение элемента – neoDev

+1

@neoDev вы можете получить гладкое гладкое позиционирование, если вы используете оба transform + transition css. – Jesse

+0

Да, я знаю, но когда-нибудь мне обязательно понадобится использовать это без какого-либо перехода. – neoDev