Каков самый простой способ jQuery иметь div 'position: fixed' (всегда вверху)?

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

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

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

Я только что попробовал scrollFollow, и, похоже, он отлично работает. Не сразу, как говорит Тимоти, но если вы счастливы, что он скользит вверх и вниз по странице, это прекрасно!

Paul 13.01.2010 16:04
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
37
1
114 308
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Используя этот HTML:

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

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

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

Как указано в комментариях ниже, не рекомендуется присоединять события к событию прокрутки - по мере того, как пользователь прокручивает, оно запускается ОЧЕНЬ много и может вызвать проблемы с производительностью. Рассмотрите возможность использования его с плагином Бена Алмана дребезг / дроссель, чтобы уменьшить накладные расходы.

Спасибо. Это мне очень помогло!

Matt Williamson 28.09.2010 06:43

Не рекомендуется прикреплять событие непосредственно к событию прокрутки. См. Автора jQuery: stackoverflow.com/questions/257250/…

neves 21.01.2011 07:16

@Mathias, да, а кеширование $('#myElement') было бы еще быстрее.

nickf 04.03.2011 15:35

Возможно, стоит кэшировать $(window) и $('#myElement'), потому что вы повторно используете их каждый раз, когда срабатывает событие прокрутки. var $window = $(window), $elem = $('#myElement'); $window.scroll(function() { $elem.css('top', $window.scrollTop() + 'px'); });

Mathias Bynens 07.03.2011 15:24

@nickf фейспалм Я по какой-то причине пропустил это. Это даже важнее, чем кеширование $(window)! Спасибо, комментарий отредактирован.

Mathias Bynens 07.03.2011 15:26

Как бы вы добавили ценность пикселю? В настоящее время #myElement наполовину скрыт вверху области просмотра. Спасибо. Отредактировано: Неважно. Его проблема с CSS в исходном CSS. Сбросьте CSS и отлично: $ window.scroll (function () {$ elem.css ({'top': $ window.scrollTop () + 'px', 'margin': 0});});

swan 31.07.2011 11:12

Красивый! Ваше решение было 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");
});

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

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

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

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

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

Не работает правильно с элементом, у которого «верх» не равен 0: если я установил для левого края «верх» 50 пикселей, этот скрипт установит его на 0.

avdd 15.10.2010 04:51

@avdd, как вы можете видеть на странице fixedie.com/demo/demo.html, поддерживает множество свойств CSS, а top: 0 вообще не требуется. Если у вас возникли проблемы, свяжитесь со мной, а если вы обнаружите ошибки, сообщите об этом по адресу: github.com/lark/FixedIE/issues

tbranyen 15.10.2010 16:44

Можно ли будет получить плагин? Теперь это 403 запрещено.

Paolo 06.02.2012 19:29

Нет, я отказался от этого. Два года - это большой срок, и IE 6 больше не входит в мои планы.

tbranyen 09.02.2012 10:50

Подход 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');​
});

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

Другие вопросы по теме