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 nav
bilah lengket menggunakan Plugin Lengket Foundation, tetapi hanya ketika saya mengklik tombol. Itu berarti bahwa ketika semua DOM selesai, nav
bilah 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 nav
bar benar dibungkus dalam semua yang diperlukan div
s, sehingga nav
bar 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-anchor
ke 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
getElementByID
dan kemudiansetAttribute
, filedata-btm-anchor
dalam PHP berubah sesuai dengan Firebug, tapi itu tidak mempengaruhinav
bar 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.Sticky
objek 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
div
bawah. 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 stick
atau 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 btmAnchor
ditetapkan untuk posisi bergulir baru). Saya akan membuka pertanyaan lain untuk ini.
var $ = jQuery
jQuery(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?