Accordéon JS
Pither2201
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Pither2201 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Pither2201 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous ! :)
Alors voilà, je suis actuellement en stage en entreprise où je travail sur des mises à jours de sites web.
Je dois aujourd'hui modifier un accordéon. Actuellement, lorsque l'on arrive sur la page où se trouve l'accordéon, le 1er onglet est déroulé, et lorsque l'on clique sur un autre onglet, celui-ci se déroule, et le 1er se ré-enroule.
Ce que j'aimerais c'est que de base, les accordéons soient tous enroulés, mais aussi qu'on puisse les enrouler en cliquant dessus.
En gros, ils sont actuellement tous liés, c'est à dire qu'il y en a toujours un d'ouvert, mais j'aimerais qu'ils puissent être tous fermés.
Je pense avoir isolé le code qui correspond, c'est du JS, chose que je ne maîtrise pas ^^
Ici je comprends que c'est la fonction on-click, qui appelle la fonction accordionSwitch()
Voici donc la fameuse fonction accordionSwitch(), qui je pense est la fonction qui nous intéresse ici.
Voilà. Donc si l'un de vous aurait une idée, une piste, ou même la solution pour transformer ceci en cela, je suis preneur !
Merci d'avance ! ;)
Alors voilà, je suis actuellement en stage en entreprise où je travail sur des mises à jours de sites web.
Je dois aujourd'hui modifier un accordéon. Actuellement, lorsque l'on arrive sur la page où se trouve l'accordéon, le 1er onglet est déroulé, et lorsque l'on clique sur un autre onglet, celui-ci se déroule, et le 1er se ré-enroule.
Ce que j'aimerais c'est que de base, les accordéons soient tous enroulés, mais aussi qu'on puisse les enrouler en cliquant dessus.
En gros, ils sont actuellement tous liés, c'est à dire qu'il y en a toujours un d'ouvert, mais j'aimerais qu'ils puissent être tous fermés.
Je pense avoir isolé le code qui correspond, c'est du JS, chose que je ne maîtrise pas ^^
Ici je comprends que c'est la fonction on-click, qui appelle la fonction accordionSwitch()
$( document ).ready( function () {
// Expand/Collapse accordion sections on click.
$( '.accordion-container' ).on( 'click keydown', '.accordion-section-title', function( e ) {
if ( e.type === 'keydown' && 13 !== e.which ) { // "return" key
return;
}
e.preventDefault(); // Keep this AFTER the key filter above
accordionSwitch( $( this ) );
});
});
Voici donc la fameuse fonction accordionSwitch(), qui je pense est la fonction qui nous intéresse ici.
function accordionSwitch ( el ) {
var section = el.closest( '.accordion-section' ),
sectionToggleControl = section.find( '[aria-expanded]' ).first(),
container = section.closest( '.accordion-container' ),
siblings = container.find( '.open' ),
siblingsToggleControl = siblings.find( '[aria-expanded]' ).first(),
content = section.find( '.accordion-section-content' );
// This section has no content and cannot be expanded.
if ( section.hasClass( 'cannot-expand' ) ) {
return;
}
// Add a class to the container to let us know something is happening inside.
// This helps in cases such as hiding a scrollbar while animations are executing.
container.addClass( 'opening' );
if ( section.hasClass( 'open' ) ) {
section.toggleClass( 'open' );
content.toggle( true ).slideToggle( 150 );
} else {
siblingsToggleControl.attr( 'aria-expanded', 'false' );
siblings.removeClass( 'open' );
siblings.find( '.accordion-section-content' ).show().slideUp( 150 );
content.toggle( false ).slideToggle( 150 );
section.toggleClass( 'open' );
}
// We have to wait for the animations to finish
setTimeout(function(){
container.removeClass( 'opening' );
}, 150);
// If there's an element with an aria-expanded attribute, assume it's a toggle control and toggle the aria-expanded value.
if ( sectionToggleControl ) {
sectionToggleControl.attr( 'aria-expanded', String( sectionToggleControl.attr( 'aria-expanded' ) === 'false' ) );
}
}
Voilà. Donc si l'un de vous aurait une idée, une piste, ou même la solution pour transformer ceci en cela, je suis preneur !
Merci d'avance ! ;)
A voir également:
- Accordéon JS
- Arrondi js ✓ - Forum Windows
- Copiez l'image dans un logiciel d'édition d'images ou un outil en ligne comme js paint ou pixlr e. remplissez les cases en suivant le code couleur. des cases supplémentaires vont se remplir automatiquement. que représente le dessin ? ✓ - Forum Windows
- Remplir une case de tableau avec une couleur grise avec texture de pointillés ✓ - Forum Photoshop
- Reproduction d'un dessin - Forum Graphisme
- Musique techno accordéon 2009 ✓ - Forum Musique / Radio / Clip
2 réponses
Bonjour,
Tu aurai le lien du site s'il est hebergé en ligne ?
Je travaille mieux avec le code source complet.
Tu aurai le lien du site s'il est hebergé en ligne ?
Je travaille mieux avec le code source complet.
Oui bien sûr:
http://game-sputnik.com/sensiblegambler/
Les entêtes de l'accordéon sont les noms des continents comme tu peux le voir.
http://game-sputnik.com/sensiblegambler/
Les entêtes de l'accordéon sont les noms des continents comme tu peux le voir.
Super, peux-tu me préciser chaque fichier ou tu as prélevé les codes sources cités plus haut ?
Pour ton information, voici le script utilisé pour l'accordéon, tu pourra y trouver la documentation officielle :
https://jqueryui.com/accordion/
Pour ton information, voici le script utilisé pour l'accordéon, tu pourra y trouver la documentation officielle :
https://jqueryui.com/accordion/
Etonnant, le script accordéon est présent dans le code source mais il n'est pas utilisé. Au vu du script que tu me montre, ce sont des fonctions personnelles qui ne proviennent pas du script car à aucun moment celui de jQuery UI n'est déclenché (via sa méthode .accordion() ).
Moi j'aurais simplement remplacé celle existante afin d'utiliser le script jQuery UI.
Tout est dans la doc : de la création du container en HTML, jusqu'a son déclenchement par JavaScript.
Dans ton cas il faudra ajouter plusieurs options.
1) Pour éviter d'avoir un onglet ouvert par défaut, mais aussi d'activer la fonction d'enroulement lors d'un clic sur le header:
Moi j'aurais simplement remplacé celle existante afin d'utiliser le script jQuery UI.
Tout est dans la doc : de la création du container en HTML, jusqu'a son déclenchement par JavaScript.
Dans ton cas il faudra ajouter plusieurs options.
1) Pour éviter d'avoir un onglet ouvert par défaut, mais aussi d'activer la fonction d'enroulement lors d'un clic sur le header:
$(function() { $( ".myaccordion" ).accordion({ active: false, collapsible: true });
Non ça ne fera rien.
Tu dois aller modifier l'HTML pour qu'il réponde aux règles du script jQuery
https://api.jqueryui.com/accordion/
Au début, il est expliqué que la structure doit-être comme suit :
Ensuite, tu créer une balise "script" à la toute fin de ton code html, avant le
La condition ici, c'est d'appeler la classe du DIV dans la méthode (.accordion). Tu peux donc personnaliser cela à ta guise.
En outre, il te faudra désactiver l'ancienne fonction précédemment développé : supprimer le script (du code juste, tu supprime pas le fichier mais la ligne appelant la source dans le HTML).
Tu dois aller modifier l'HTML pour qu'il réponde aux règles du script jQuery
https://api.jqueryui.com/accordion/
Au début, il est expliqué que la structure doit-être comme suit :
<!-- Un div avec l'id "accordion" englobant tes sections --> <div id="accordion"> <!-- Les sections avec balises h3 --> <h3>Section 1</h3> <!-- Puis un DIV --> <div> <!-- A partir de la tu mets ce que tu veux--> <p> Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate. </p> </div> <h3>Section 2</h3> <div> <p> Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p> </div> <!-- etc......... -->
Ensuite, tu créer une balise "script" à la toute fin de ton code html, avant le
</body>et tu y met la fonction suivante :
$(function() { $( ".myaccordion" ).accordion({ active: false, collapsible: true });
La condition ici, c'est d'appeler la classe du DIV dans la méthode (.accordion). Tu peux donc personnaliser cela à ta guise.
En outre, il te faudra désactiver l'ancienne fonction précédemment développé : supprimer le script (du code juste, tu supprime pas le fichier mais la ligne appelant la source dans le HTML).