Получить новое изображение, которое появляется только при загрузке, если источник изменился

0

У меня возникла проблема, связанная с тем, что предыдущее изображение осталось на экране, пока не будет загружено следующее.

В моей программе используется блок-схема, в которой для определенных вопросов требуются различные изображения. Я использую следующий код для изменения источника от одного к другому.

HTML:

 <img class= 'right' id= 'imageBox' style= 'width: 20%; height: auto;' src= www.1stimage.com/>

JavaScript:

document.getElementById("imageBox").src = 'www.2ndimagesite.com';

Если компьютер имеет медленное соединение, первое изображение может оставаться на экране в течение 10 секунд до появления следующего. Как мне заставить его ничего не отображать, пока он не закончит?

Благодарю.

  • 1
    Используйте маленькое изображение, которое уже будет загружено на вашу страницу, а затем сначала установите для него источник, а затем новое изображение. Например, document.getElementById("imageBox").src='1x1.png'; а затем document.getElementById("imageBox").src = 'www.2ndimagesite.com'; Это создаст впечатление, что «ничего» не так, как вам грустно (хотя <img> технически не может отображать «ничего»).
Теги:
image

3 ответа

1
Лучший ответ

Вы можете немного изменить aproach, чтобы достичь того, чего хотите.

  1. Вы можете предварительно загружать изображения, и после этого просто выберите, какое изображение будет показано. Вы можете узнать об этом подробнее: http://perishablepress.com/3-ways-preload-images-css-javascript-ajax/

  2. Вы можете начать загрузку нового асинхронного изображения и изменить текущее изображение на изображение, например, на загрузку счетчика или изображение, которое показывает, что что-то загружается в данный момент (например: Изображение 174551). В обработчике onload вы переписываете этот счетчик на загруженное изображение.

Я хотел написать ~ то же, что написал @nedt. Кстати, я не думаю, что его код поможет вам. Я думаю, вы достигнете такого же эффекта, как вы сказали в ответ. Во всяком случае, он был первым, и его ответ был близок, поэтому я просто воспользуюсь его примером.

document.getElementById("imageBox").src = "loading image link"; // load spinner

var img = new Image(); // load image asynchronously
var newsrc = 'www.2ndimagesite.com';
img.onload = function () { // onload handler
    document.getElementById("imageBox").src = newsrc;
};
img.src = newsrc;

Таким образом, старое изображение было загружено на загруженной странице. Вы сделали какое-то действие, например нажатую кнопку. Если у вас низкая скорость, будет отображаться загрузочный счетчик и после загрузки нового изображения async будет показано новое изображение. Если у вас достаточно скорости, новое изображение появится сразу.

Надеюсь, что это поможет вам!

  • 0
    Большое спасибо: D. Это решение лучше моего первоначального запроса и работает отлично. Это заняло бы у меня целую вечность, чтобы работать с моим ограниченным знанием JavaScript. Еще раз спасибо :)
1

Предварительно загрузите изображение и обновите src после его загрузки:

var img = new Image();
var newsrc = 'www.2ndimagesite.com';
img.onload = function () {
    document.getElementById("imageBox").src = newsrc;
};
img.src = newsrc;
  • 0
    Этот подход даст тот же эффект, что и автор вопроса сейчас. Это загрузит изображение только тогда, когда новое изображение будет загружено его ПК. Посмотрите эту скрипку: jsfiddle.net/p4Bd7 . setTimeout() необходим для имитации низкоскоростного соединения.
1
document.images[i].complete 

будет истинным, если загружен источник изображения [i]. вы можете предварительно загрузить все снимки, не показывая их до тех пор, пока не изменится статус.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню