je voudrais savoir si le code ci-dessous (qui permet de changer la couleur de la barre de menu) si il y a moyen de le faire en plus simple éliminer des lignes inutiles ou autre et savoir aussi si c'est la bonne pratique ?
/**
* Changement de couleur de la barre des menus
*
*/
window.addEventListener("load", function () {
if (window.innerWidth > 1025) {
let sectionActive = document.querySelector('section'); // selection des sections où la condition sera remplie
if (!sectionActive.classList.contains("section-page")) {
window.addEventListener('scroll', function () {
let nav = document.getElementById('nav-bar'); // selection de la barre des menus
if (window.pageYOffset > 100 && window.pageYOffset < 610) {
nav.style.cssText = 'background-color: #ededed !important';
} else if (window.pageYOffset > 610 && window.pageYOffset < 1431) {
nav.style.cssText = 'background-color: white !important';
} else if (window.pageYOffset > 1431) {
nav.style.cssText = 'background-color: #869faa !important';
} else {
nav.style.cssText = 'background-color: transparent !important';
}
});
}
}
});
Est-ce une bonne pratique d'appliquer du style (css) depuis un script javascript ?
La réponse, bien qu'elle n'engage que moi, est non. Non seulement ça diminue exponentiellement la maintenabilité du projet en question, mais en plus ça peu provoquer des bugs chez certain utilisateur (tout le monde n'active pas javascript par défaut).
Sinon si ta question c'est plutôt:
Est-ce une bonne pratique de factoriser un script javascript ?
La réponse est oui. Ça n'engage toujours que moi, néanmoins je pense qu'en réduisant la taille final du script on diminue le temps de chargement du fichier et donc que ça améliore les performances, en revanche ça ne doit pas ternir la lisibilité du script.
De même, utiliser un duplicata minifier permet d'augmenter les performances.
window.addEventListener("load", function () {
if (window.innerWidth > 1025) {
let sectionActive = document.querySelector('section'); // selection des sections où la condition sera remplie
if (!sectionActive.classList.contains("section-page")) {
let nav = document.getElementById('nav-bar');
window.addEventListener('scroll', function () {
let bgColor = 'transparent';
// selection de la barre des menus
if (window.pageYOffset > 100 && window.pageYOffset < 610) {
bgColor = ' #edede';
} else if (window.pageYOffset > 610 && window.pageYOffset < 1431) {
bgColor = 'white';
} else if (window.pageYOffset > 1431) {
bgColor = '#869faa';
}
this.style.backgroundColor = bgColor;
}.bind(nav));
}
}
});
Perso j'aurai fait un truc comme cela, mais comme tu peux le voir on gagne pas au niveau code, mais j'aime bien car les choses sont bien séparées (mais bon c'est vraiment perso)
function setMenuColor(){
// this = nav = document.getElementById('nav-bar')
//valeur par défaut
let bgColor ="transparent";
/*
Je pense qu'il y a un erreur dans les tests :
si window.pageYOffset = 610 ou window.pageYOffset = 1431
alors bgColor ="transparent"
*/
if (window.pageYOffset > 100 && window.pageYOffset < 610) {
bgColor = '#ededed';
} else if (window.pageYOffset > 610 && window.pageYOffset < 1431) {
bgColor = 'white';
} else if (window.pageYOffset > 1431) {
bgColor = '#869faa';
}
this.style.backgroundColor = bgColor;
/*
ne pas faire this.style.cssText = `....`;
sinon tu remplace tout le contenu de l'attribut style
*/
}
function initMenuColor(){
if (window.innerWidth > 1025) {
//Si window.innerWidth <= 1025 alors pas besoin de faire un document.querySelector('section')
let sectionActive = document.querySelector('section');
if (!sectionActive.classList.contains("section-page")) {
//Si sectionActive.classList.contains("section-page") == false alors pas besoin de faire un document.getElementById('nav-bar')
let nav = document.getElementById('nav-bar');
//le fait de bind() document.getElementById('nav-bar') ne sera fait qu'une fois
window.addEventListener('scroll', setMenuColor.bind(nav));
}
}
}//fct
window.addEventListener("load", function () {
initMenuColor()
//inita()
//initb()
});
Petite remarque : chez nous (en entreprise) on préfère opter pour la maintenabilité du code.
Mais on minimise toujours le js css et html, on gagne 20 à 30% du poids du ficher si je ne me trompe pas
c'est vrai que avec les fonctions le code est beaucoup plus lisible d'une part et je peux le réutiliser ( vous êtes tous d'accord à ce sujet) donc je vais essayer de toujours avoir ces 2 notions.
Si ta dernière question est: Est-ce une bonne pratique d'appliquer du style (css) depuis un script javascript ?
Oui c'est bien ça mais du coup, comment je peux faire je créé une class css et je l'appelle en JS ?
Mais on minimise toujours le js css et html, on gagne 20 à 30% du poids du ficher si je ne me trompe pas
j’essaie mais c'est pas toujours évident pour une débutant comme moi j'ai déjà compris qu'il faut au maximum faire des fonctions
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
!