Плавная предварительная загрузка крупных фоновых изображений - PullRequest
1 голос
/ 08 июля 2010

У меня есть сайт, который использует крупные (60-100 КБ) фоновые изображения, которые меняются от страницы к странице.

Когда пользователь загружает страницу в первый раз, сначала загружается содержимое страницы, а вскоре после этого появляется фоновое изображение.Это, как я понимаю, предполагаемое поведение в браузерах, но оно делает загрузку страницы довольно «ухабистой» при медленных соединениях.

Я думал о том, чтобы скрыть страницу с загрузочной «маской», которая удаляется JS, когдафоновое изображение загрузилось ... но это все еще довольно уродливый подход.

Как я могу сделать так, чтобы содержимое страницы и фоновое изображение показывались пользователю одновременно?

Ответы [ 3 ]

4 голосов
/ 08 июля 2010

Лучшее решение здесь - попытаться найти способ уменьшить это изображение.Есть несколько хороших инструментов сжатия.Я рекомендую взглянуть на ImageMagick, некоторые специфичные для JPEG инструменты (http://jpegclub.org/) или PNG-специфичные инструменты (http://www.aboutonlinetips.com/optimize-and-compress-png-files/).

). Но чтобы делать то, что вы конкретно просите - скрывайте все на странице, покаготов и затем загрузите его - вы можете использовать jQuery и сделать что-то вроде этого:

$(function(){
    var bgimage = new Image();      
    bgimage.src="{your giant image's URL goes here}";       

    $(bgimage).load(function(){
        $("body").css("background-image","url("+$(this).attr("src")+")").fadeIn();                  
    });
});

Что он делает, это ждет, пока все элементы загрузятся на странице, а затем создаст новый объект Image.Мы указываем источник на ваш файл изображения большего размера. Когда он завершит загрузку, мы изменим фон, чтобы использовать это вновь загруженное изображение, которое должно загружаться немедленно, потому что браузер кэшировал его.

У меня там fadeIn ()Если вы хотите скрыть весь контент на странице, пока он не будет готов. Это означает, что вы должны сделать скрытый.

По какой-то причине fadeIn () работает лучше, чем show () или просто удаляя «скрытый» классс помощью removeClass (), если вы выберете такой подход. При последних двух подходах тег, кажется, изменяет свою высоту, чтобы соответствовать содержимому страницы, котораярезультат в том, что фоновое изображение не отображается полностью.

Честно говоря, я не очень рекомендую такой подход: p

По крайней мере, если вы не собираетесь скрывать всесодержимое на странице, пока оно не будет готово.

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

Более медленная загрузкапросто компромисс для использования больших изображений.

1 голос
/ 08 июля 2010

Вы могли бы использовать URI данных , чтобы смягчить эту проблему в современных браузерах и вернуться к текущей технологии IE 6/7.

1 голос
/ 08 июля 2010

Лучшим способом, вероятно, будет использование jquery и постепенное исчезновение фонового изображения после его загрузки. Также вы можете попробовать предварительно загрузить следующее изображение, прежде чем пользователь нажмет на следующую страницу, чтобы сделать его еще более плавным.

Если вы откладываете показ контента до тех пор, пока изображение не покажет, оно просто будет раздражать ваших пользователей. Они (вероятно) первичны для информации, поэтому никогда не трогайте ничего, что задерживает этот процесс.

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

...