Changer la police d'écriture à l'aide d'un bouton

Résolu/Fermé
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 - 8 nov. 2022 à 22:39
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 - 15 nov. 2022 à 18:52

Bonjour,
J'aimerais coder un bouton sur mon site, un bouton qui me permettrait d'intervertir la police d'écriture choisie (Tongari) par une secondaire (OpenDyslexic - adaptée aux personnes dyslexiques). J'aimerais, lorsque l'on clique sur ce bouton, que le texte de la page, écrit en Tongari soit écrit en OpenDyslexic et inversement, si on reclique sur ce bouton, le texte revienne en Tongari


Je n'ai aucune formation en code, d'habitude je tâtonne avec la console développeur mais ici je ne sais pas comment procéder
Je comptais utiliser l'évènement onclick (je ne sais pas si on peut parler d'évènement ici) puis l'attribut (?) FontFaceSet mais sans succès jusqu'à présent

Par avance, merci

A voir également:

7 réponses

Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023 594
9 nov. 2022 à 18:11

Bonjour,

Oui tu peux utiliser une fonction sur un évenement onclick pour venir changer le style d'un élément ou du document entier

document.body.style.fontFamily = "courier"

// ou pour sélectionner un élément particulier
document.querySelector('.ta-classe')

0
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
Modifié le 9 nov. 2022 à 21:32

Bonjour,
Merci pour la réponse, malheureusement ça ne fonctionne pas, je ne comprends pas pourquoi
Peut-être est-ce parce que j'ai paramétré la police d'écriture Tongari en CSS et qu'il y a un conflit quelque part ?

J'ai également essayé :

document.getElementsByTagName("p")

Sans succès non plus, en écrivant de cette manière :

document.getElementsByTagName('p').style.fontfamily = 'OpenDyslexic'
0
Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023 594
10 nov. 2022 à 01:00

Le CSS est appliqué sur un élément, et c'est cet élément qu'il faut récupérer pour lui changer la police.

Peut-tu nous partager ton CSS et le HTML associé ?

0
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
10 nov. 2022 à 16:59

Voici mon CSS :

@font-face {
  font-family: 'Tongari';
  src: url('https://static1.squarespace.com/static/5d6ffee77121db00017382cf/t/5fadb1f5dd1d4d0520e6013f/1605218805377/tongari-regular.woff')
};

h1, h2, p {
     font-family: 'Tongari';
     color: white;
}

Je précise que j'utilise squaspace
J'ai bien intégré et défini la police OpenDyslexic comme suit :

@font-face {
  font-family: 'OpenDyslexic';
  src: url('https://static1.squarespace.com/static/5d6ffee77121db00017382cf/t/63642c053e07f53779e987b8/1667509253648/OpenDyslexic-Regular.otf')
};

Et concernant le bouton en lui-même j'ai utilisé l'évènement onclick comme ceci :

onclick="document.getElementsByTagName('p').style.fontfamily = 'OpenDyslexic'"
0
Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023 594
Modifié le 10 nov. 2022 à 23:44

Ok merci !

Alors pour l'utilisation de la police, je te recommande ceci :

body {
  font-family: 'Tongari';
}

h1, h2, p {
     color: white;
}

Comme ça tu n'as qu'un élément à cibler par ton JS

onclick="document.querySelector('body').style.fontFamily = 'OpenDyslexic'"

parce que ton getElementsByTagName il renvoie un tableau d'éléments, il faudrait appliquer le .style sur chacun d'entre eux !

J'espère que c'est plus clair maintenant.

