Zestaw Javascript img src

96

Prawdopodobnie brakuje mi czegoś prostego, ale jest to dość denerwujące, gdy wszystko, co czytasz, nie działa. Mam obrazy, które mogą być wielokrotnie powielane w trakcie dynamicznie generowanej strony. Więc oczywistą rzeczą jest wstępne załadowanie go i używanie tej jednej zmiennej jako źródła przez cały czas.

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

następnie ustawiłem obraz za pomocą

  document["pic1"].src = searchPic;

lub

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

Jednak obraz nigdy nie jest poprawnie ustawiany w FireBug, kiedy odpytuję obraz, który otrzymuję [object HTMLImageElement]jako srcobraz

W IE otrzymuję:

http://localhost:8080/work/Sandbox/jpmetrix/[object]
Alexis Wilke
źródło
Może to pomóc stackoverflow.com/questions/4459379/…
Sandeep Amarnath

Odpowiedzi:

97

Powinieneś ustawić src używając tego:

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

lub

$("#pic1").attr("src", searchPic.src);
Richard
źródło
58

Czysty JavaScript do tworzenia imgtagu i add attributesręcznie,

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

Ustaw src w pic1

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

lub z getElementById

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

j-Query, aby zarchiwizować to,

$("#pic1").attr("src", searchPic.src);
Jay Patel
źródło
6
document.getElementById ("pic1") bez #
Gianluca Demarinis
6

Instancje konstruktora obrazu nie są przeznaczone do nigdzie używane. Wystarczy ustawić src, a obraz zostanie wstępnie załadowany ... i to wszystko, koniec pokazu. Możesz odrzucić obiekt i przejść dalej.

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

to co powinieneś robić. Nadal możesz użyć konstruktora obrazu i wykonać drugą akcję w onloadmodule obsługi twojego searchPic. Gwarantuje to, że obraz zostanie załadowany przed ustawieniem srcrzeczywistego imgobiektu.

Tak jak to:

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
źródło
jeśli ustawisz src w onload (), otrzymasz nieskończoną pętlę, która hamuje serwer, tj. gdy src zostanie załadowany, wywołuje onload.
David Newcomb,
jest coś innego, ponieważ zdarzenie ładowania może zostać uruchomione tylko raz. Nie możesz uruchomić go ponownie, ustawiając źródło na ten sam obraz.
Breton,
1
Masz rację, są inne artykuły SO, które mówią o dziwnych problemach z buforowaniem, gdy „XXXX / YYYY / search.png” jest zdjęciem z kamery internetowej lub czymś, co zmienia się po stronie serwera. Zasugerowali, abyśmy zmienili link na „XXXX / YYYY / search.png? T = <thedate>”. Twoje rozwiązanie było najładniejsze i najczystsze, więc połączyłem je i zepsuło serwer.
David Newcomb
@DavidNewcomb Yikes! to jest trudne. W takim przypadku myślę, że porzuciłbym nową część Image () i zamiast tego miałbym dwa rzeczywiste obrazy DOM - jak podwójny bufor. ukryj obrazek1, ukryj obrazek2. w liczniku interwałów: ustaw src na image1, a w image1.onload, pokaż 1, ukryj 2. Interval fires: ustaw src na image2. w image2.onload, show 2, hide 1. wait, interwał pożarów: ustaw src na image1. w image1.onload, show 1, hide 2- etc. etc ...
Breton
5

Jednym ze sposobów rozwiązania tego problemu jest również użycie document.createElementi utworzenie pliku HTML img i ustawienie jego atrybutów w ten sposób.

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

UWAGA : Jeden punkt jest to, że JavaScript społeczność zachęca teraz deweloperom wykorzystanie selektorów dokumentów takich jak querySelector, getElementByIda getElementsByClassNamezamiast dokumentu [ „Pic1”].

ambodi
źródło
2
document["pic1"].src = searchPic.src

powinno działać

Nir Levy
źródło
1

Nie musisz tworzyć zupełnie nowego obrazu ... atrybut src przyjmuje po prostu wartość ciągu :-)

JorenB
źródło
1
Jeśli strona jest generowana dynamicznie za pomocą JavaScript, będziesz chciał, aby obraz był pobierany po załadowaniu strony, aby uniknąć irytującego opóźnienia przy pierwszym utworzeniu elementu, który tego potrzebuje. To jest powód utworzenia obiektu Image.
tvanfosson
Masz rację, moja odpowiedź nie była zbyt precyzyjna. Chciałem tylko powiedzieć, że atrybut src przyjmuje ciąg znaków i całkowicie zapomniałem o zaletach buforowania wynikającego z Imagewcześniejszego utworzenia on. Dzięki!
JorenB,
0

Musisz ustawić

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

Sam searchPic jest twoim Image (), musisz przeczytać ustawione src.

Mat Mannion
źródło
0

Twoja właściwość src jest obiektem, ponieważ ustawiasz element src na cały obraz utworzony w JavaScript.

Próbować

document["pic1"].src = searchPic.src;
Cᴏʀʏ
źródło
0

Łał! podczas korzystania srcnastępnie srcod searchPicmuszą być stosowane również.

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

wygląda lepiej

Dewfy
źródło
0

Jeśli używasz WinJS , możesz zmienić srcza pomocą Utilitiesfunkcji.

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Beanwah
źródło