Liste déroulante en guise de sommaire

Liste déroulante en guise de sommaire - Javascript/Node.js - Programmation

Marsh Posté le 21-06-2024 à 16:16:27    

Bonjour,
 
je souhaite remplacer le sommaire sous forme de liste par un <select> qui permet de prendre moins de place lorsqu'il y a beaucoup d'items.
 
Ce que je veux faire c'est comme sur ce site : https://www.frandroid.com/comment-f [...] resolution
 
En gros l'internaute clique sur la liste déroulante qui sert de sommaire pour accéder aux diverses parties composant la page, il clique sur le titre correspondant au h2 de la partie en question et est directement redirigé sur cette partie, de la même manière qu'une encre, la différence ici c'est que ce n'est pas un lien mais une liste.
 
J'avais déjà fait des recherches et j'étais tombé sur un site qui expliquait qu'il était possible de bidouiller un truc en js pour que ça fonctionne, mais je n'arrive plus à mettre la main sur le lien du site en question.
 
Avez-vous une idée ?
 
Merci. :hello:  
 

Code :
  1. <html>
  2. <head>
  3. <title>test</title>
  4. <style>
  5. .cntr { text-align:center; }
  6. </style>
  7. </head>
  8. <body>
  9. <div class="cntr">
  10. <label for="sommaire">A quel endroit de la page souhaitez-vous être redirigé ?</label>
  11. <br/><br/>
  12. <select name="sommaire" id="sommaire">
  13. <option value="0">Sélectionnez...</option>
  14. <option value="#part1">Sous-titre 1</option>
  15. <option value="#part2">Sous-titre 2</option>
  16. <option value="#part3">Sous-titre 3</option>
  17. </select>
  18. </div>
  19. <h1>Titre</h1>
  20. <h2 id="part1">sous-titre 1</h2>
  21. <p>sous-titre de la partie 1</p>
  22. <h2 id="part2">sous-titre 2</h2>
  23. <p>sous-titre de la partie 2</p>
  24. <h2 id="part3">sous-titre 3</h2>
  25. <p>sous-titre de la partie 3</p>
  26. </body>
  27. </html>


Message édité par Ze_Noob le 21-06-2024 à 16:19:20
Reply

Marsh Posté le 21-06-2024 à 16:16:27   

Reply

Marsh Posté le 21-06-2024 à 16:39:24    

Mettre un écouteur onchange sur ton select et faire un scrollto ?
https://www.google.com/search?q=van [...] +to+anchor
 
Apparemment y'a même plus besoin de trouver le offsetTop de l'ancre en vanilla js on peut directement faire document.querySelector('#anchor').scrollIntoView(); IE8 et + autant dire tout le monde 99.9% des gens...
https://gomakethings.com/how-to-scr [...] anilla-js/


---------------
D3
Reply

Marsh Posté le 21-06-2024 à 19:56:11    

Merci pour ta réponse mechkurt
 
En recherchant sur google je suis tombé sur ce lien :
 
https://stackoverflow.com/questions [...] select-box
 
Ca semble être dans l'esprit de ce que je veux, du coup j'ai essayé quelque chose (je précise que je ne maîtrise pas javascript) :
 

