Javascript impostato img src


95

Probabilmente mi manca qualcosa di semplice, ma è piuttosto fastidioso quando tutto ciò che leggi non funziona. Ho immagini che possono essere duplicate molte volte nel corso di una pagina generata dinamicamente. Quindi la cosa ovvia da fare è precaricarlo e utilizzare quella variabile come sorgente tutto il tempo.

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

poi ho impostato l'immagine usando

  document["pic1"].src = searchPic;

o

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

Tuttavia, l'immagine non viene mai impostata correttamente in FireBug quando interrogo l'immagine che ottengo [object HTMLImageElement]come srcimmagine

In IE ottengo:

http://localhost:8080/work/Sandbox/jpmetrix/[object]

Risposte:


95

Dovresti impostare src usando questo:

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

o

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

57

JavaScript puro per creare imgtag e add attributesmanualmente,

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);

Imposta src in pic1

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

o con getElementById

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

j-Query per archiviarlo,

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

6
document.getElementById ("pic1") senza #
Gianluca Demarinis

6

Le istanze del costruttore di immagini non sono pensate per essere utilizzate ovunque. Devi semplicemente impostare il src, e l'immagine viene precaricata ... e il gioco è fatto, lo spettacolo è finito. Puoi scartare l'oggetto e andare avanti.

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

è quello che dovresti fare. Puoi comunque usare il costruttore dell'immagine ed eseguire la seconda azione nel onloadgestore del tuo file searchPic. Ciò garantisce che l'immagine venga caricata prima di impostare l' oggetto srcreale img.

Così:

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
}

se imposti src in onload () ottieni un ciclo infinito che martella il server, cioè quando src è stato caricato chiama onload.
David Newcomb

c'è qualcos'altro che non funziona poiché un evento di caricamento può attivarsi solo una volta. Non puoi farlo scattare di nuovo impostando la sorgente sulla stessa immagine.
Bretone

1
Hai ragione, ci sono altri articoli SO che parlano di strani problemi di caching quando "XXXX / YYYY / search.png" è una foto della webcam o qualcosa che cambia sul lato server. Ci hanno suggerito di modificare il collegamento in "XXXX / YYYY / search.png? T = <thedate>". La tua soluzione era la più bella e pulita, quindi ho combinato i due e ha martellato il server.
David Newcomb

@DavidNewcomb Yikes! questo è complicato. In tal caso, penso che abbandonerei la nuova parte Image () e invece avrei due immagini dom reali, come un doppio buffer. nascondi immagine1, nascondi immagine2. in un timer a intervalli: imposta src su immagine1, e in immagine1.onload, mostra 1, nascondi 2. Scatti a intervalli: imposta src su immagine2. in image2.onload, mostra 2, nascondi 1. aspetta, l'intervallo si attiva: imposta src su image1. in image1.onload, mostra 1, nascondi 2- ecc ecc ...
Breton

5

Inoltre, un modo per risolvere questo problema è usare document.createElemente creare il tuo img html e impostare i suoi attributi in questo modo.

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);

NOTA : un punto è che la comunità Javascript in questo momento incoraggia gli sviluppatori a utilizzare selettori di documenti come querySelector, getElementByIde getElementsByClassNamepiuttosto che document ["pic1"].


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

dovrebbe funzionare


1

Non è necessario costruire un'immagine completamente nuova ... l'attributo src prende solo un valore stringa :-)


1
Se la pagina viene generata dinamicamente utilizzando javascript, ti consigliamo di scaricare l'immagine quando la pagina viene caricata in modo da non ottenere un fastidioso ritardo la prima volta che crei un elemento che ne ha bisogno. Questo è il motivo per creare l'oggetto Image.
tvanfosson

Hai ragione, non sono stato molto preciso nella mia risposta. Volevo solo dire che l'attributo src accetta una stringa e mi sono completamente dimenticato del vantaggio di memorizzare nella cache la creazione Imageanticipata dell'on. Grazie!
JorenB

0

Devi impostare

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

La stessa searchPic è la tua immagine (), devi leggere l'src che hai impostato.


0

La tua proprietà src è un oggetto perché stai impostando l'elemento src in modo che sia l'intera immagine che hai creato in JavaScript.

Provare

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

0

Wow! quando si utilizza srcallora srcdi searchPicdeve essere utilizzato anche.

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

sembra migliore


0

Se stai usando WinJS puoi cambiare il srctramite le Utilitiesfunzioni.

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.