Jeu Javascript img src

96

Il me manque probablement quelque chose de simple mais c'est assez ennuyeux quand tout ce que vous lisez ne fonctionne pas. J'ai des images qui peuvent être dupliquées plusieurs fois au cours d'une page générée dynamiquement. Donc, la chose évidente à faire est de le précharger et d'utiliser cette variable comme source tout le temps.

var searchPic;
function LoadImages() {
    searchPic = new Image(100,100);
    searchPic.src = "XXXX/YYYY/search.png";
    // This is correct and the path is correct
}

puis je règle l'image en utilisant

  document["pic1"].src = searchPic;

ou

  $("#pic1").attr("src", searchPic);

Cependant, l'image n'est jamais définie correctement dans FireBug lorsque j'interroge l'image que j'obtiens en [object HTMLImageElement]tant que srcde l'image

Dans IE, j'obtiens:

http://localhost:8080/work/Sandbox/jpmetrix/[object]
Alexis Wilke
la source
Cela pourrait aider stackoverflow.com/questions/4459379/…
Sandeep Amarnath

Réponses:

96

Vous devriez définir le src en utilisant ceci:

document["pic1"].src = searchPic.src;

ou

$("#pic1").attr("src", searchPic.src);
Richard
la source
58

JavaScript pur pour créer une imgbalise et add attributesmanuellement,

var image = document.createElement("img");
var imageParent = document.getElementById("body");
image.id = "id";
image.className = "class";
image.src = searchPic.src;            // image.src = "IMAGE URL/PATH"
imageParent.appendChild(image);

Définir src dans pic1

document["#pic1"].src = searchPic.src;

ou avec getElementById

document.getElementById("pic1").src= searchPic.src;

j-Query pour archiver ceci,

$("#pic1").attr("src", searchPic.src);
Jay Patel
la source
6
document.getElementById ("pic1") sans #
Gianluca Demarinis
6

Les instances du constructeur d'image ne sont pas destinées à être utilisées n'importe où. Vous définissez simplement le src, et l'image se précharge ... et c'est tout, le spectacle est terminé. Vous pouvez jeter l'objet et passer à autre chose.

document["pic1"].src = "XXXX/YYYY/search.png"; 

est ce que vous devriez faire. Vous pouvez toujours utiliser le constructeur d'image et effectuer la deuxième action dans le onloadgestionnaire de votre searchPic. Cela garantit que l'image est chargée avant de définir srcsur l' imgobjet réel .

Ainsi:

function LoadImages() {
    searchPic = new Image();
    searchPic.onload=function () {
        document["pic1"].src = "XXXX/YYYY/search.png";
    }
    searchPic.src = "XXXX/YYYY/search.png"; // This is correct and the path is correct
}
Breton
la source
si vous définissez src dans onload (), vous obtenez une boucle infinie qui martèle le serveur, c'est-à-dire que lorsque src a été chargé, il appelle onload.
David Newcomb
il y a autre chose qui ne va pas car un événement de chargement ne peut se déclencher qu'une seule fois. Vous ne pouvez pas le redémarrer en réglant la source sur la même image.
Breton
1
Vous avez raison, il y a d'autres articles SO qui parlent de problèmes de cache bizarres lorsque le "XXXX / YYYY / search.png" est une photo de webcam ou quelque chose qui change du côté du serveur. Ils ont suggéré que nous changions le lien en «XXXX / YYYY / search.png? T = <thedate>». Votre solution était la plus belle et la plus propre, alors j'ai combiné les deux et cela a martelé le serveur.
David Newcomb le
@DavidNewcomb Yikes! c'est une question délicate. Dans ce cas, je pense que j'abandonnerais la nouvelle partie Image (), et aurais à la place deux images de dom réelles - comme un double tampon. cacher l'image1, cacher l'image2. dans un minuteur d'intervalle: réglez src sur image1, et dans image1.onload, affichez 1, masquez 2. Interval fires: réglez src sur image2. dans image2.onload, afficher 2, masquer 1. attendre, intervalles de déclenchement: définir src sur image1. dans image1.onload, afficher 1, masquer 2- etc etc ...
Breton
5

De plus, une façon de résoudre ce problème est d'utiliser document.createElementet de créer votre img html et de définir ses attributs comme ceci.

var image = document.createElement("img");
var imageParent = document.getElementById("Id of HTML element to append the img");
image.id = "Id";
image.className = "class";
image.src = searchPic.src;
imageParent.appendChild(image);

REMARQUE : Un point est que la communauté Javascript encourage actuellement les développeurs à utiliser des sélecteurs de documents tels que querySelector, getElementByIdet getElementsByClassNameplutôt que document ["pic1"].

ambodi
la source
2
document["pic1"].src = searchPic.src

devrait marcher

Nir Levy
la source
1

Vous n'avez pas besoin de construire une toute nouvelle image ... l'attribut src prend juste une valeur de chaîne :-)

JorenB
la source
1
Si la page est générée dynamiquement en utilisant javascript, vous voudrez que l'image soit téléchargée lorsque la page est chargée afin de ne pas obtenir un retard ennuyeux la première fois que vous créez un élément qui en a besoin. C'est la raison de la création de l'objet Image.
tvanfosson
Vous avez raison, je n'ai pas été très précis dans ma réponse. Je voulais juste dire que l'attribut src prend une chaîne, et j'ai totalement oublié l'avantage de la mise en cache de la création Imagepréalable de on. Merci!
JorenB
0

Vous devez définir

document["pic1"].src = searchPic.src;

Le searchPic lui-même est votre Image (), vous devez lire le src que vous avez défini.

Mat Mannion
la source
0

Votre propriété src est un objet, car vous définissez l'élément src comme l'image entière que vous avez créée en JavaScript.

Essayer

document["pic1"].src = searchPic.src;
Cᴏʀʏ
la source
0

Hou la la! lorsque vous utilisez srcalors srcde searchPicdoit être utilisé également.

document["pic1"].src = searchPic.src

regarde mieux

Dewfy
la source
0

Si vous utilisez WinJS, vous pouvez modifier srcles Utilitiesfonctions via .

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Beanwah
la source