TL; DR: Sticky, JavaScript aracılığıyla verdiğim değişikliklere gerçekten tepki verebilir mi? Öyleyse nasıl?
(Proje, Node.js / npm ve gulp 4.0 kullanılarak kurulan tema Foundation 6.2 ve WordPress 4.4 kullanıyor. Sorularım ayrıntılı olarak kalın harflerle işaretlenmiştir.)
navÇubuğu Foundation'ın Yapışkan Eklentisini kullanarak yapışkan hale getirmek istiyorum , ancak yalnızca bir düğmeye tıkladığımda. Bu, DOM'un tamamı bittiğinde, navçubuğun "kendi kendine" kalmaması, ancak belgede en üst konumunda kalması gerektiği anlamına gelir . Ek olarak, aşağı kaydırırken kaybolmalı, ancak yukarı kaydırırken takılı kalmalıdır.
navÇubuğu doğru gerekli tüm sarılır divböylece, s navçubuğu sopa edebiliyor. Sorunlar "ek olarak" kısımda ortaya çıkar. Benim fikrim, ilk önce PHP kullanarak Sticky'i başlatmaktı:
<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>
Bundan sonra data-btm-anchor, tıklamayla tetiklenen JavaScript'i kullanarak mevcut kaydırma konumuna değiştirin . Bu istediğim kadar işe yaramadı. Şimdiye kadar denediklerim:
- Kullanılırken
getElementByIDve sonrasetAttribute,data-btm-anchorPHP dosyasındaki dosya Firebug'a göre değişir, ancak bunavçubuğu biraz etkilemez ; olduğu yerde kalır. Yapışkan'ı "yeniden etkinleştirmem" gerekiyor mu ve öyleyse, nasıl? - Dokümanlar söz:
JavaScript ile seçenekleri ayarlamak, bir nesneyi yapıcı işlevine şu şekilde iletmeyi içerir:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
Bu, mevcut bir eklenti örneğine yeni parametreler aktarabileceğim anlamına mı geliyor ? Seçenekler dizisi parametrem olarak Foundation.Stickyfarklı bir btmAnchor'dan başka bir şey içermeyen yeni bir nesneyi my'a ilettiğimdejQuery('#sticky_header') hiçbir şey olmadı.
Docs aynı zamanda benim "sticky_header" için Sabit ekleyerek programlı öneriyoruz. Bu işe yaradıysa, jQuery nesnesini doğrudan değiştirmeyi deneyebilirim. Şimdiye kadar, Sticky eklentisini başlığıma başarıyla bağlayabildim:
- düğmenin işlevini aldığı .j'leri atma
assets/js/scripts(ve sonra çalıştırmagulp) - tüm veri yapışkan etiketleri my'den siliyorum
<header class="header">, bu nedenle DOM yüklemeyi bitirdiğinde başlığa kaydedilmiş yapışkan bir eklenti yok eklentiyi programlı olarak eklemek:
function button_fire(){ var options = { topAnchor:"1", btmAnchor:"footer:top", marginTop:"1" }; var stick = new Foundation.Sticky(jQuery('.header'), options); }
Başlık şimdi Firebug'a göre "yapışkan" sınıfını kazanır. Ama yine de çalışmıyor - daha çok aksıyor: "Başlık alanı" bir şekilde daraltılmış, bu nedenle
divaşağıdaki "içeriği" biraz kaplıyor . Ne biliyorsun, başlık yapışmaz. Bu bir hata mı?Şimdi "zekice" çalışacağını varsayalım, teorik olarak öznitelikleri referans alarak
var stickveya kullanarakjQuery('#sticky_header')veya kullanarak değiştirebilirjQuery('.header')miyim?- düğmenin işlevini aldığı .j'leri atma
Tüm bunların üzerinde jQuery olması gerektiği gibi çalışmıyor. $Komut dosyalarımda kullanmakla ilgili birçok sorun yaşadım ve örneğin, destroy()bu nedenle Sticky yöntemini çalıştıramıyorum (işe yaradıysa, yeni bir tane oluşturmak için Sticky örneğini yok etmiş olabilirim. btmAnchoryeni bir kaydırma konumuna ayarlanır). Bunun için başka bir soru açacağım.
wp_enqueue_script( 'jquery' );Maalesef yine de aynı sorun. Yoksa jQuery'yi yanlış mı kuyruğa aldım? JointsWP'nin kendine ait bazı jQuery kitaplıkları var mı?