Bộ Javascript img src


96

Tôi có lẽ đang thiếu một cái gì đó đơn giản nhưng nó khá khó chịu khi mọi thứ bạn đọc không hoạt động. Tôi có những hình ảnh có thể được sao chép nhiều lần trong quá trình của một trang được tạo động. Vì vậy, điều hiển nhiên cần làm là tải trước nó và sử dụng một biến đó làm nguồn mọi lúc.

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

sau đó tôi đặt hình ảnh bằng cách sử dụng

  document["pic1"].src = searchPic;

hoặc là

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

Tuy nhiên, hình ảnh không bao giờ được đặt chính xác trong FireBug khi tôi truy vấn hình ảnh mà tôi nhận được [object HTMLImageElement]srchình ảnh

Trong IE, tôi nhận được:

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

Điều này có thể giúp đỡ stackoverflow.com/questions/4459379/...
Sandeep Amarnath

Câu trả lời:


96

Bạn nên thiết lập src bằng cách sử dụng sau:

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

hoặc là

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

58

JavaScript thuần túy để tạo imgthẻ và add attributestheo cách thủ công,

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

Đặt src trong pic1

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

hoặc với getElementById

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

j-Truy vấn để lưu trữ cái này,

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

6
document.getElementById ( "pic1") mà không #
Gianluca Demarinis

6

Các phiên bản của hàm tạo hình ảnh không được sử dụng ở bất cứ đâu. Bạn chỉ cần đặt src, và tải trước hình ảnh ... và thế là xong, chương trình kết thúc. Bạn có thể loại bỏ đối tượng và tiếp tục.

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

là những gì bạn nên làm. Bạn vẫn có thể sử dụng hàm tạo hình ảnh và thực hiện hành động thứ hai trong onloadtrình xử lý của bạn searchPic. Điều này đảm bảo hình ảnh được tải trước khi bạn đặt srctrên imgđối tượng thực .

Như vậy:

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
}

nếu bạn đặt src trong onload (), bạn sẽ nhận được một vòng lặp vô hạn mà làm sập máy chủ, tức là khi src được tải, nó sẽ gọi onload.
David Newcomb

có điều gì đó khác đang xảy ra vì một sự kiện tải chỉ có thể kích hoạt một lần. Bạn không thể kích hoạt lại nó bằng cách đặt nguồn giống như hình ảnh.
Breton

1
Bạn nói đúng, có những bài báo SO khác nói về các vấn đề bộ nhớ đệm kỳ lạ khi "XXXX / YYYY / search.png" là một pic webcam hoặc một cái gì đó thay đổi ở phía máy chủ. Họ đề nghị chúng tôi thay đổi liên kết thành "XXXX / YYYY / search.png? T = <thedate>". Giải pháp của bạn là đẹp nhất và sạch nhất, vì vậy tôi đã kết hợp cả hai và nó làm hỏng máy chủ.
David Newcomb

@DavidNewcomb Rất tiếc! đó là một khó khăn. Trong trường hợp đó, tôi nghĩ rằng tôi sẽ loại bỏ phần Image () mới và thay vào đó là hai hình ảnh dom thực tế - giống như một bộ đệm kép. ẩn hình ảnh1, ẩn hình ảnh2. trong bộ hẹn giờ ngắt quãng: đặt src trên image1 và trong image1.onload, hiển thị 1, ẩn 2. Kích hoạt khoảng thời gian: đặt src trên image2. trong image2.onload, hiển thị 2, ẩn 1. chờ đợi, kích hoạt khoảng thời gian: đặt src trên image1. trong image1.onload, hiển thị 1, ẩn 2- v.v ...
Breton

5

Ngoài ra, một cách để giải quyết vấn đề này là sử dụng document.createElementvà tạo html img của bạn và đặt các thuộc tính của nó như thế này.

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

LƯU Ý : Một điểm là cộng đồng Javascript ngay bây giờ khuyến khích các nhà phát triển để selectors tài liệu sử dụng như querySelector, getElementByIdgetElementsByClassNamethay vì tài liệu [ "pic1"].



1

Bạn không cần phải tạo một hình ảnh hoàn toàn mới ... thuộc tính src chỉ nhận một giá trị chuỗi :-)


1
Nếu trang được tạo động bằng javascript, bạn sẽ muốn hình ảnh được tải xuống khi trang được tải để bạn không gặp phải sự chậm trễ khó chịu trong lần đầu tiên bạn tạo phần tử cần nó. Đó là lý do tạo đối tượng Image.
tvanfosson

Bạn nói đúng, tôi đã không chính xác trong câu trả lời của mình. Tôi chỉ muốn nói rằng thuộc tính src lấy một chuỗi và hoàn toàn quên mất lợi thế của bộ nhớ đệm của việc tạo Imagetrước. Cảm ơn!
JorenB

0

Bạn cần đặt

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

Bản thân searchPic là Image () của bạn, bạn cần đọc src mà bạn đặt.


0

Thuộc tính src của bạn là một đối tượng bởi vì bạn đang đặt phần tử src là toàn bộ hình ảnh bạn đã tạo trong JavaScript.

Thử

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

0

Chà! khi bạn sử dụng srcthì srccủa searchPiccũng phải được sử dụng.

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

trông tốt hơn


0

Nếu bạn đang sử dụng WinJS, bạn có thể thay đổi srccác Utilitieschức năng.

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.