TL; DR: действительно ли Sticky может реагировать на изменения, которые я даю через JavaScript? Если да, то как?
(В проекте используются Foundation 6.2 и WordPress 4.4, тема установлена с использованием Node.js / npm и gulp 4.0. Подробные мои вопросы выделены жирным шрифтом.)
Я хочу сделать nav
панель липкой с помощью подключаемого модуля Foundation Sticky, но только когда я нажимаю кнопку. Это означает, что когда DOM полностью завершен, nav
панель не должна оставаться «сама по себе», а оставаться в своем верхнем положении в документе. Кроме того, он должен исчезнуть при прокрутке вниз, но остаться при прокрутке вверх.
nav
Бар правильно завернутые во всех необходимых div
х, так что nav
бар может придерживаться. Проблемы возникают с "дополнительной" частью. Моя идея заключалась в том, чтобы сначала создать экземпляр Sticky с использованием PHP:
<div data-sticky-container>
<header class="header" role="banner" id="sticky_header" data-sticky data-top-anchor="1"
data-btm-anchor="content:top" data-options="marginTop:0;" style="width:100%"
>
<?php get_template_part('parts/nav', 'offcanvas-topbar'); ?>
</header>
</div>
После этого измените data-btm-anchor
текущую позицию прокрутки с помощью JavaScript, который запускается при нажатии. Это не сработало так, как хотелось бы. Что я пробовал до сих пор:
- При использовании,
getElementByID
а затемsetAttribute
,data-btm-anchor
в файле PHP изменяется в соответствии с Firebug, ноnav
это немного не влияет на панель; он остается там, где он есть. Нужно ли мне «реинстанцировать» Sticky, и если да, то как? - В документах упоминается:
Установка параметров с помощью JavaScript включает передачу объекта в функцию конструктора, например:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
Означает ли это, что я могу передавать новые параметры в уже существующий экземпляр плагина? Всякий раз, когда я передавал новый Foundation.Sticky
объект не более чем с другим btmAnchor в качестве параметра массива параметров my jQuery('#sticky_header')
, ничего не происходило.
В документации также предлагается программно добавить Sticky к моему "sticky_header". Если это сработает, я мог бы попробовать напрямую изменить объект jQuery. До сих пор мне удалось успешно привязать плагин Sticky к моему заголовку:
- бросая .js, из которого кнопка получает свою функцию
assets/js/scripts
(а затем запускаетсяgulp
) - удаление всех прикрепленных к данным тегов из моего
<header class="header">
, чтобы не было прикрепленного плагина, зарегистрированного в заголовке, когда DOM завершила загрузку программно добавляем плагин:
function button_fire(){ var options = { topAnchor:"1", btmAnchor:"footer:top", marginTop:"1" }; var stick = new Foundation.Sticky(jQuery('.header'), options); }
Заголовок теперь получает класс «липкий» согласно Firebug. Но это все равно не работает - скорее, это дает сбои: «Заголовок» несколько сжат, поэтому он слегка закрывает «содержимое»
div
ниже. Что вы знаете, заголовок не прилипает. Это ошибка?Предположим, теперь это будет работать «блестяще», могу ли я теоретически изменять атрибуты путем разыменования
var stick
или использованияjQuery('#sticky_header')
илиjQuery('.header')
?- бросая .js, из которого кнопка получает свою функцию
Помимо всего прочего, jQuery работает не так, как должен. У меня было много проблем с использованием $
в моих скриптах, и я не могу, например, запустить destroy()
метод Sticky из-за этого (если он сработал, я мог уничтожить экземпляр Sticky, чтобы создать новый с помощью btmAnchor
набор в новое положение прокрутки). Я открою для этого еще один вопрос.
wp_enqueue_script( 'jquery' );
сожалению, все та же проблема, что и раньше. Или я неправильно поставил jQuery в очередь? Есть ли у JointsWP собственные библиотеки jQuery?