Javascript definido img src

95

Provavelmente estou perdendo algo simples, mas é muito chato quando tudo que você lê não funciona. Tenho imagens que podem ser duplicadas muitas vezes ao longo de uma página gerada dinamicamente. Portanto, a coisa óbvia a fazer é pré-carregá-lo e usar essa variável como fonte o tempo todo.

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

então eu defino a imagem usando

  document["pic1"].src = searchPic;

ou

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

No entanto, a imagem nunca é definida corretamente no FireBug quando eu consulto a imagem que obtenho [object HTMLImageElement]como o srcda imagem

No IE eu obtenho:

http://localhost:8080/work/Sandbox/jpmetrix/[object]
Alexis Wilke
fonte
Isso pode ajudar stackoverflow.com/questions/4459379/…
Sandeep Amarnath

Respostas:

95

Você deve definir o src usando isto:

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

ou

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

JavaScript puro para criar 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);

Definir src em pic1

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

ou com getElementById

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

j-Query para arquivar isso,

$("#pic1").attr("src", searchPic.src);
Jay Patel
fonte
6
document.getElementById ("pic1") sem #
Gianluca Demarinis
6

As instâncias do construtor de imagem não devem ser usadas em qualquer lugar. Você simplesmente configura src, e os pré-carregamentos de imagem ... e pronto , o show acabou. Você pode descartar o objeto e seguir em frente.

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

é o que você deveria estar fazendo. Você ainda pode usar o construtor de imagem e executar a segunda ação no onloadmanipulador de seu searchPic. Isso garante que a imagem seja carregada antes de definir srcno imgobjeto real .

Igual a:

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
}
Bretão
fonte
se você definir src em onload (), você obterá um loop infinito que martela o servidor, ou seja, quando src for carregado, ele chamará onload.
David Newcomb
há algo mais errado, pois um evento de carregamento só pode ser disparado uma vez. Você não pode fazer com que ele seja acionado novamente configurando a fonte para a mesma imagem.
bretão
1
Você está certo, existem outros artigos de SO que falam sobre problemas estranhos de cache quando "XXXX / YYYY / search.png" é uma imagem de webcam ou algo que muda no lado do servidor. Eles sugeriram que mudássemos o link para "XXXX / YYYY / search.png? T = <thedate>". Sua solução foi a mais agradável e limpa, então combinei as duas e martelou o servidor.
David Newcomb
@DavidNewcomb Caramba! isso é complicado. Nesse caso, acho que abandonaria a nova parte Image () e, em vez disso, teria duas imagens dom reais - como um buffer duplo. ocultar imagem1, ocultar imagem2. em um temporizador de intervalo: definir src em image1 e em image1.onload, mostrar 1, ocultar 2. Intervalo disparos: definir src em image2. em image2.onload, mostrar 2, ocultar 1. esperar, intervalo disparado: definir src na imagem1. em image1.onload, mostrar 1, ocultar 2- etc. etc ...
Breton
5

Além disso, uma maneira de resolver isso é usar document.createElemente criar seu img html e definir seus atributos desta forma.

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

OBSERVAÇÃO : um ponto é que a comunidade Javascript agora incentiva os desenvolvedores a usarem seletores de documentos como querySelector, getElementByIde em getElementsByClassNamevez de document ["pic1"].

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

Deveria trabalhar

Nir Levy
fonte
1

Você não precisa construir uma imagem totalmente nova ... o atributo src apenas leva um valor de string :-)

JorenB
fonte
1
Se a página for gerada dinamicamente usando javascript, você desejará que a imagem seja baixada quando a página for carregada, para não obter um atraso irritante na primeira vez que criar um elemento que precisa dela. Essa é a razão para criar o objeto Image.
tvanfosson
Você está certo, não fui muito preciso na minha resposta. Só queria dizer que o atributo src pega uma string e esqueci totalmente da vantagem do cache de criar o Imageon de antemão. Obrigado!
JorenB
0

Você precisa definir

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

O searchPic em si é sua Image (), você precisa ler o src que definiu.

Mat Mannion
fonte
0

Sua propriedade src é um objeto porque você está definindo o elemento src para ser a imagem inteira que você criou em JavaScript.

Experimentar

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

Uau! quando você usa srcentão srcde searchPicdeve ser usado também.

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

parece melhor

Orvalhado
fonte
0

Se estiver usando o WinJS, você pode alterar srcas Utilitiesfunções.

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