2013-11-14 3 views
0

Вот мой тег для изображения. Изображение представляет собой график, который динамически генерируется из базы данных. Объем данных может варьироваться в зависимости от количества. Иногда он загружается менее чем за секунду и в другое время, когда может отображаться до 6 или 7 секунд, пока изображение графика не будет отображаться. То, что я хочу сделать, это показать простой держатель места gif, пока это фактическое изображение не будет загружено.Как я могу асинхронно загружать изображение на загрузку страницы и отображать загружаемый gif во время загрузки?

<img src="@Url.Action("Graph", new { id = Model.ID })" alt="Graph is Loading..." /> 
+0

можно дублировать http://stackoverflow.com/questions/15826158/how-to-load-gif-image-while-ajax-content-is-loading-and- javascript? rq = 1 – Alex

+0

http://stackoverflow.com/questions/16810423/show-spinning-wheel-image-till-the-full-page-loads?rq=1 – Alex

+0

Направьте src в placeholder и укажите URL-адрес графика в атрибут данных. Затем, в готовом документе, создайте новое скрытое изображение, дайте ему обработчик нагрузки, который скрывает местозаполнитель и показывает себя, а затем установите src изображения на график. –

ответ

3

Игнорирования вашего ASP полностью, вы можете добавить элемент с загрузчиком в качестве источника и реального изображения в качестве атрибута данных, а затем загрузить изображение с JavaScript и замены изображения после загрузки реального изображения:

<img src="loader.gif" data-src="/images/menubar.png" /> 

JS поджимать

$('img').each(function() { 
    var self = this, 
     src = $(self).data('src'), // get the data attribute 
     img = new Image();   // create a new image 

    img.onload = function() {  // onload 
     self.src = this.src;  // swap the source 
    } 

    img.src = src;     // set source of new image 

    if (this.complete) $(this).load(); 
}); 
+0

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

+0

@KevinB - Да, правильное кэширование должно быть включено, иначе оно просто сгенерирует изображение снова, и предварительная загрузка на самом деле не принесет много пользы. На мой взгляд, серверный сервер должен быть отправлен для отправки правильных заголовков, если это проблема, но взломать может быть использование двух тегов изображений и переключение видимости при загрузке изображения, но скрытое изображение не загружается в большинстве браузеров, так что для решения, вероятно, потребуется много хакеров для работы. – adeneo

+0

Можете ли вы рассказать мне, как сделать это с помощью одного изображения? Это работает на всех изображениях на странице справа? – TheColonel26

Смежные вопросы