Измените положение css на фиксированное без сброса положения прокрутки

Как бы вы изменили положение элементов css на фиксированное без сброса текущей позиции прокрутки?

Использование скрипта для изменения позиции:

$('.bigwidth').click(function() { 
     $(this).css('position','fixed');    
})

этот пример: http://jsfiddle.net/7gRZJ
если вы прокрутите элемент, нажмите элемента, он изменит его на фиксированное и сбросит положение прокрутки.

Желаемое поведение — изменить его на фиксированное, сохраняя при этом текущую позицию прокрутки.


person bushdiver    schedule 15.07.2013    source источник


Ответы (3)


Добавление «return false» внутри функции щелчка предотвратит поведение по умолчанию, когда вы возвращаетесь к началу страницы / сбрасываете положение прокрутки.

Обновленный код:

$('.bigwidth').click(function() { 
     $(this).css('position','fixed');
     return false;    
})
person JasonStockman    schedule 15.07.2013
comment
Это гораздо более простое решение, чем любой другой вариант. Это сработало отлично. - person Eric Wiener; 06.03.2017

Поскольку позиционирование элемента меняется на fixed, это означает, что он эффективно удаляется из макета страницы. Это означает, что тело перестанет расширяться по ширине в момент изменения его атрибута position, поэтому оно прыгнет обратно влево. Один из способов решить эту проблему — изменить положение элемента, чтобы имитировать предыдущую позицию прокрутки после изменения его атрибута позиции. Таким образом, ваш сценарий может выглядеть примерно так:

$('.bigwidth').click(function() {
     var scrolled = $(document).scrollLeft();
     $(this).css('position','fixed');
     $(this).css("left", -scrolled);
});

Вот пример работы.

person Serlite    schedule 15.07.2013

Если прокрутка сбрасывается автоматически, вы можете сбросить ее после события клика. Получить фактическое положение прокрутки -> изменить положение на фиксированное и сбросить прокрутку с предыдущей позицией. Для этого используйте метод .scrollTop() --- jquery

person Mollo    schedule 15.07.2013