Code :
  1. <html>
  2. <head>
  3. <title>test</title>
  4. <style>
  5. .cntr { text-align:center; }
  6. </style>
  7. <script>
  8. function redirect(goto){
  9. var selectEl = document.getElementById('sommaire');
  10. selectEl.onchange = function(){
  11.     var goto = this.value;
  12.     redirect(goto);
  13. };
  14. </script>
  15. </head>
  16. <body>
  17. <div class="cntr">
  18. <h1>Titre</h1>
  19. <label for="sommaire">Sur quel site souhaitez-vous être redirigé ?</label>
  20. <br/><br/>
  21. <select name="sommaire" id="sommaire">
  22. <option value="">Sélectionnez...</option>
  23. <option value="https://google.fr">Google</option>
  24. <option value="https://duckduckgo.com/">DuckDuckGo</option>
  25. <option value="https://yahoo.fr">Yahoo</option>
  26. </select>
  27. </div>


 
Mais bien entendu ça ne fonctionne pas !
 
Il y a forcément quelque chose que j'ai loupé dans le code, et probablement un meilleur code qui permettrait d'avoir des URL relatives (directement les ancres) à la place des URL absolues.
 
Pouvez-vous m'aiguiller ?
 
Merci


Message édité par Ze_Noob le 21-06-2024 à 19:57:05
Reply

Marsh Posté le 22-06-2024 à 08:16:23    

Effectivemnent pas besoin de préciser "je précise que je ne maîtrise pas javascript" quand on voit ce code :

Code :
  1. function redirect(goto){
  2. var selectEl = document.getElementById('sommaire');
  3. selectEl.onchange = function(){
  4.     var goto = this.value;
  5.     redirect(goto);
  6. };


Ton code n'est même pas valide, tu démarre une fonction ligne 9 que tu ne ferme jamais...
 
Pour que ça fonctionne il te manque aussi un window.location = goto ou bien un document.querySelector('#'+id_de_l_ancre).scrollIntoView();


Message édité par mechkurt le 22-06-2024 à 08:16:41

---------------
D3
Reply

Marsh Posté le 23-06-2024 à 18:00:40    

merci pour ta réponse mechkurt, même si je me serais bien passé du début de ton message quelque peu sarcastique...
 
J'ai corrigé et maintenant ça fonctionne.
 

Code :
  1. <html>
  2. <head>
  3. <title>test</title>
  4. <style>
  5. .cntr { text-align:center; }
  6. </style>
  7. <script>
  8. function redirect(goto){
  9. var selectEl = document.getElementById('sommaire');
  10. selectEl.onchange = function(){
  11.     var goto = this.value;
  12.     redirect(goto); 
  13. };
  14. }
  15. </script>
  16. </head>
  17. <body>
  18. <div class="cntr">
  19. <h1>Titre</h1>
  20. <label for="sommaire">A quel endroit de la page souhaitez-vous être redirigé ?</label>
  21. <br/><br/>
  22. <select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);" name="sommaire" id="sommaire">
  23. <option  value="">Sélectionnez...</option>
  24. <option value="#part1">Sous-titre 1</option>
  25. <option value="#part2">Sous-titre 2</option>
  26. <option value="#part3">Sous-titre 3</option>
  27. </select>
  28. </div>
  29. <h2 id="part1">Sous-titre 1</h2>
  30. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  31. <h2 id="part2">Sous-titre 2</h2>
  32. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  33. <h2 id="part3">Sous-titre 3</h2>
  34. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  35. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  36. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  37. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  38. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet lacus at ipsum feugiat convallis id vitae diam. Aenean facilisis ultricies purus sed imperdiet. Sed tempor mattis tellus, ut varius augue eleifend quis. Praesent diam neque, egestas facilisis lorem id, egestas interdum purus. Aenean tincidunt tristique hendrerit. Aliquam erat volutpat. Curabitur egestas, est eget dictum tempor, urna sem posuere nibh, rutrum efficitur ante erat ut ipsum. Nullam sagittis diam in elementum fermentum. Maecenas eu ex a metus fermentum venenatis hendrerit ac leo. Curabitur mattis augue tempor, congue ante a, dignissim sapien. Nunc scelerisque maximus nunc at sagittis. Proin egestas risus in ante vehicula vehicula. Aenean eu lectus tristique, fringilla quam sed, dapibus risus.</p>
  39. </body>
  40. </html>


Message édité par Ze_Noob le 23-06-2024 à 18:34:39
Reply

Marsh Posté le 23-06-2024 à 18:53:19    

Hfr c'est l'élite, un petit peu d'auto dérision ne fait de mal à personne... :o  

Spoiler :

Désolé de t'avoir froissé. :sweat:


Tout ce qui est dans la balise script est inutile et peut être supprimé (ligne 8 à 16 de ton code ci-dessus).
Ça pourrait être corrigé pour dissocié le Javascript de l'html et ne pas avoir de code "inline" dans la balise, mais c'est un problème de puriste...
Du moment que cela fonctionne : onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);" cela résout ton problème.


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed