Набір javascript img src


96

Мені, мабуть, не вистачає чогось простого, але це досить прикро, коли все, що ви читаєте, не працює. У мене є зображення, які можуть дублюватися багато разів протягом динамічно сформованої сторінки. Очевидне, що потрібно зробити, це попередньо завантажити його та постійно використовувати цю змінну як джерело.

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

то я встановлюю зображення за допомогою

  document["pic1"].src = searchPic;

або

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

Однак зображення ніколи не встановлюється належним чином у FireBug, коли я запитую зображення, яке я отримую [object HTMLImageElement]як srcзображення

В IE я отримую:

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

Відповіді:


96

Ви повинні встановити src, використовуючи це:

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

або

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

58

Чистий JavaScript для створення imgтегу add attributesвручну,

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

Встановіть src pic1

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

або з getElementById

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

j-Запит на архівування цього,

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

6
document.getElementById ("pic1") без #
Джанлука Демарініс

6

Екземпляри конструктора зображень не призначені для будь-якого використання. Ви просто встановлюєте src, і зображення попередньо завантажується ... і все, шоу закінчено. Ви можете відкинути об’єкт і рухатися далі.

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

це те, що ви повинні робити. Ви все ще можете використовувати конструктор зображень і виконати другу дію в onloadобробнику вашого searchPic. Це гарантує, що зображення завантажується перед тим, як встановити srcреальний imgоб'єкт.

Подобається так:

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
}

якщо ви встановите src в onload (), ви отримаєте нескінченний цикл, який забиває сервер, тобто коли src завантажується, він викликає onload.
Девід Ньюкомб

щось інше йде не так, оскільки подія завантаження може запускатися лише один раз. Ви не зможете знову запустити його, встановивши для джерела те саме зображення.
Бретон

1
Ви маєте рацію, є й інші статті SO, які говорять про дивні проблеми кешування, коли "XXXX / YYYY / search.png" - це зображення веб-камери або щось, що змінюється на стороні сервера. Вони запропонували змінити посилання на "XXXX / РРРР / search.png? T = <дата>". Ваше рішення було найкращим і найчистішим, тому я поєднав ці два, і це забило сервер.
Девід Ньюкомб

@DavidNewcomb Yikes! це складно. У такому випадку, я думаю, я б відмовився від нової частини Image () і замість цього мав би два фактичні зображення dom - як подвійний буфер. сховати зображення1, сховати зображення2. в інтервальному таймері: встановити src на image1, а в image1.onload, показати 1, сховати 2. Інтервальні пожежі: встановити src на image2. в image2.onload, show 2, hide 1. wait, інтервал пожеж: встановити src на image1. in image1.onload, show 1, hide 2- etc. etc ...
Бретон

5

Крім того, одним із способів вирішити це є використання document.createElementта створення вашого html img та встановлення його атрибутів таким чином.

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

Зауваження : Одна точка є те , що Javascript співтовариство прямо зараз заохочує розробників селектор використання документів , таких як querySelector, getElementByIdі getElementsByClassNameзамість документа [ «pic1»].



1

Вам не потрібно створювати цілком нове зображення ... атрибут src просто приймає значення рядка :-)


1
Якщо сторінка генерується динамічно за допомогою JavaScript, вам потрібно, щоб зображення було завантажено під час завантаження сторінки, щоб ви не отримували надокучливих затримок при першому створенні елемента, який цього потребує. Ось причина створення об’єкта Image.
tvanfosson

Ви маєте рацію, я не був дуже точним у своїй відповіді. Я просто хотів сказати, що атрибут src бере рядок, і зовсім забув про перевагу кешування, створюючи попереднє Imageвключення. Дякую!
JorenB

0

Вам потрібно встановити

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

Сам searchPic є вашим Image (), вам потрібно прочитати src, який ви встановили.


0

Ваша властивість src є об’єктом, оскільки ви встановлюєте для елемента src ціле зображення, яке ви створили в JavaScript.

Спробуйте

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

0

Оце Так! коли ви використовуєте , srcто srcз searchPicслід використовувати також.

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

виглядає краще


0

Якщо ви використовуєте WinJS, ви можете змінити srcнаскрізні Utilitiesфункції.

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.