2011-09-12 44 views
7

Giả sử tôi có hai tab accordion. Người đầu tiên tải hàng trăm hình ảnh và mở khi tải trang.Việc thay đổi thuộc tính src của hình ảnh có ngăn không cho tải hình ảnh xuống không?

Tôi muốn có thể ngừng tải xuống hình ảnh nếu người dùng nhấp vào tab accordion thứ hai. Việc thay đổi các thuộc tính src của hình ảnh qua js có ngăn các hình ảnh tải xuống không? Hoặc làm các yêu cầu chỉ tiếp tục cho đến khi hoàn thành và không hiển thị trên trang?

+0

bạn có ứng dụng trực tuyến không? sử dụng firubug để tìm hiểu hoặc chỉ cần cung cấp cho chúng tôi liên kết và chúng tôi có thể kiểm tra ... Tôi cũng muốn biết câu trả lời :) – Tarek

+0

Bạn có thể thử nó ... –

+0

Tôi tin rằng nó dừng lại nhưng tôi không phải 100%. Tôi đã viết một cái gì đó trong khi trước đây tải rất nhiều hình ảnh như hình thu nhỏ và tôi thao tác DOM trong khi họ đang tải. Tôi đã không thực sự nghĩ đến việc kiểm tra độ khó nhưng tôi có ấn tượng rõ ràng mà họ đã dừng lại. – jambox

Trả lời

2

Tôi có một tập lệnh tải biểu trưng SO trong vòng 3 giây chính xác mà tôi đã thực hiện cho một câu hỏi khác.

http://alexturpin.net/slowimage/slowimage.php

Sử dụng nó, tôi đã cố gắng để tạo lại vấn đề:

var img = new Image(); 
img.onload = function() { 
    alert("loaded"); 
}; 
img.src ="http://alexturpin.net/slowimage/slowimage.php"; 

setTimeout(function() { 
    img.src = ""; 
}, 1000); 

http://jsfiddle.net/Xeon06/RrUvd/1/

Từ những gì tôi thu thập, trong Chrome thì onload không bị sa thải, nhưng trình duyệt tiếp tục hiển thị một spinner và nếu tôi đi trên tab mạng và tìm thấy hình ảnh của tôi và kiểm tra nội dung của nó, nó ở đó. Vì vậy, câu trả lời của tôi sẽ là không, hình ảnh vẫn tải, ít nhất là trong Chrome.

Đây là một vấn đề thú vị, tôi khuyên bạn nên thử và thử nghiệm trong nhiều trình duyệt nhất có thể và viết một số loại bài đăng trên blog lên đó.

+1

Câu hỏi này có thể giúp tìm ra giải pháp: http://stackoverflow.com/questions/930237/javascript-cancel-stop-image-requests –

+0

Sự kiện 'onload' là một vấn đề riêng biệt. – Christian

+1

IE9 và FF6 đều hủy yêu cầu hình ảnh – pepsi

0

Không chắc chắn nếu nó sẽ, giống như các bình luận khác. Nhưng tôi có thể đề nghị phương pháp tiếp cận sẽ hoạt động tốt. Giả sử không phải tất cả các hình ảnh đều hiển thị, chỉ cần đặt thuộc tính src đúng khi chúng hiển thị.

Vì vậy, hãy mặc định url thành myGray.gif khi nó không hiển thị và đặt nó thành myImage.jpg khi nó xuất hiện.

Khi bạn đóng accordion hiện tại, bạn có thể đặt nguồn hình ảnh trở lại gif nhẹ của bạn một lần nữa. (điều này ngăn chặn một lỗi liên quan đến gc trên một số phiên bản của ipad).

+0

Vấn đề vẫn là nếu nó tiếp tục tải hình ảnh, thậm chí đặt nó thành 'myGray.gif' sẽ không dừng nó. –

+0

Vì vậy, hãy ngăn trình duyệt tải tất cả chúng ngay từ đầu (nếu có thể). –

2

Trình duyệt của bạn yêu cầu hình ảnh đó với yêu cầu HTTP GET cụ thể, như được chỉ định trong giao thức HTTP. Sau khi yêu cầu, máy chủ http bắt đầu chuyển.

Vì vậy, nó nằm giữa trình duyệt (như máy khách http) và máy chủ http.

Vì giao thức http không tính đến tùy chọn hủy bỏ chuyển khoản , trình duyệt nên triển khai một cơ chế ngoài chuẩn để hủy bỏ kết nối theo chương trình. Nhưng vì điều này không được chỉ định trong bất kỳ tiêu chuẩn nào, tôi nghĩ bạn sẽ không tìm thấy bất kỳ cách nào để thực hiện điều đó với javascript hoặc bất kỳ mã phía máy khách nào.


Bạn có thể thử window.stop() để ngăn chặn tất cả các yêu cầu, nhưng không phải cá nhân người.


Nếu bạn muốn ngăn chặn một yêu cầu duy nhất cho một hình ảnh lớn, những gì bạn có thể làm là tải hình ảnh vào một tài liệu trong một IFRAME ẩn. Sự kiện tải trọng của IFRAME có thể được sử dụng để tải hình ảnh vào tài liệu chính , lúc đó nó phải được lưu vào bộ nhớ cache (giả sử bạn có chỉ thị bộ nhớ đệm được định cấu hình để thực hiện).

Nếu hình ảnh mất quá nhiều thời gian, khi đó bạn có thể truy cập vào nội dung của IFRAMECách này và đưa ra lệnh dừng cho điều đó.

Bạn cần có nhiều phần tử IFRAME vì có thể yêu cầu đồng thời các hình ảnh có thể yêu cầu .

Lấy trực tiếp từ here & here.

Các vấn đề liên quan