11524 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
j'ai une barre de navigation sans logo pour commencer (avec un display: none).
A un certain niveau de scroll, j'aimerai qu'il apparaisse.


<script>
			/* ESSAI CONCLUANT
			window.addEventListener("scroll",()=> {
			console.log("scroll |");*/
			const nav = document.querySelector("nav-container");
			window.addEventListener("scroll",()=> {
			if(window.scrollY > 204){
				nav.classList.add("transformation");
			};
			});
			</script>



Avant même de tenter de visualiser mon logo, la classe transformaton n'apparait pas en console sur nav-container.

Merci de votre aide.
Modérateur
Salut !

Alors quelques pistes pour commencer :

- tu peux rajouter un test DOM ready à ton code. c'est un petit if qui va vérifier que ton DOM est chargé avant de chercher à le toucher avec le Js (sinon le Js s'execute trop vite et il ne trouve pas les éléments)
- est-ce que tu as bien le bon élément dans nav (console.log) ?
- est-ce que ta valeur de window.scrollY change bien (console.log) ?

Bon app !
Merci de prendre le temps de répondre.
J'ai trouvé une solution à force de recherches avec pour commencer une balise script à même mon html.

Pour ceux que le sujet intéresse, je partage :

$(window).scroll(function(){
	if ($(this).scrollTop() > 100) {
		$('#logo').addClass('logo-show');
		$('#logo').removeClass('logo-hide');
		} else {
		$('#logo').removeClass('logo-show');
		$('#logo').addClass('logo-hide');
		}
		});


Je précise que j'ai trouvé mon point de 'changement" sur la console et que donc il peut être changer selon les contraintes voulues.
Je vais intégrer ce bout de code dans le js généra/site où là j'ai un test DOM.
J'espère que mon temps de recherches pourra servir à d'autres.

Merci encore d'avoir répondu.
Oui, alors attention car on est passé d'un petit code JavaScript de 3 lignes à un code jQuery qui nécessite l'appel à une bibliothèque pesant actuellement 85,4 Ko.

Alors si la librairie est déjà utilisée sur le site, comme on peut le supposer ici, ok ça ne change rien. Dans le cas contraire il vaux mieux utiliser du JavaScript vanilla.
Modifié par Olivier C (01 Oct 2023 - 17:24)