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.