एक बार ओपन (फाउंडेशन फ्रेमवर्क) - ज़र्ब-नींव, accordion

मैं उपयोग कर रहा हूँ ज़ुरब फाउंडेशन (v6) Accordions

जब एक accordion खुलता है, तो मैं उस accordion आइटम के शीर्ष पर होने के लिए पृष्ठ को स्क्रॉल करना चाहता हूं। मैं यह कोड चला सकता हूं:

$("#arf").on("down.zf.accordion", function() {
$("html,body").animate({scrollTop: $(this).offset().top}, "slow");
});

बेशक, यह पृष्ठ को accordion के शीर्ष पर स्क्रॉल करता है, accordion आइटम नहीं। जब यह खुलता है तो accordion के आइटम को स्क्रॉल करने के लिए मैं इस कोड को कैसे संशोधित करूं?

उत्तर:

जवाब के लिए 3 № 1

यहां वह समाधान है जो मैंने पाया कि काम करता है। यह साइट्स के लिए फाउंडेशन के संस्करण 6 के लिए काम करता है।

$("#form-selector").on("up.zf.accordion", function(event) {
setTimeout(function(){
$("html,body").animate({scrollTop: $(".is-active").offset().top}, "slow");
}, 250); //Adjust to match slideSpeed
});

The setTimeout का उपयोग किया जाता है क्योंकि slideSpeed के accordion । यदि आप उपयोग नहीं करते setTimeout यह पल स्क्रॉल down.zf.accordion आग इस प्रकार गलत स्थिति के लिए स्क्रॉल ।

तुम भी हम कर सकते है down.zf.accordion के स्थान पर up.zf.accordion, हालांकि, यदि आप का उपयोग करें down.zf.accordion, यह एक बार आग जाएगा पृष्ठ लोड (के रूप में accordion शुरू और खुलता है) और accordion आइटम के लिए स्क्रॉल ।यह मेरे मामले में अवांछित है, लेकिन कुछ मामले में वांछित हो सकता है ।


उत्तर № 2 के लिए 1

आप प्रत्येक accordion के लिए अपने खुद के क्लिक करें श्रोताओं संलग्न सकता है <a> टैग और क्लिक पर उस टैग के शीर्ष पर स्क्रॉल करें ।जैसे.

जे एस

$(".accordionBtn").on("click", function(event) {
$("html,body").animate({scrollTop: $(event.target).offset().top}, "slow");
});)

सीएसएस

<ul class="accordion" data-accordion>
<li class="accordion-navigation">
<a class="accordionBtn" href="#panel1a">Accordion 1</a>
<div id="panel1a" class="content active">
Panel 1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
</li>
<li class="accordion-navigation">
<a class="accordionBtn" href="#panel2a">Accordion 2</a>
<div id="panel2a" class="content">
Panel 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
</li>
<li class="accordion-navigation">
<a class="accordionBtn" href="#panel3a">Accordion 3</a>
<div id="panel3a" class="content">
Panel 3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
</li>
</ul>

जवाब के लिए 0 № 3

मैं पहले @L84 तो मैं इस एक के बारे में सोचा द्वारा पोस्ट समाधान किया करते थे ।

नीचे दिए गए कोड में, $active संदर्भ वर्तमान में सक्रिय accordion आइटम (ध्यान दें: संदर्भ हर बार एक accordion खोला बजाय जब accordion शीर्षक क्लिक किया जाता है जमा है) ।जब कोई नया शीर्षक क्लिक किया जाता है, तो $active वह आइटम है जो बंद हो जाएगा । हम पहले से इसकी ऊंचाई जानने की जरूरत है ।

नए सक्रिय accordion आइटम के लिए ठीक से तैनात होने के लिए, कि पहले से सक्रिय आइटम की ऊंचाई को viewport से घटाया जा सकता है "स्क्रॉल स्थिति एस-ध्यान दें कि यह आवश्यक में ही अगर नए सक्रिय आइटम और नीचे स्थित है ।

$(function () {
var $active;

$(".accordion").on("click", ".accordion-title", function () {
var itemIndexNew = $(".accordion-item").index($(this).parent());
var itemIndexOld = ($active ? $(".accordion-item").index($active) : null);
if (itemIndexOld !== null && itemIndexOld < itemIndexNew) {
$("html, body").scrollTop($(window).scrollTop() - $active.height());
}
});

$(".accordion").on("down.zf.accordion", function(e) {
$active = $(".accordion").find(".accordion-item.is-active");
});

$(document).foundation();
});

जवाब के लिए 0 № 4

तुम स्क्रिप्ट के नीचे का उपयोग करें, im भी नींव 6 accordion का उपयोग कर सकता है, यह भी काम अगर आप एक पृष्ठ पर कई accordions होगा ।धन्यवाद

jQuery(".accordion-title").click(function() {
var $this = this;
setTimeout(function(){
jQuery("html,body").animate({scrollTop: jQuery($this).closest(".accordion").find(".is-active").offset().top}, "slow");
}, 250);
});

संबंधित सवाल
सबसे लोकप्रिय