TL; DR: Apakah Sticky benar-benar dapat bereaksi terhadap perubahan yang saya berikan melalui JavaScript? Jika ya, bagaimana caranya?
(Proyek ini menggunakan Foundation 6.2 dan WordPress 4.4, tema diinstal menggunakan Node.js / npm dan gulp 4.0. Pertanyaan saya, secara rinci, ditandai dengan cetak tebal.)
Saya ingin membuat navbilah lengket menggunakan Plugin Lengket Foundation, tetapi hanya ketika saya mengklik tombol. Itu berarti bahwa ketika semua DOM selesai, navbilah tidak boleh menempel "dengan sendirinya", tetapi tetap di posisi teratas dalam dokumen. Selain itu , itu harus hilang saat menggulir ke bawah, tetapi tetap saat menggulir ke atas.
The navbar benar dibungkus dalam semua yang diperlukan divs, sehingga navbar mampu menempel. Masalah muncul dengan bagian "tambahan". Ide saya adalah membuat instance Sticky menggunakan PHP terlebih dahulu:
<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>
Setelah itu, ubah data-btm-anchorke posisi gulir saat ini menggunakan JavaScript yang diaktifkan saat diklik. Ini tidak bekerja sebaik yang saya inginkan. Apa yang saya coba sejauh ini:
- Saat menggunakan
getElementByIDdan kemudiansetAttribute, filedata-btm-anchordalam PHP berubah sesuai dengan Firebug, tapi itu tidak mempengaruhinavbar sedikit; itu tetap di tempatnya. Apakah saya perlu "memulihkan" Sticky, dan jika ya, bagaimana caranya? - The docs menyebutkan:
Menyetel opsi dengan JavaScript melibatkan penerusan objek ke dalam fungsi konstruktor, seperti ini:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
Apakah itu berarti saya dapat meneruskan parameter baru ke instance plugin yang sudah ada? Setiap kali saya melewati Foundation.Stickyobjek baru dengan tidak lebih dari btmAnchor yang berbeda sebagai parameter array opsi saya ke saya jQuery('#sticky_header'), tidak ada yang terjadi.
The docs juga mengusulkan pemrograman menambahkan Sticky untuk saya "sticky_header". Jika itu berhasil, saya bisa mencoba untuk langsung mengubah objek jQuery. Sejauh ini saya berhasil mengikat plugin Sticky ke header saya dengan:
- melempar .js dari mana tombol mendapatkan fungsinya
assets/js/scripts(dan kemudian berjalangulp) - menghapus semua tag melekat data dari my
<header class="header">, jadi tidak ada plugin melekat yang terdaftar ke tajuk ketika DOM telah selesai memuat menambahkan plugin secara terprogram:
function button_fire(){ var options = { topAnchor:"1", btmAnchor:"footer:top", marginTop:"1" }; var stick = new Foundation.Sticky(jQuery('.header'), options); }
Header sekarang mendapatkan kelas "lengket" menurut Firebug. Tapi masih tidak berhasil - malah, itu glitches: "Ruang header" agak diciutkan sehingga sedikit menutupi "konten" di
divbawah. Tahukah Anda, tajuk tidak menempel. Apakah itu bug?Misalkan sekarang ini akan bekerja dengan "brilian", apakah saya secara teoritis dapat mengubah atribut dengan dereferencing
var stickatau menggunakanjQuery('#sticky_header')ataujQuery('.header')?- melempar .js dari mana tombol mendapatkan fungsinya
Di atas semua ini, jQuery tidak berfungsi sebagaimana mestinya. Saya memiliki banyak masalah dengan penggunaan $di skrip saya, dan saya tidak dapat, misalnya, menjalankan destroy()metode Sticky karena ini (jika berhasil, saya mungkin telah menghancurkan instance Sticky untuk membuat yang baru dengan yang btmAnchorditetapkan untuk posisi bergulir baru). Saya akan membuka pertanyaan lain untuk ini.
var $ = jQueryjQuery(document).ready(function($){ //your code here with using $ or jQuery });
wp_enqueue_script( 'jquery' );Sayangnya masih masalah yang sama seperti sebelumnya. Atau apakah saya salah memasukkan jQuery? Apakah JointsWP memiliki beberapa jQuery libs sendiri?