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 div
bö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
getElementByID
ve sonrasetAttribute
,data-btm-anchor
PHP 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.Sticky
farklı 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
div
aş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 stick
veya 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. btmAnchor
yeni 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ı?