11519 sujets

JavaScript, DOM et API Web HTML5

Bonsoir à tous !

En faite à la base j'ai un script qui affiche une image avec une largeur et hauteur fixe (en pixel donc).

J'ai ensuite créer un deuxième script qui détecte si la hauteur de l'image de mon script précédent a bien la hauteur mentionner, sinon j'en affiche une autre car je considère que le contenu ne s'affiche pas, mais le soucis c'est que mon image alternative ne s'affiche pas quand le contenu ne s'affiche pas !

Voici le code en question :

jQuery(document).ready(function(){
	if (jQuery('#test').height() == 0) {
	document.getElementById("test").innerHTML ='<img class="img" src="image_alternative.jpg"/>';
	}
});


Comment remédier au problème ? merci d'avance ! Smiley smile
Modifié par Ornitorink (30 Mar 2014 - 21:43)
salut,
tout ça n'est vraiment clair à mon sens. Pourquoi tu fais une aussi grande gymnastique quand tu peux directement passer par les évènement JS appropriés comme "onerror" ou "onabort" pour vérifier si l'image a bien été chargée.
De plus, on ne sait pas trop à quoi fait référence l'ID "test" dans cet exemple (il aurait fallu joindre le HTML correspondant) mais il faut que tu saches qu'avec .innerHTML, tu es entrain d'effacer tout le contenu de cet élément pour y écrire la ligne entre guillemet. Tu pourrais aussi faire les choses plus proprement en passant par "createElement" et "appendChild".
Salut,

Je début en JS alors je ne sais pas trop comment m'y prendre pour que ça marche correctement.

Voila mon code en un peu plus complet :

<div id="test">
<script src="script contenant plein de truc dont une bannière fixé en pixel.js"></script>
<script type="/text/javascript">
jQuery(document).ready(function(){
	if (jQuery('#test').height() == 0) { //Si la hauteur de mon image dans mon fichier .js est à 0, c'est que le contenu ne s'affiche pas ou que le .js a été remove, donc j'affiche une autre image.
	document.getElementById("test").innerHTML ='<img class="img" src="image_alternative.jpg"/>';
	}
});
</script>
</div>


J'espère que c'est plus clair, je voulais le faire en PHP mais c'est pas possible de détecter une image qui est dans un fichier alors obliger de me rabattre sur du JS mais j'ai un peu de mal...
Modifié par Ornitorink (31 Mar 2014 - 16:40)
Mais à quel moment tu inclus ton image dans la div ?
Dans mon idée, c'était plus dans le genre

<div id="test">
	<img src="image.jpg" alt="" />
</div>
<script type="text/javascript">
	var testImg = document.querySelector("#test img");
	
	testImg.onerror = function (){
		testImg.src = "image_alternative.jpg";
	}
</script>


PS: on met de préférence le script en fin de fichier, voir d'une manière plus propre dans un fichier à part.
Tu as mal lus mon message ou pas compris, mon image s'affiche bien dans la div mais elle se trouve dans un fichier .js, je ne veux pas l'afficher directement dans une balise basique sinon ça n'a aucun intérêt de l'avoir mit dans un script.

Dans le fichier javascript en question, il y a plusieurs valeur, donc une hauteur comme par exemple "height:60", et je veux ajouter dans un deuxième script à part une condition qui me dise SI la hauteur est inférieur à 60 alors je considère que le contenu ne s'affiche pas donc que le script n'existe pas ou n'est pas chargé et j'affiche une autre image.

Sinon je met toujours mes scripts dans un fichier .js, j'en fait généralement plusieurs pour mieux m'y retrouver, c'est juste que ici c'est pour montrer ce que je cherche à faire ^^
Modifié par Ornitorink (31 Mar 2014 - 18:01)
Je ne comprend effectivement pas grand chose à ce que tu dis et tu n'aides pas franchement. Ou alors je dois être fatigué mais dans tous les cas mon cerveau a du mal à mettre en image tout ça.
Je te montre un autre exemple, si tu comprends toujours pas je vois pas ce que je peux faire de plus pour t'expliquer Smiley confus

<div id="test">
<script src="image.js"></script><!--Fichier javascript contenant plein de chose dont une image fixé par un width et un height et qui a pour résultat final d'afficher une "simple" image (ça fonctionne parfaitement bien).
Je veux ensuite faire un autre script (dans la même div donc) qui aura pour but de détecter si le contenu juste avant s'affiche et si ça n'est pas le cas, j'affiche une image alternative. 
J'ai donc essayer sa :-->
<script type="text/javascript">
jQuery(document).ready(function(){ //Pas sur que ça soit utile, je veux juste détecter le plus rapidement possible.
	if (jQuery('#test').height() == 0) { //Je pose une condition pour savoir si ma div à une hauteur (c'est à dire mon image), si "image.js" ne s'affiche pas cela aura pour effet de ne pas appliquer de hauteur et que j'en déduis que le contenu s'affiche pas ou a été bloquer.
	document.getElementById("test").innerHTML ='<img class="img" src="image_alternative.jpg"/>'; //Donc j'affiche une image à la place de "image.js", mais elle ne s'affiche pas.
	}
});
</script>
</div>


