Je suis en train de créer un site Web d'entreprise pour un client qui utilise beaucoup de polices personnalisées.
Sur jQuerys DOM-ready, j'effectue des calculs de placement pour déterminer l'endroit où certains menus contextuels avec une largeur et une hauteur dynamiques doivent être placés en fonction de leur contenu dynamique.
Ces calculs échouent, car DOM-ready est déclenché avant l'application de font-face, et les largeurs et hauteurs sont donc incorrectes.
Pour l'instant (pour le prototype), je fais les calculs 500ms après le DOM-ready pour pallier ce problème, mais cela ne peut pas être mis en production pour des raisons évidentes.
Le problème a été observé dans les dernières versions de Firefox et de chrome. IE 8 ne semble pas avoir ce problème, mais DOM-ready se déclenche assez tard, donc le délai est en quelque sorte intégré, je suppose :)
Attendre l'événement de chargement n'est pas une option, donc ma question est la suivante :
Existe-t-il un moyen fiable et inter-navigateurs de détecter l'application d'une police de caractères ?
0 votes
Je ne sais pas si cela peut aider, mais au lieu de faire votre magie sur document.ready, essayez de la faire sur window.load. Cela se déclenche un peu plus tard lorsque les images, etc. sont chargées, mais il peut y avoir un certain scintillement des polices, ce qui semble indésirable.
0 votes
Comme je l'ai déjà dit, attendre l'événement de chargement n'est pas une option.
0 votes
OK, alors qu'utilisez-vous pour appliquer la police de caractères ? Il existe des librairies pour faire ce genre de choses, qui ont peut-être déjà déclenché l'événement approprié au bon endroit. Cufon, FLIR et SIFR sont quelques-unes des bibliothèques dont je me souviens qui sont exactement destinées à gérer le remplacement des polices et je serais étonné qu'elles n'aient pas réussi à résoudre le problème ci-dessus !
0 votes
Les polices personnalisées sont appliquées via css en utilisant @font-face pour la définition (syntaxe fontspring) et les déclarations font-family. Le javascript n'en fait pas partie.
0 votes
Solution JavaScript qui teste la largeur de la chaîne de caractères pour déterminer si la police est déjà visible : stackoverflow.com/questions/12312323/
0 votes
De plus, avec les fonctionnalités de l'ES6, il y a de nouvelles solutions, veuillez voir cette réponse