Если вы прокрутите прокрутку вверх до вершины экрана,

У меня есть div, который при первой загрузке моей страницы составляет около 100 пикселей сверху (для этой страницы есть несколько кнопок и т.д.).

Когда пользователь прокручивается мимо него, я хотел бы, чтобы div "следил" за пользователем, когда он прикрепляется к верхней части экрана. Когда пользователь вернется в начало страницы, я хочу вернуть его в исходное положение.

Visualization - xxxxx is the div:

Default (page load)          User vertically scrolled well past it
---------                    ---------
|       |                    |xxxxxxx| < after div reaches top of screen when
|xxxxxxx|                    |       |   page is scrolled vertically, it stays
|       |                    |       |   there
---------                    ---------

Ответ 1

Фокус в том, что вы должны установить его как позицию: исправлено, но только после прокрутки пользователя.

Это делается с помощью чего-то вроде этого, прикрепляя обработчик к событию window.scroll

   // Cache selectors outside callback for performance. 
   var $window = $(window),
       $stickyEl = $('#the-sticky-div'),
       elTop = $stickyEl.offset().top;

   $window.scroll(function() {
        $stickyEl.toggleClass('sticky', $window.scrollTop() > elTop);
    });

Это просто добавляет класс sticky CSS, когда страница прокручивается мимо него и удаляет класс при его резервном копировании.

И класс CSS выглядит так:

  #the-sticky-div.sticky {
     position: fixed;
     top: 0;
  }

EDIT - измененный код для кэширования объектов jQuery, быстрее.

Ответ 2

Трюк, чтобы заставить бесконечный ответ работать без мерцания, - это установить проверку прокрутки на другой div, а затем тот, который вы хотите исправлять.

Полученный из кода viixii.com использует, я использовал это:

function sticky_relocate() {
    var window_top = $(window).scrollTop();
    var div_top = $('#sticky-anchor').offset().top;
    if (window_top > div_top)
        $('#sticky-element').addClass('sticky');
    else
        $('#sticky-element').removeClass('sticky');
}

$(function() {
    $(window).scroll(sticky_relocate);
    sticky_relocate();
});

Таким образом, функция вызывается только после достижения липкой привязки и, следовательно, не будет удалять и добавлять класс ".sticky" для каждого события прокрутки.

Теперь он добавляет липкий класс, когда липкий якорь достигает вершины и удаляет его, как только липкий якорь возвращается в поле зрения.

Просто поместите пустой div с классом, действующим как якорь над элементом, который вы хотите исправлять.

Так же:

<div id="sticky-anchor"></div>
<div id="sticky-element">Your sticky content</div>

Все кредиты для кода отправляются viixii.com

Ответ 3

Вы должны попробовать плагин jQuery для путевых точек.

http://imakewebthings.com/waypoints/shortcuts/sticky-elements/

Я думаю, что он делает именно то, что вы хотите, и без мерцания. Из памяти, однако, я не думаю, что это сработало хорошо в Mobile Safari (YMMV).

Хорошим примером этого было недавно в New York Times:

http://www.nytimes.com/interactive/2010/11/13/weekinreview/deficits-graphic.html

График на странице не прокручивается в верхней части страницы.

Ответ 4

Сегодня был предыдущий вопрос (нет ответов), который дал хороший пример этого функциональность. Вы можете проверить соответствующий исходный код для специфики (поиск "панели инструментов" ), но в основном они используют комбинацию решения webdestroya и немного JavaScript:

  • Загрузка страницы и элемент - позиция: статическая
  • В режиме прокрутки позиция измеряется, и если элемент находится в позиции: статический, и он отключен от страницы, тогда элемент перевернут в положение: зафиксировано.

Я бы рекомендовал проверить вышеупомянутый исходный код, потому что они обрабатывают некоторые "gotchas", о которых вы не можете сразу подумать, например, при настройке положения прокрутки при нажатии на якорные ссылки.

Ответ 5

Я создал для этого плагин jQuery. Хотелось бы получить некоторые отзывы, поскольку это мой первый. https://github.com/dubroe/sticky-div

Ответ 6

Используйте position:fixed; и установите top:0;left:0;right:0;height:100px;, и вы должны иметь его "придерживаться" в верхней части страницы.

<div style="position:fixed;top:0;left:0;right:0;height:100px;">Some buttons</div>