TL; DR: क्या स्टिकी वास्तव में जावास्क्रिप्ट के माध्यम से मेरे द्वारा दिए गए परिवर्तनों पर प्रतिक्रिया करने में सक्षम है? यदि हां, तो कैसे?
(यह प्रोजेक्ट फाउंडेशन 6.2 और वर्डप्रेस 4.4 का उपयोग कर रहा है, Node.js / npm और gulp 4.0 का उपयोग करके स्थापित थीम। मेरे सवालों के बारे में विस्तार से, बोल्ड प्रिंट में चिह्नित हैं।)
मैं navफाउंडेशन के स्टिकी प्लगिन का उपयोग करके बार को चिपचिपा बनाना चाहता हूं , लेकिन केवल जब मैं एक बटन पर क्लिक करता हूं। इसका मतलब है कि जब DOM सब खत्म हो जाता है, तो navबार को "खुद से" चिपकना नहीं चाहिए, लेकिन दस्तावेज़ में इसके शीर्ष स्थान पर रहें। इसके अलावा, नीचे स्क्रॉल करते समय यह गायब हो जाना चाहिए, लेकिन स्क्रॉल करते समय छड़ी।
navबार सही ढंग से सभी आवश्यक में लपेटा जाता है div, रों इसलिए navबार छड़ी करने में सक्षम है। समस्याएं "अतिरिक्त" भाग के साथ उत्पन्न होती हैं। मेरा विचार पहले 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जावास्क्रिप्ट का उपयोग करके वर्तमान स्क्रॉल स्थिति में परिवर्तन करें जो कि क्लिक पर निकाल दिया गया है। यह काम नहीं करता था और साथ ही मैं चाहूंगा। मैंने अब तक क्या प्रयास किया है:
- उपयोग करते समय
getElementByIDऔर फिरsetAttribute,data-btm-anchorPHP फ़ाइल में फायरबग के अनुसार परिवर्तन होता है, लेकिन यहnavबार को थोड़ा प्रभावित नहीं करता है ; यह जहां है वहीं रहता है। क्या मुझे स्टिकी को "बहाल" करने की आवश्यकता है, और यदि हां, तो कैसे? - डॉक्स का उल्लेख:
जावास्क्रिप्ट के साथ विकल्प सेट करना एक वस्तु को कंस्ट्रक्टर फ़ंक्शन में पास करना शामिल है, जैसे:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
इसका मतलब है कि मैं पहले से मौजूद प्लगइन उदाहरण में नए मापदंडों को पारित कर सकता हूं ? जब भी मैंने Foundation.Stickyएक अलग वस्तु btmAnchor से अधिक कुछ नहीं के साथ एक नई वस्तु पारित की मेरे विकल्प सरणी पैरामीटर मेरे लिए jQuery('#sticky_header'), कुछ भी नहीं हुआ।
डॉक्स भी प्रोग्राम के रूप में प्रस्ताव मेरे "sticky_header" करने के लिए स्टिकी जोड़ने। यदि वह काम करता है, तो मैं सीधे jQuery ऑब्जेक्ट को बदलने की कोशिश कर सकता हूं। अब तक मैं अपने हेडर से स्टिकी प्लगइन को सफलतापूर्वक बांधने में सक्षम रहा हूँ:
- .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()स्टिकी की विधि को नहीं चला सकता क्योंकि इस वजह से (यदि यह काम करता है, तो मैंने स्टिकी के एक उदाहरण को नष्ट कर दिया हो सकता है एक नया btmAnchorएक नया स्क्रॉल स्थिति के लिए सेट)। मैं इसके लिए एक और सवाल खोलूंगा।
var $ = jQueryया इसे कॉलिंग पर पास करना होगा। () विधि इस तरह से:jQuery(document).ready(function($){ //your code here with using $ or jQuery });
wp_enqueue_script( 'jquery' );फिर भी पहले की तरह ही समस्या है, दुर्भाग्य से। या मैंने गलत तरीके से jQuery का एनकाउंटर किया? क्या JointsWP के अपने कुछ jQuery के काम हैं?