(et c'est fontFamily avec la majuscule)

1
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
Modifié le 11 nov. 2022 à 15:00

Oh génial ! Ça marche très bien, merci beaucoup

J'aimerais aller un peu plus loin, est-il possible, de cliquer une nouvelle fois pour revenir à la police d'origine ?
Peut-être qu'il faut écrire une fonction pour cela ?

J'ai pour l'instant défini onclick comme-ci : (ID étant AdaptFont)

onclick="document.querySelector('body').style.fontFamily = 'OpenDyslexic' ;
document.getElementById('AdaptFont').innerHTML = 'Lire avec Tongari' ;
document.getElementById('AdaptFont').style.fontFamily = 'Tongari'"

Je me demandais s'il est possible d'ajouter quelque chose pour réinitialiser le bouton, une sorte de "click again" ou de "unclick"

Est-il possible de rajouter de la "temporalité" dans onclick ? Est-ce que cette ligne suivante pourrait réinitialiser l'évènement ?

document.getElementById('AdaptFont').onclick = null
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
Modifié le 11 nov. 2022 à 15:41

J'ai tenté une fonction mais sans succès, je ne suis pas à l'aise, je ne sais pas trop comment les paramétrer cependant j'ai tenté ceci, sans succès, l'erreur qui m'est renvoyée est "script désactivé" :

<script type="text/javascript">
      function FonctionFont('AdaptFont') {
  if (document.querySelector('body').style.fontFamily = 'Tongari') {
    document.querySelector('body').style.fontFamily = 'OpenDyslexic' ; document.getElementById('AdaptFont').innerHTML = 'Lire avec Tongari' ; document.getElementById('AdaptFont').style.fontFamily = 'Tongari';
  } else {
    document.querySelector('body').style.fontFamily = 'Tongari' ; document.getElementById('AdaptFont').innerHTML = 'Lire avec OpenDyslexic' ; document.getElementById('AdaptFont').style.fontFamily = 'OpenDyslexic';
  }
}
</script>

En ayant paramétré l'évènement onclick comme ceci :

onclick="FonctionFont('AdaptFont')"
0
Grandasse_ Messages postés 924 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 27 avril 2023 594
11 nov. 2022 à 17:22

Deux choses à propos de ton code :

- dans le "if" il faut faire une comparaison (== ou ===) et pas une assertion (=)

- tu as mis un paramètre dans la fonction mais tu ne l'utilises pas :

onclick="maFonction('truc')"

// et le récupérer avec
function maFonction(variableTruc) {
  element.blabla.fontFamily = variableTruc
}
// ou plus simplement une bascule
onclick="toggle()"

function toggle() {
  si police == A:
    assigner la police B
  sinon
    assigner la police A
}

// et une autre fonction pour réinitialiser

onclick="reset()"

// dans laquelle tu mets la police par défaut
1
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
11 nov. 2022 à 18:16

Merci beaucoup, ça fonctionne, tout est ok ! Génial
J'ai utilisé la bascule avec onclick=toggle()

Dans le if existe-t-il une différence entre == et === ? Grossièrement c'est la même chose ?
Ok, je comprends le paramètre non utilisé dans la fonction, merci pour toutes ces précisions et le temps qui m'a été consacré :)

0

Salut,

la différence entre == (compare si égalité) et ===(compare si égalité stricte) est que l'égalité avec == est plus tolérante que l'égalité stricte.

Par exemple avec une égalité "simple" si les deux côtés(à gauche et à droite de double égal) sont égales mais avec une tolérance dans la comparaison:

'0' == 0 //-- compare la chaîne de caractère 0 et le nombre 0 ==> renvoi true

alors que

'0' === 0 //-- une chaîne de caractères est différente d'un nombre ==>renvoi false

Ce n'est qu'un exemple illustrant la différence entre l'égalité "simple" et l'égalité stricte mais il y en a beaucoup d'autres ou le double égal est plus permissif et le triple égal nécessite que les deux termes de la comparaison soient strictement identiques. Donc les deux ont leur utilité selon le contexte(être plus permissif pour tester ou nécessiter une stricte égalité des termes).

Le paramètre c'est ce qu'il y a entre crochet. Cela devrait être une variable et non, une chaîne de caractère. Il est inutile s'il n'est pas utilisé.

 
<span>FonctionFont('AdaptFont')</span>

Plutôt que nommer vos fonctions FontionsFont donner des noms qui signifient quelque chose, une fonction se reconnaît facilement lors de la création puisque précédé du mot clé "function" et quand utilisé le nom est suivit de parenthèse avec ou sans paramètres : FonctionFont(); ou FonctionFont('chaîne de caractères');

Par exemple ici:

function changerFont(){

//--ce que fait la fonction ...

}

et en relisant même dans plusieurs mois(ou par quelqu'un d'autre)  on comprends facilement ce que fait la fonction. C'est une habitude simple et pratique qui rends le code lisible et compréhensible facilement donc autant ne pas s'en priver.

Exemple d'une fonction utilisant un paramètre correctement(et explicitement au passage):

function remplacerFont(nouvellePolice){
document.querySelector('body').style.fontFamily=nouvellePolice

}
//-- s'utilise comme ceci:
remplacerFont('arial')/** attribue au body le style font-family='arial' et remplace ou supplante le précédent */
1
Demotron > Demotron
11 nov. 2022 à 22:44

note: il est mieux de passer par .addEventListener (plutôt que par l'attribut onclick) et d'utiliser des classes pour changer le style, comme déjà indiqué par Grandasse_

Les deux sont plus souples, plus clair et facile à changer.

addEventListener parce que le code n'est pas séparé en 2 parties(une dans les balises script et l'autre en attribut d'une balise HTML), de plus en utilisant une fonction nommé on peut changer ou supprimer ce que fait le bouton par exemple en remplaçant la fonction par une autre dans le addEventListner(il me semble qu'avant d'utiliser un toggle c'était votre première idée). Ce n'est pas vraiment faisable en attribut d'élément HTML (ou alors il faut se compliquer la vie).

En utilisant une classe pour une police et une autre pour l'autre il suffit de chnager le CSS pour changer la police et de plus vous pouvez rajouter d'autres propriétés CSS.

Notez aussi qu'il est important si vous mettez des polices exotiques ou non conventionelles(comme ici) d'ajouter des polices de remplacements.

Si l'utilisateur n'a pas dans les fichiers police de son ordinateur les polices Tongari ou OpenDyslexic cela ne sert strictement à rien puisqu'il ne verra aucunee des polices.

Donc en changeant la classe CSS cela devient plus simple:

.policeBase{

font-family: tongari, arial;

}

policeAlternative{

font-family: OpenDislexic, times;

}

Et donc l'expression dans la fonction devient:

document.querySelector('body').className=policeAlternative;

et pour remettre(et dans un toggle):

document.querySelector('body').className=policeBase;

Plus simple(et plus rapide à taper) que de devoir réécrire les 2 polices à chaque fois en utilisant .style.FontFamily=...

1
Caetera Messages postés 233 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 18 octobre 2024 24
15 nov. 2022 à 18:52

Merci pour toutes ces précisions, c'est très apprécié 

0