11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour à toute la communauté Smiley cligne

Je solicite votre bienveillance et un peu de votre temps Smiley langue

Etat actuel de la situation :
5 liens pour afficher 5 images différentes à tour de rôle dans une même balise <img> (balise qui est elle-même dans une div).

1 2 3 4 5
|| BLOC IMAGE ||


Voici le code qui change l'image :

function ChangeThumb (id, nom)	{

   if(!document.getElementById) return; // on vérifie si JS
	
	document.getElementById("thumb").style.display = "none";
	document.getElementById("thumb").src = nom+'-0'+id+'.gif';
	
	for (i=1; i<=5; i++){  // on vide le nom de class
		document.getElementById("tn"+i).className = "";
	   } 

	 // on affiche la bonne image et on active le lien en cours
	document.getElementById("thumb").style.display = "inline";
	document.getElementById("tn"+id).className = "activ";
}



Le code pour activer le changement d'état :
<li><a href="reference_uni.html" id="tn1" onClick="ChangeThumb('1', 'img/ref/big/nom_fichier'); return false;" class="activ">1</a></li>


Dans la div qui contient la balise <img>, un background est parametré pour que le chargement de l'image soit indiqué et tout le problème est la !

Lorsque l'internaute clique sur le lien pour changer d'image, l arriere plan ne s'affiche pas, l'image précédente reste jusqu a ce que la suivant soit chargée malgré le document.getElementById("thumb").style.display = "none"; :'(
Modifié par devmike (26 Jan 2007 - 16:14)
salut,
js te permet de faire des preload d'image comme ça:

var myimages=new Array()
function preloadimages(){
for (j=0;j<preloadimages.arguments.length;j++){
myimages[j]=new Image()
myimages[j].src=preloadimages.arguments[j]
}
}
preloadimages("image1.png","image2.png");

Je crois que tu peux aussi le faire en mettant un balise avec une image dans ton html, mais je ne sais pas trop comment.
Modifié par matmat (26 Jan 2007 - 16:00)
Je connais cette méthode, mais ce n'est pas ce que je cherche à faire Smiley cligne
Les images peuvent être assez lourdes, je ne peux pas toutes les précharger au "Load' de la page.

L'idée est que j ai mis ma balise <img> dans une <div> dont le background contient une image de chargement. Ainsi, je souhaite décharger le contenu (src) de l'image pendant que la suivante charge, et ne remplir le contenu de src qu'une fois l'image chargée !

J'ai essayé avec un style.display="none" puis un style.display="inline" mais ce ne marche pas Smiley decu

Merci malgré tout Smiley smile
Modifié par devmike (26 Jan 2007 - 16:13)
ha ok j'avais pas bien compris alors pour faire ça (j'ai reussi a faire ce code grace a ce forum, et il est également utilisé sur lightbox) il faut faire comme ça:


function loadImage(){
  img.style.display = "none";
  ImagesLoader=new Image();
  ImagesLoader.onload = function() {
    img.style.display = "block";
  };
  ImagesLoader.src=img.src;
} 

ou "img" est l'image qui se charge, tu peux ainsi faire des effets d'apparition ou tout simplement pour mettre un loading:

loading.style.display = "inline";
          ImagesLoader=new Image();
          ImagesLoader.onload = function() {
                loading.style.display = "none";
                img.style.display = "inline";
          };
ImagesLoader.src=Lui.href;

ou loading est ton image de loading,
Modifié par matmat (26 Jan 2007 - 16:37)
Je ne comprends pas ce que fait cela (je tente d'intégrer ca, mais c'est pas évident, snif) :


  ImagesLoader=new Image();
  ImagesLoader.onload = function() {
    img.style.display = "block";
  };

  ImagesLoader.src=img.src;


Si tu as un peu de temps à m'offrir, je serai ravi de comprendre Smiley cligne
(sans parler de la seconde partie lol)
Modifié par devmike (26 Jan 2007 - 17:30)
ImagesLoader=new Image();

