Подтвердить что ты не робот

Каков самый простой способ jQuery иметь "позицию: фиксированный" (всегда сверху) div?

Я относительно новичок в jQuery, но до сих пор я видел, что мне нравится. Я хочу, чтобы div (или любой элемент) находился в верхней части страницы, как будто "положение: исправлено" работало в каждом браузере.

Я не хочу ничего сложного. Мне не нужны гигантские хаки CSS. Я бы предпочел, если просто использовать jQuery (версия 1.2.6) достаточно хорошо, но если мне нужно jQuery-UI-core, то это тоже хорошо.

Я пробовал $( "# topBar" ). scrollFollow(); < - но это идет медленно... Я хочу, чтобы что-то появилось действительно исправлено.

4b9b3361

Ответ 1

С помощью этого HTML:

<div id="myElement" style="position: absolute">This stays at the top</div>

Это javascript, который вы хотите использовать. Он прикрепляет событие к прокрутке окна и перемещает элемент до тех пор, пока вы прокручиваете.

$(window).scroll(function() {
    $('#myElement').css('top', $(this).scrollTop() + "px");
});

Как указано в комментариях ниже, не рекомендуется присоединять события к событию прокрутки - по мере прокрутки пользователя он запускает LOT и может вызвать проблемы с производительностью. Подумайте об использовании его с плагином Ben Alman debounce/throttle, чтобы уменьшить накладные расходы.

Ответ 2

Для тех браузеров, которые поддерживают "позицию: исправлено", вы можете просто использовать javascript (jQuery), чтобы изменить положение "фиксировано" при прокрутке. Это устраняет прыжок при прокрутке с помощью решений $(window).scroll(function()), перечисленных здесь.

Бен Надель демонстрирует это в своем учебнике: Создание элемента с фиксированной позицией с помощью jQuery

Ответ 3

Красивая! Ваше решение было 99%... вместо "this.scrollY", я использовал "$(window).scrollTop()". Еще лучше, что для этого решения требуется только библиотека jQuery1.2.6 (дополнительные библиотеки не нужны).

Причина, по которой мне нужна эта версия, в частности, заключается в том, что в настоящее время поставляется с MVC.

Здесь код:

$(document).ready(function() {
    $("#topBar").css("position", "absolute");
});

$(window).scroll(function() {
    $("#topBar").css("top", $(window).scrollTop() + "px");
});

Ответ 4

Подход HTML/CSS

Если вы ищете вариант, который не требует много JavaScript (и все проблемы, возникающие с ним, например быстрые вызовы вызовов прокрутки), можно добиться такого же поведения, добавив обертку <div> и несколько стилей. Я заметил гораздо более плавную прокрутку (без каких-либо элементов), когда я использовал следующий подход:

JS Fiddle

HTML

<div id="wrapper">
  <div id="fixed">
    [Fixed Content]
  </div><!-- /fixed -->
  <div id="scroller">
    [Scrolling Content]
  </div><!-- /scroller -->
</div><!-- /wrapper -->

CSS

#wrapper { position: relative; }
#fixed { position: fixed; top: 0; right: 0; }
#scroller { height: 100px; overflow: auto; }

JS

//Compensate for the scrollbar (otherwise #fixed will be positioned over it).
$(function() {
  //Determine the difference in widths between
  //the wrapper and the scroller. This value is
  //the width of the scroll bar (if any).
  var offset = $('#wrapper').width() - $('#scroller').get(0).clientWidth;

  //Set the right offset
  $('#fixed').css('right', offset + 'px');​
});

Конечно, этот подход может быть изменен для областей прокрутки, которые получают/теряют контент во время выполнения (что приведет к добавлению/удалению полос прокрутки).

Ответ 5

Для тех, кто все еще ищет легкое решение в IE 6. Я создал плагин, который обрабатывает позицию IE 6: исправлена ​​проблема и очень проста в использовании: http://www.fixedie.com/

Я написал его в попытке воспроизвести простоту belatedpng, где необходимы только необходимые изменения, добавив script и вызывая его.

Ответ 6

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