Пример работы на JSFIDDLE
Подключаемые файлы
Подключаем библиотеку "jQuery" и плагин "liFixar":
Структура HTML
Для работы плагина не требуется никакого дополнительного кода. liFixar работает уже с имеющимися элементами
Допустим у вас есть меню вида:
Инициализация плагина
Вешаем на имеющееся меню наш плагин
И все готово!
Параметры
Option | Default value | Datatype | Description |
---|---|---|---|
side | "top" | String | Указывает на сторону экрана, к которой будет прилипать блок. Может принимать значения: "top", "bottom", "all" |
position | 0 | Number | Задает расстояние от элемента до края экрана, при котором элемент остановится и зафиксируется. Может принимать значения: любое целое число |
wrapper | false | jQuery object | Задает элемент в пределах которого будет происходить фиксация блока Может принимать значения: $('element'), $('.elementClass'), $('#elementName') |
Методы
setPosition:
top: 200px bottom:200px
$('.selector').liFixar('setPosition','200px')
top: 200px bottom:100px
$('.selector').liFixar('setPosition','200px 100px')
getPosition
Вернет два значения: top bottom
$('.selector').liFixar('getPosition')
update
Обновит позиционирование блоков (незаменимо в случае с блоками, высота которых может меняться)
$('.selector').liFixar('update')
disable
Отключает работу плагина
$('.selector').liFixar('disable')
enable
Включает работу плагина
$('.selector').liFixar('enable')
Быстрый старт
Для подключения плагина liFixar выполните следующие действия:
1. В основной папке вашего сайта создайте такие папки:
- "js"
- "css"
2. Скопируйте в папку "js" файлы:
- jquery-1.9.1.min.js
- jquery.liFixar.js
3. Скопируйте в папку "css" файл:
- liFixar.css
4. В код страницы добавьте следующее содержимое:
Готово!
BugFix
18.11.2014 - Добавлены методы "disable" и "enable"
07.11.2014 - Добавлена фиксация в пределах родительского блока
27.01.2014 - Исправлены баги под IE
06.07.2013 №4 - Исправлено поведение фиксированных элементов при изменении ширины экрана
06.07.2013 №3 - Добавлены callback функции fix и unfix
06.07.2013 №2 - Добавлена поддержка фиксации сразу и сверху и снизу
06.07.2013 №1 - Добавлена поддержка фиксации резиновых элементов
31.01.2012 - Плагин обновлен до версии 2.0
Теперь фиксировать можно и абсолютно позиционированные элементы
Комментарии
$(window).bind('resize', function() {
$('.anyClass').css('width','100%');
});
Вы не обратили внимание на то, что плагин может фиксировать блоки любой ширины.
Ваша функция - это частный случай, и её в полной мере может заменить CSS: .anyClass {width:100%}
Осталось одна проблема касательно фиксации к bottom: если до изменения размера, была полоса прокрутки, а после - её нет, то блок всё равно остаётся прификсирован к bottom, хотя уже видно то, что должно быть после него.
menuW = menu.outerWidth(),
учитывает паддинги и бордеры, а затем на их величину увеличивает ширину .anyClass при присвоении:
menu.css({width:menuW})
Предлагаю рассмотреть фикс этой ситуации:
menuW = menu.css('width ') || menu.outerWidth(),
Идея в том, что если задана ширина через CSS - то надо брать её. Так как после активации, CSS добавит все border и padding уже к inline-стилю.
Все ваши пожелания были учтены в новой версии. Качайте и фиксируйтесь :)
Подключить плагин, и повесить его на нужный элемент
Это так задумано или баг?
так задумано
1) Если вы зададите отступ программно методом setPosition
2) Если у вас несколько элементов и каждый фиксирован по своему, а вам нужно узнать значение отступа выбранного элемента
Т.е. Position: fixed; top: 200px;
После прокрутки длительностью в 200px top начинает уменьшаться до нужного значения.
Вопрос не понял
Приведите остальные стили этого блока.
Вот на вскидку блок по центру http://jsfiddle.net/yurik417/qnTJZ/75/
но возможно у вас другая ситуация.
Обнаружился баг (или фича? ;)
Блок в файрфоксе и хроме фиксируется относительно верхней части окна на заданное в настройках расстояние, а в IE иначе. Фиксация производится на том же месте где блок изначально располагался на странице. Т.е. был на расстоянии от верха 200px, то и будет на расстоянии 200px.
Как это побороть?
Иллюстрация: http://mebelexpress.ru/proto/
Это 100% баг. Он исправлен.
Скачайте заново архив
Спасибо.
Подскажите пожалуйста как убрать мигание.
Когда верхнее меню доходит до того момента когда должно зафиксироваться , фиксируется, затем проходит размер своей высоты и как будто обновляется - мигает один раз, дальше всё нормально. Что делать?
1. По первому вопросу:
Используйте функции:
"fix" и "unfix"
В документации есть описание их использования
Например:
$('.menuTop').liFixar({
fix: function(el, side){
el.addClass('el Fixed')
},
unfix: function(el, side){
el.removeClass( 'elFixed')
}
});
и CSS:
.elFixed {box-radius:50px}
2. По поводу мигания:
Нужно смотреть на конкретный пример, кидайте ссылку
Прикрутите так как можете, выложите в интернет и киньте сюда ссылку, я уверен - проблема на поверхности и решить ее можно за пару секунд.
Вам случайно не этот плагин нужен
/index.php/k2/item/37-liscrolltotop
Вам случайно не этот плагин нужен
/index.php/k2/item/37-liscrolltotop
Если нет то кидайте ссылку на сайт
Скрипт не работает. в консоле пишет
Uncaught TypeError: undefined is not a function
Помоги пожалуйста! очень хочу меню!
вот фото
http://i67.fastpic.ru/big/2014/0911/6b/a2e8874fa66a270c0585608fb6f4bd6b.png
Это известная проблема на WordPress
Попробуйте так:
jQuery(document).ready(function ($) {
$(window).load(function(){
$('.fixBlock'). liFixar({
side: 'top',
position: 10
});
});
});
Спасибо большое тебе за такую работу!!!!!!!!! !!!)))))))
Как вы уже сделали?
$(window).load(function(){
$('.fixBlock').liFixar({
side: 'top',
position: 20
});
})
на вертикальном меню ,
помогите сделать чтобы был отступ снизу , чтобы меню не опускалось ниже определенного !
Скачайте заново архив, там добавлен пример
что не так ?
Популярное
Главная
Поиск
Регистрация
Карта сайта
О сайте
Главная
Поиск
Регистрация
Карта сайта
Класс "wrapFix" нужно присвоить элементу в пределах высоты которого должен двигаться фиксированный блок. Фиксированный блок не обязательно должен быть вложенный в блок с классом "wrapFix".
Скорее всего вам нужно присвоить класс "wrapFix" элементу который является родителем и для левого и для правого сайдбара.
Или выложите страницу в интернет и я сам смогу просмотреть где вы ошиблись
http://rghost.ru/58964811
Спасибо за то что помогаете !
Отправил вам на почту измененный архив
Можно ли как-то отключать действие плагина?
Скачайте заново архив. В новой версии скрипта есть метод "disable"
Благодарю за оперативность!
Очень помогли!
Что конкретно ломается?
Желательно видеть ваш код. Вы могли два раза подключить скрипт, или два раза его инициализироват ь, какие-то стили могут наследоваться и т.д.
Точнее - нужен код
Код добавил один раз, в футер. вот такой:
$(window).load(function(){
$('#dsplypsts-11').liFixar({
side: 'top',
position: 10,
wrapper:$('#main')
});
})
ссылка на пример с ошибкой:
http://linktmp.com/4/thggOP
http://linktmp.com/3/u5u63QE
Вы забыли подключить файл со стилями
ТОЧНО! Все заработало! Спасибо большое.
Просто в статье не написано было, что и стили нужны, только скрипт сказано подключить и все. ) Еще раз спасибо!
Здравствуйте снова!
Опять возникла проблема со скриптом, можете подсказать решение?
TypeError: $(...).liFixar is not a function
n.event.dispatch() jquery.min.js:3
n.event.add/r.handle() jquery.min.js:3
Что это может означать?
Можно ссылку?
Да. конечно. Вот например:
http://jamadvice.com.ua/appetitnye-zapechennye-tefteli/
Проверил в FF44 и Hrome 48
Все работает нормально: блок справа фиксируется и не выдает ошибки.
В каком браузере у вас проблема?
НО! Главное, что работает. Это меня успокаивает :) Значит проблема с моим браузером.
Проверьте в другом браузере
Все в порядке, работает! Проблема была с браузером. Спасибо вам за помощь и за плагин!
Но у меня снова появились вопросы к вам по его работе.
скажите, каким образом можно сделать ассинхронную загрузку скрипта? просто добавление async в строку приводит скрипт в нерабочее состояние. Хочу или убрать его в футер или грузить ассинхронно, но не могу найти способ. Поможете?
Используйте "defer" вместо "async"
скрипт перестает работать.
Простите заранее, если слишком многого прошу :)
Если вы переносите jQuery в конец документа то и инициализацию тоже перенесите.
Читайте в описании "Быстрый старт":
/index.php/k2/item/48-lifixar#quick_start
RSS лента комментариев этой записи