HTML gevorderde |
|
Oké, laten we meteen jouw code wat gaan verbeteren
Allereerst heb je nu heeeeel erg veel duplicate code, zie je dat ook? Je verandert slechts tekens de selector. Nu kun je dat op 2 manieren oplossen:
1. Kijken of je dit beter kan aanpakken zonder duplicate code
2. 1 functie schrijven en die telkens aanroepen
Omdat je nog nieuw bent met jQuery zal jij waarschijnlijk voor (2) gaan, maar we gaan hier natuurlijk naar (1).
Allereerst gaan we de specifieke IDs weghalen en gebruiken we alleen 2 classes: .toggle-panel en .panel. Wat willen we dan bereiken? We willen dat de .panel direct na .toggle-panel getoggled wordt wanneer er op .toggle-panel wordt geklikt. Hoe bepalen we de .panel direct na .toggle-panel? Dat doen met met de jQuery: .next(selector) functie:
jQuery(document).ready(function ($) {
$('.toggle-panel').click(function (e) {
$(this).next('.panel').slideToggle('slow');
});
});
jQuery(document).ready(function ($) { $('.toggle-panel').click(function (e) { $(this).next('.panel').slideToggle('slow'); }); });
Dit ziet er stukken beter uit, vind je niet?
Nu gaan we je probleem oplossen. De andere panels moeten allemaal verborgen zijn, wanneer er 1 wordt geopend. Dit gaan we simpelweg doen door alle panels een jQuery: .slideUp(speed) mee en openen daarna de juiste:
jQuery(document).ready(function ($) {
var $panels = $('.panel'); // cachen, voor snelheid optimalisatie
$('.toggle-panel').click(function (e) {
var $that = $(this); // cache deze this, aangezien die in de callback anders is
$panels.slideUp('fast', function () {
$that.next('.panel').slideToggle('slow');
}
});
});
jQuery(document).ready(function ($) { var $panels = $('.panel'); // cachen, voor snelheid optimalisatie $('.toggle-panel').click(function (e) { var $that = $(this); // cache deze this, aangezien die in de callback anders is $panels.slideUp('fast', function () { $that.next('.panel').slideToggle('slow'); } }); });
|