J'ai un formulaire de contact caché qui est déployé en cliquant sur un bouton. Ses champs sont définis comme des images d'arrière-plan CSS, et ils apparaissent toujours un peu plus tard que le div qui a été basculé.
J'utilisais cet extrait dans la <head>
section, mais sans chance (après avoir vidé le cache):
<script>
$(document).ready(function() {
pic = new Image();
pic2 = new Image();
pic3 = new Image();
pic.src="<?php bloginfo('template_directory'); ?>/images/inputs/input1.png";
pic2.src="<?php bloginfo('template_directory'); ?>/images/inputs/input2.png";
pic3.src="<?php bloginfo('template_directory'); ?>/images/inputs/input3.png";
});
</script>
J'utilise jQuery comme bibliothèque, et ce serait cool si je pouvais l'utiliser également pour organiser ce problème.
Merci pour vos réflexions.
Réponses:
Préchargement d'images en utilisant uniquement CSS
Dans le code ci-dessous, je choisis au hasard l'
body
élément, car c'est l'un des seuls éléments garantis d'exister sur la page.Pour que le "truc" fonctionne, nous utiliserons la
content
propriété qui permet confortablement de définir plusieurs URL à charger, mais comme indiqué, le::after
pseudo élément est caché afin que les images ne soient pas rendues:Démo
il vaut mieux utiliser une image sprite pour réduire les requêtes http ... (s'il y a beaucoup d'images de taille relativement petite) et s'assurer que les images sont hébergées là où HTTP2 est utilisé.
la source
body
Cependant, je recommanderais de ne pas appliquer cela à , car ces images seront chargées sur chaque page qui fait référence à la feuille de style. Au lieu de cela, vous devriez utiliser.contact_form:after {...}
ou une autre classe moins globale. Sauf, bien sûr, votre formulaire de contact est sur chaque page;)Je peux confirmer que mon code d'origine semble fonctionner. Je m'en tenais négligemment à une image avec un mauvais chemin.
Voici un test: http://paragraphe.org/slidetoggletest/test.html
la source
Préchargement d'images à l'aide de la balise HTML <link>
Je crois que la plupart des visiteurs de cette question recherchent la réponse "Comment puis-je précharger une image avant le début du rendu de la page?" et la meilleure solution à ce problème consiste à utiliser une
<link>
balise car la<link>
balise est capable de bloquer le rendu ultérieur de la page. Voir préventifCes deux options de valeur de l' attribut
rel
( relation entre le document actuel et le document lié ) sont les plus pertinentes pour le problème:Donc, si vous souhaitez charger une ressource ( dans ce cas, c'est une image ) avant le début du processus de rendu de la
<body>
balise, utilisez:et si vous souhaitez charger une ressource pendant le
<body>
rendu mais que vous prévoyez de l'utiliser ultérieurement de manière dynamique et que vous ne voulez pas déranger l'utilisateur avec le temps de chargement, utilisez:la source
prefetch
lorsque le navigateur est inactif, ce qui est déterminé par l'nsIWebProgressListener
API. Voir ceci pour plus d'informations.<link rel="preload">
ne bloque pas le rendu, je crois que l'auteur a mal compris la définition. Depuis MDN Preloading content avec rel = "preload" , "... que vous voulez commencer à charger tôt dans le cycle de vie de la page, avant que la principale machine de rendu des navigateurs ne démarre." L'idée est que les ressources sont récupérées dès que possible, ce qui augmente la probabilité que la ressource soit disponible en cas de besoin, par exemple lorsqu'un<img>
élément est rendu.http://css-tricks.com/snippets/css/css-only-image-preloading/
Technique n ° 1
Chargez l'image sur l'état normal de l'élément, décalez-la uniquement avec la position d'arrière-plan. Déplacez ensuite la position de l'arrière-plan pour l'afficher en survol.
Technique n ° 2
Si l'élément en question a déjà une image d'arrière-plan appliquée et que vous devez changer cette image, ce qui précède ne fonctionnera pas. En général, vous optez pour un sprite ici (une image d'arrière-plan combinée) et déplacez simplement la position d'arrière-plan. Mais si ce n'est pas possible, essayez ceci. Appliquez l'image d'arrière-plan à un autre élément de page qui est déjà utilisé, mais qui n'a pas d'image d'arrière-plan.
la source
essayez avec ceci:
Avec ce code, vous préchargez l'image d'arrière-plan et effectuez le rendu du formulaire lorsqu'il est chargé
la source
Pour le préchargement des images d'arrière-plan définies avec CSS, la réponse la plus efficace que j'ai trouvée était une version modifiée d'un code que j'ai trouvé qui ne fonctionnait pas:
L'avantage énorme de ceci est que vous n'avez pas besoin de le mettre à jour lorsque vous apportez de nouvelles images d'arrière-plan à l'avenir, il trouvera les nouvelles et les préchargera!
la source
Si vous réutilisez ces images bg n'importe où ailleurs sur votre site pour les entrées de formulaire, vous souhaiterez probablement utiliser un sprite d'image. De cette façon, vous pouvez gérer vos images de manière centralisée (au lieu d'avoir pic1, pic2, pic3, etc ...).
Les sprites sont généralement plus rapides pour le client, car ils ne demandent qu'un seul fichier (quoique légèrement plus gros) au serveur au lieu de plusieurs fichiers. Voir l'article SO pour plus d'avantages:
Sprites d'image CSS
Là encore, cela peut ne pas être utile du tout si vous ne les utilisez que pour un formulaire et que vous ne voulez vraiment les charger que si l'utilisateur demande le formulaire de contact ... cela peut cependant avoir du sens.
http://www.alistapart.com/articles/sprites
la source
que diriez-vous de charger cette image de fond quelque part cachée. De cette façon, il sera chargé lorsque la page est ouverte et ne prendra pas de temps une fois que le formulaire est créé en utilisant ajax:
la source
Vous pouvez utiliser ce plugin jQuery waitForImage ou vous pouvez mettre vos images dans un div caché ou (largeur: 0 et hauteur: 0) et utiliser l'événement onload sur les images.
Si vous n'avez que 2-3 images, vous pouvez lier des événements et les déclencher dans une chaîne afin qu'après chaque image, vous puissiez faire du code.
la source
Le seul moyen est d'encoder l'image en Base64 et de la placer dans le code HTML afin qu'il n'ait pas besoin de contacter le serveur pour télécharger l'image.
Cela encodera une image à partir de l'URL afin que vous puissiez copier le code du fichier image et l'insérer dans votre page comme ceci ...
la source
Lorsqu'il n'y a aucun moyen de modifier le code CSS et de précharger des images avec des règles CSS
:before
ou des:after
pseudo éléments, une autre approche avec du code JavaScript traversant les règles CSS des feuilles de style chargées peut être utilisée. Pour que cela fonctionne, les scripts doivent être inclus après les feuilles de style en HTML, par exemple, avant de fermer labody
balise ou juste après les feuilles de style.la source
Si les éléments de la page et leurs images d'arrière-plan sont déjà dans le DOM (c'est-à-dire que vous ne les créez pas / ne les modifiez pas dynamiquement), alors leurs images d'arrière-plan seront déjà chargées. À ce stade, vous voudrez peut-être examiner les méthodes de compression :)
la source