Набор 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]

Ответы:


97

Вы должны установить 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-Query для архивации этого,

$("#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 / YYYY / search.png? T = <thedate>». Ваше решение было самым красивым и чистым, поэтому я объединил их, и он разбил сервер.
Дэвид Ньюкомб

@DavidNewcomb Ой! это непросто. В этом случае, я думаю, я бы отказался от новой части Image () и вместо этого имел бы два реальных изображения dom - например, двойной буфер. скрыть изображение1, скрыть изображение2. в интервальном таймере: установите src на image1, а в image1.onload, покажите 1, спрячьте 2. Срабатывает интервал: установите src на image2. в image2.onload, показать 2, скрыть 1. ждать, срабатывает интервал: установить src на image1. в image1.onload, показать 1, спрятать 2- и т. д. и т.д ...
Бретон,

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а не document ["pic1"].



1

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


1
Если страница создается динамически с использованием javascript, вам нужно, чтобы изображение загружалось при загрузке страницы, чтобы не возникало раздражающей задержки при первом создании элемента, который в нем нуждается. Это причина создания объекта Image.
tvanfosson 05

Вы правы, я не очень точно ответил. Я просто хотел сказать, что атрибут src принимает строку, и полностью забыл о преимуществе кэширования, заключающемся в Imageпредварительном создании . Благодарность!
JorenB 05

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 через Utilitiesfunctions.

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.