Je peux pas expliquer mieux Smiley sweatdrop
Modifié par Ornitorink (31 Mar 2014 - 18:34)
Alors tu m'as embrouillé pour rien. L'exemple que j'ai donné précédemment était juste pour dire qu'au lieu de passer par une détection de hauteur/largeur, tu peux tout simplement passer par un évènement JS lié à l'image "onerror" (par exemple) qui te permettra de vérifier si l'image a bien été chargée.
De plus, tu peux tout de même mettre une balise <img> contenant une image transparent d'un pixel que tu remplaceras ensuite via ton script (dont d'ailleurs la démarche m'intrigue). Pourquoi le script doit placer une image ?
Et pour être tout à fait franc, tes explications ne sont pas si limpides que ça. Si c'est évident pour toi, dis-toi que ça ne l'est pas forcément pour ceux qui tentent de comprendre.
Au passage, ce n'est pas la peine de mettre ton script dans la <div>, ça serait même préférable qu'il soit en fin de document.
Oui c'est pas facile d'expliquer aux autres certaines choses, ça parait évident pour certain et compliqué pour d'autres je te l'accordes.

Je ne peux pas placer mon script d'image en bas de page car j'ai besoin que mon image s'affiche à un endroit spécifique de la page, c'est une image "complexe" j'effectue des modifications spécifiques sur celle ci c'est pour ça que c'est dans un fichier JavaScript, ça ne peut pas fonctionner autrement que comme ça.

Je ne peux pas non plus passer par "onerror" car si l'image ne s'affiche pas et que ça ne détecte pas d'erreur ça ne fonctionnera pas, il faut une méthode qui me permette d'être sur dans toutes les circonstances que le script ne fonctionne pas correctement (et j'ai trouver que l'astuce de la hauteur), mais si tu as mieux et que ça marche je suis preneur.
Modifié par Ornitorink (31 Mar 2014 - 20:04)
Bon, j'ai l'impression que ça va être compliqué.
La place du script n'influe en rien le fait que tu puisses mettre ton image dans la <div> #test. Pour une question d'optimisation, celui-ci doit être en fin de document.
La possibilité que l'évènement "onerror" ne t'indique pas que ton image n'a pas été chargée est la même que la gymnastique que tu utilises. Si cet évènement est présent, c'est pour te permettre cela et t'éviter d'inventer des choses.
Aussi complexe que soit le traitement que tu réalises (qui m'intrigue d'ailleurs toujours autant), tu peux, comme je l'ai dis précédemment, placer une image transparente de 1 pixel dans une balise <img> que tu changes ensuite via ton script.

<div id="test">
	<img src="blank.png" alt="" />
</div>
<script type="text/javascript">
	var testImg = document.querySelector("#test img");
	
	testImg.onerror = function (){
		testImg.src = "image-alternative.jpg";
	}
	
	// Une fois que tout est prêt, tu changes le "src" de l'image
	testImg.src = "image-par-defaut.jpg";
</script>

Maintenant si tu restes aussi catégorique sur tes avis, je pense que mes messages ne serviront plus à grand chose Smiley ohwell .
La citation dans ta signature résume le contenu de mon script, et si je met mon script en fin de document mon image s'affichera aussi en fin de document, ce n'est pas ce que je veux.

Dit toi que dans mon script il y a une image "dynamique" ou plutôt un code complexe qui permet d'afficher une sorte d'animation et qu'il n'est pas possible de séparer le code de l'image sous forme d'extension basique sous peine de ne rien voir s'afficher.

Je ne peux pas afficher mon image avec du .jpg, .png ou autre, c'est obligatoirement dans un fichier .JS pour que ça marche, tu comprends ?

C'est pour cette raison que je test si mon script "s'affiche" car "l'image" c'est le script en lui même en quelque sorte.

J'ai donc quelque chose comme ça :

<body>
<!--Blabla contenu-->
<div id="test">
<script src="image.js"></script>
</div>
<!-- Blabla contenu -->
<script src="detection.js"></script>
</body>


Bien entendu le "detection.js" c'est le code JS que je t'es montrer.

Seulement bien sur si je suis la c'est que mon script de détection fonctionne pas, enfin il marche mais seulement avec un document.write mais comme tu dois le savoir ça remplace toute la page html par le contenu du document.write ce qui n'est pas bon et je n'arrive pas à trouver une alternative.

Et je ne vois pas ou tu veux en venir avec ton image transparente, en quoi ça va m'aider de remplacer une image transparente par une image contenu dans un script si ce script n'est pas charger ? on n'en revient au même point que ya rien qui s'affiche quand mon script "image.js" n'est pas charger ou que l'image dedans ne s'affiche pas Smiley ohwell
Modifié par Ornitorink (31 Mar 2014 - 22:37)
Bonjour !

Je me permets de répondre à nouveau car j'ai résolu tout seul mon problème.

Vu que je ne peux pas récupérer la hauteur, et que mon image dynamique passe par un iframe pour être afficher, j'ai donc fait ceci qui fonctionne à merveille :

function MaFonction() {

    if(document.getElementsByTagName("iframe").item(0) == null)
        {
            document.getElementById("MaDiv").innerHTML = 'Le contenu est bloquer, j\'affiche une image alternative';
	}
	
}

window.setTimeout('MaFonction()', 1500); // Ça ne se charge pas aussitôt, je mets donc un timer pour être sur que le contenu à été pleinement chargé avant l’exécution du script. 

Modifié par Ornitorink (19 May 2014 - 15:39)