Menu navbar Galerie

WireFire Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
WireFire Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un menu avec plusieurs liens, chacun de ces derniers dispose d'un liens href vers son bloc correspondant, (liens genre des boutons quoi pour naviguer) et je dispose de ce code JS pour effectuer le changement de bloc lors du clic sur un lien mais il me semble pas bien marcher :

JS :

(function() {
wdgGalerie = function (sClassBt, sClassActive) {
this.oLast = null;
this.sClassActive = null;
this.show = function(oEvent){
var oBt = oEvent.currentTarget, oElem ;
oEvent.stopPropagation();
oEvent.preventDefault();
if(this.oLast){
this.oLast.classList.remove(this.sClassActive);
oElem = document.getElementById(this.oLast.hash.replace('#',''));
if(oElem){
oElem.classList.remove(this.sClassActive);
}
}
this.oLast = oBt;
oBt.classList.add(this.sClassActive);
oElem = document.getElementById(oBt.hash.replace('#',''));
if(oElem){
oElem.classList.add(this.sClassActive);
}
};

init.call(this,sClassBt, sClassActive);
}
function init (sClassBt, sClassActive){
if(!sClassBt || !sClassActive){
throw "Parameter invalid";
}
var aBts = document.getElementsByClassName(sClassBt);
this.sClassActive = sClassActive;
for(var i = 0; i< aBts.length;i++){
aBts[i].addEventListener('click', this.show.bind(this));
if(aBts[i].classList.contains(this.sClassActive)){
this.oLast=aBts[i];
}
}
}
})();
document.addEventListener('DOMContentLoaded',function(){
new wdgGalerie("bt_galerie","active");
});


HTML --------------------------------------------


<!------------------------- SECTION PAGE GALERIE ------------------------------>

<section data-anchor="Page 3" class="page-3">
<div id="bloc_galerie">
<div id="texte_menu">
<div id="texte">
<h2>Notre Galerie</h2>
</div>
<div id="menu">
<img src="Images/Ligne_sep.png" alt="">
<a href="#bloc_salon" style="margin-left:100px;" class="active bt_galerie">Salon</a>
<a href="#bloc_coiffure" class="bt_galerie">Coiffure</a>
<a href="#bloc_esthetique" class="bt_galerie">Ésthétique</a>
<a href="#bloc_beaute" class="bt_galerie">Beauté</a>
<img src="Images/Ligne_sep.png" style="margin-right: 20px;" alt="">
</div>
</div>
<div id="bloc_images" class="">
<div id="bloc_salon" class="tab active">
<img src="Images/Photo1.jpg" alt="">
<img src="Images/Photo2.jpg" alt="">
<img src="Images/Photo3.jpg" alt="">
<img src="Images/Photo4.jpg" alt="">
<img src="Images/Photo5.jpg" alt="">
</div>
<div id="bloc_coiffure" class="tab">
<p>HELLOOOOOOOOOOOOO</p>
</div>
<div id="bloc_esthetique" class="tab">
<p>HELLOOOOOOOOOOOOO</p>
</div>
<div id="bloc_beaute" class="tab">
<p>HELLOOOOOOOOOOOOO</p>
</div>
</div>
</div>
</section>


Merci de votre aide,

cordialement.

Configuration: Windows / Chrome 74.0.3729.157
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
tu dis que ça ne semble pas bien fonctionner.. peux-tu expliquer en quoi ça ne fonctionne pas correctement ?

as-tu également vérifié si tu avais des messages d'erreur dans la console de ton navigateur ?
0
WireFire Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Oui en effet, j'ai un message d'erreur comme quoi wdgGalerie n'est pad défini mais étant donné mon niveau bas encore en JS, je ne sait comment m'y prendre avec ce code.


En gros ça ne fait rien, rien ne se passe. Et lorsque je clique sur salon par exemple, et seulement lui, j'ai un bug qui me fait monter a page en haut.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Où as tu inclus tes scripts js dans ta page?

Dans l'idéal, il faudrait que tu nous montres le code généré (le code source affiché depuis ton navigateur ) de ta page dans ton navigateur (raccourci clavier ctrl+u )
0
WireFire Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
mes scripts sont tous dans un seul et même fichier source : index.js
voici mon site web en hebergement : https://lhair-du-temps.000webhostapp.com/

Cordialement.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Dans ton JS tu as 'use strict';
Tu dois donc DECLARER chaque variable par le mot VAR
Essaye donc de modifier la ligne
(function() {
  wdgGalerie = function (sClassBt, sClassActive) {

par
(function() {
 var wdgGalerie = function (sClassBt, sClassActive) {


NB: Comme tu peux le voir, le code que je te poste est en couleur...
pour ça il faut préciser le LANGAGE dans les balises de code, tel qu'expliqué ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Merci de le faire dans tes prochains messages
0
WireFire Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour, merci de ta réponse,
j'avais en effet déjà eu cette idée, mais lorsque je rajoute un var j'ai une autre erreur au niveau de l'appel du script qui est :
document.addEventListener('DOMContentLoaded',function(){
  new wdgGalerie("bt_galerie","active"); 
});


il me précise dans la console comme quoi :


Je ne vois pas d'ou vient le problème,

cordialement.
0