creer une nouvelle image
ImagesLoader.onload = function() {

commence la fonction quand cette nouvelle image est chargé
img.style.display = "block";

affiche ton image (pas celle crée mais l'originale, qui était oparavant en display:none) tu peux mettre aussi inline, c'est mieux même, vu qu'une image est par défaut en inline.
ImagesLoader.src=img.src;

Et enfin cela indique que imageLoader (qui est l'image créer par js) à la même source que ton image originale, donc quand celle ci est chargée ton image originale aussi. Pourquoi l'instruction "ImagesLoader.onload" doit être aprés , je n'en sait rien (même si Julien Royer à tenté de me l'expliquer je n'est toujours pas compris)

L'autre c'est la même chose sauf que quand l'image n'est pas chargé il affiche l'image du loading, est quand celle-ci est chargée il n'affiche plus le loading, mais l'image
Modifié par matmat (26 Jan 2007 - 18:00)
Bonjour

matmat dans ton 2e message tu expliques 2 manieres différentes pour faire un loading, ou alors est ce un seul script divisé en 2 ?

Si c'est une fonction js qui affiche l'image, alors aucune image n'apparaitra si Javascript est désactivé ?? Ou pas

Enfin je ne comprends pas ou est ce que je met les adresses de mes images, je doit leur mettre un id et remplacer img par cette id ??

J'aimerai utiliser cette fonction qui affiche une image de loading, puis rajouter un fade in quand c'est chargé et je pense que tout bon de code pourrai me permettre de réaliser la premiere partie, mais pour l'instant je n'arrive pas à l'utiliser Smiley lol
a écrit :
Enfin je ne comprends pas ou est ce que je met les adresses de mes images, je doit leur mettre un id et remplacer img par cette id ??

c'est exactement ça, d'abord tu fais ton code html normal et ensuite tu viens agir sur celle ci avec un id par exemple:
function loadImage(){
  var monImage = document.getElementsById('iddemonimage')
  monImage.style.display = "none";
  ImagesLoader=new Image();
  ImagesLoader.onload = function() {
    //ton filtre d'opacitée
    Img.style.display = "block";
  };
  ImagesLoader.src= monImage.src;
}   

Modifié par matmat (29 Jan 2007 - 16:39)
Moi j'ai trouvé ca et ca. Deux solutions que je trouve simple et esthétique mais je ne connais pas toute celles disponibles.

Quelle est la méthode la plus standard et surtout la plus esthétique selon vous?

Quelle méthode serait la plus adapté a mon projet http://qa.nikolours.com/clean j'aimerais mettre une barre de progression en plus après avoir cliqué sur le lien.

Et au passage quel est pour vous le site le plus sympa pour trouver des javascript et voir des démos de ceux ci?? J'ai fait le tour de qqn uns mais je deteste me faire submerger de pub.

D'autre part j'ai vu une solution qui consistait à mettre les images au début du code de mettre un id css preload ou autre et de les afficher avec dimensions de 0. C'est pas vraiment du préchargement ca non? Pas moyen de mettre une barre de progression en plus je suppose?

L'objectif étant de rester standard est ce que le fait d'avoir une barre de progression en flash entre deux pages d'un site peut perturber les solutions d'accessibilités?
Nikolours a écrit :
Quelle méthode serait la plus adapté a mon projet http://qa.nikolours.com/clean j'aimerais mettre une barre de progression en plus après avoir cliqué sur le lien.
En fait tu souhaites préloader tout ton site ??

Nikolours a écrit :
D'autre part j'ai vu une solution qui consistait à mettre les images au début du code de mettre un id css preload ou autre et de les afficher avec dimensions de 0. C'est pas vraiment du préchargement ca non? Pas moyen de mettre une barre de progression en plus je suppose?
Ya pas de barre de progression, moi j'utilise cette technique pour précharger les images on hover des mes boutons, pour pas que ces images se chargent au moment ou on passe la souris devant un bouton par exemple, mais je ne sait pas si c'est une methode des plus propres



Merci mamat pour le script, j'aimerai savoir si c'est possible d'utiliser un fade in qui concerne toutes les images (<img> uniquement et pas celle définies en bg) d'un site, de maniere a toutes les afficher en fade in mais pas simultanément, sur Google je n'ai trouvé que des fade in concernant une seule image, et si on l'applique sur plusieurs images différentes sur la meme page, celle ci apparraissent en même temps...
J'aimerai que les images soit chargées une apres l'autre et donc affichée en fade in une apres l'autre, c'est peut être lourd en javascript de faire ?
Peu-etre avec une boucle qui fade in l'image si image.complete=true et qui cache l'image si = false ?
Modifié par Dynexd (31 Jan 2007 - 12:04)
Dynexd a écrit :
En fait tu souhaites préloader tout ton site ??


En fait oui pourquoi mais en restant "standard" Smiley smile ou au moins les images les plus lourdes si t'as une soluce / doc ca m'interesse pour le chargement du site
Modérateur
Salut,

Une petite mise en garde par rapport au préchargement... Smiley cligne

Imagine que tu aies une connection bas-débit... Pour charger une image, il faudrait peut-être 15sec... (ou plus) Si je passe mes cinquantes images en préchargement, combien de temps crois-tu résister avant de quitter le site ou avorter le préchargement en changeant de page ? Smiley biggrin

Même si tu améliores la rapidité de navigation par la suite, il faut bien te dire que peu de monde va être là pour le voir... Smiley lol

Une alternative est alors de laisser le site se charger normalement, de le rendre pleinement fonctionnel puis, seulement après, d'ajouter une couche Ajax qui ne charge que le strict nécessaire.

C'est ce qui me semble être la meilleure méthode pour rendre service au maximum de visiteurs... en particulier à ceux qui en ont le plus besoin. Smiley smile
MOui enfin dans tout les cas, le mec en 56k il attend autant de temps au final.

Et puis on peut toujours faire un link bas débit ou on fait un joli design css avec le minimum d'images.

Dans ce cas on peut alors mettre un joli preloader pour les haut débit et alors... C'est quoi le mieux??? lol

JE viens d'apprendre CSS+XHTML je me sens pas chaud tout de suite pour me mettre à AJAX Smiley lol
Hello,

Le préchargement a un intérêt limité ou nul en haut débit, et se révèle effectivement dissuasif en bas-débit.

Finalement, il ne sert vaguement à quelque-chose que dans une fourchette intermédiaire réduite.

Par ailleurs:
- pour des images de contenu, il est inutile si ce contenu est correctement architecturé
- pour des images de décoration... Bon, je préfère ne rien dire, je vais encore me fâcher, sinon Smiley cligne

Bref, du bricolage sans grand intérêt.
Modifié par Laurent Denis (31 Jan 2007 - 15:06)
a écrit :
pour des images de contenu, il est inutile si ce contenu est correctement architecturé

Le seul cas (pour l'instant) dans lequel j'ai utilisé ce script c'est pour une gallerie d'images. voilà la raison:
Les images sont relativement lourdes (entre 30 et 60 k, c'est pour un photographe, d'ou la qualité et la taille). Sans ce script quand on clique sur l'image, pendant le temps de chargement de celle ci la précedente reste en place, ce que je trouve déconcertant pour l'utilisateur qui ne voit pas de conséquence immédiate a son action.

a écrit :
Bref, du bricolage sans grand intérêt.

Tout a fait d'accord si c'est pendant le chargement naturel de la page (de toute façon il ya la bare d'avancement du navigateur Smiley lol ). Apés si c'est pour des appels de contenus lourds une fois la page chargée (Ajax ou images, ou les deux) là c'est indispensable.
matmat a écrit :
ce que je trouve déconcertant pour l'utilisateur qui ne voit pas de conséquence immédiate a son action.


Référentiel Opquast a écrit :

Aucun objet multimédia de plus de 50 ko (image ou autre) n'est envoyé sans avertissement préable, prévisualisation ou affichage progressif.


Pensez, en outre, svp, à décliner les images "plein format" en au moins 2 poids/qualité au choix de l'utilisateur. Et laissez-le s'assumer.

/me ne comprendra jamais cette rage de dépenser des ressources inutilement là où on peut laisser l'internaute faire ses choix tout seul...
Modifié par Laurent Denis (31 Jan 2007 - 16:09)
Ouahhhh une réponse de Mosssssieur laurent dennis Smiley smile Honoré

L'interet dans mon cas est purement esthétique, je veux tout simplement que m'a page s'affiche d'un coup et non pas morceaux par morceaux.

http://qa.nikolours.com/clean (apres avoir cliqué sur le lien)

Alors je pourrais faire un preload lambda sans page de transition mais dans l'interet esthétique du site j'aimerai bien passé par une page intermediaire avec barre de progression.

Le seul truc qui me chagrine c'est est ce que cette potentielle page pourrait nuire a l'accessibilité du site (j'ai fait de mon mieux si y a des trucs a retouché chui preneur mais je dois garder le coté esthétique)...

Et je rejoins matmat pour la gallerie tof pour le coté esthétique
Laurent Denis a écrit :


Pensez, en outre, svp, à décliner les images "plein format" en au moins 2 poids/qualité au choix de l'utilisateur. Et laissez-le s'assumer.

/me ne comprendra jamais cette rage de dépenser des ressources inutilement là où on peut laisser l'internaute faire ses choix tout seul...



Dans ce cas ne vaut il mieux pas proposer à l'utilisateur une version allégée en image du site d'entrée de jeu?
a écrit :
Aucun objet multimédia de plus de 50 ko (image ou autre) n'est envoyé sans avertissement préable, prévisualisation ou affichage progressif.

be oui c'est ça tu as une vignette (previsualisation) tu cliques dessus, apparait le loading, puis l'image. L'avertissement c'est clair que c'est mieux, mais déjà que le photographe voulais un design épuré sans titre, je te parle même pas de rajouter le poid...

edit: deux versions avec deux liens sous la vignette, j'aimerais bien mais lui je crois pas... le probléme du design web c'est que souvent c'est pas les webmaster qui font les choix.
Modifié par matmat (31 Jan 2007 - 16:14)
Nikolours a écrit :
Ouahhhh une réponse de Mosssssieur laurent dennis Smiley smile Honoré


Chut ! je suis là incognito.


Nikolours a écrit :
L'interet dans mon cas est purement esthétique, je veux tout simplement que m'a page s'affiche d'un coup et non pas morceaux par morceaux.


L'affichage progressif est un défaut pour certains... maus surtout une fonctionnalité pour beaucoup d'utilisateurs. Il me permet en effet de me rendre compte rapidement de l'intérêt du contenu du site, et de décider si je consacre ou non du temps/de la connection/des sous/etc que je vais consacrer à sa consultation. C'est donc, en fait, l'épreuve de vérité que peu de sites passent actuellement...

Nikolours a écrit :

Le seul truc qui me chagrine c'est est ce que cette potentielle page pourrait nuire a l'accessibilité du site (j'ai fait de mon mieux si y a des trucs a retouché chui preneur mais je dois garder le coté esthétique)...

Et je rejoins matmat pour la gallerie tof pour le coté esthétique

Attention à cette notion d'esthétique en (X)HTML. Flash, par exemple, est certainement un format plus approprié à ce type de problématique. XHTML-CSS, avec ses moyens rudimentaires, est essentiellement utilitaire.

D'autre part, c'est une esthétique assez limitative, dans la mesure où:
- vous la déterminez d'après une situation de rendu du site à peu près unique
- là où, par définition, un site Web est fait pour être rendu dans une incroyable palette de conditions de rendu.

Un beau site n'est pas un site qui s'affiche beau. C'est un site qui se (com)porte beau...
Modifié par Laurent Denis (31 Jan 2007 - 16:50)
Pages :