TL; DR: Чи реально Sticky здатний реагувати на зміни, які я надаю через JavaScript? Якщо так, то як?
(У проекті використовуються Foundation 6.2 та WordPress 4.4, тема встановлена за допомогою Node.js / npm та gulp 4.0. Мої запитання детально позначені жирним шрифтом.)
Я хочу зробити nav
планку клейкою за допомогою Sticky Plugin Foundation, але лише тоді, коли натискаю кнопку. Це означає, що після закінчення роботи з 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
планку трохи; вона залишається там, де є. Чи потрібно «реінстаціювати» липкі, і якщо так, то як? - У документах згадують:
Налаштування параметрів за допомогою JavaScript передбачає передачу об'єкта у функцію конструктора, наприклад:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
Чи означає це, що я можу передавати нові параметри вже існуючому екземпляру плагіна? Кожного разу, коли я передавав новий Foundation.Sticky
об’єкт, що не відрізнявся від параметра btmAnchor, як параметр масиву параметрів до мого 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
набір в нове положення прокрутки). Я відкрию для цього ще одне питання.
var $ = jQuery
або передати його при виклику методу .ready () на зразок цього:jQuery(document).ready(function($){ //your code here with using $ or jQuery });
wp_enqueue_script( 'jquery' );
На жаль, проблема, як і раніше, на жаль. Або я неправильно поставив jQuery? Чи має JointsWP свої власні jQuery libs?