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]

Respostas:


95

Você deve definir o src usando isto:

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

ou

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

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

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
}

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"].


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

Deveria trabalhar


1

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


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.


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;

0

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

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

parece melhor


0

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

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.