2009-02-03 2 views
5

в CSS, как это:откладывает загрузку определенного CSS фонового изображения

... 
#big-menu { 
    background: #fff url(../images/big-menu.jpg) no-repeat; 
} 
#some-menu { 
    background: #fff url(../images/some-menu.jpg) no-repeat; 
} 
#some-other-menu { 
    background: #fff url(../images/some-other-menu.jpg) no-repeat; 
} 
... 

есть способ, чтобы задержать загрузку фонового изображения #big-menu «s, так что он загружает после всего остального, включая все изображений в HTML и любых других фонах CSS (some-menu и some-other-menu).

Причина в том, что big-menu.jpg очень тяжелый размер, и я хочу, чтобы он был загружен последним. В конце концов, он просто служит глазной конфеткой, и есть другие фоновые изображения, которые лучше используют, чем это. (например, те, что используются в кнопках)

Описывает ли порядок размещения в CSS или вхождения разметки (#big-menu) в HTML что-то связанное с тем, что загружается первым? или есть более надежный способ его контролировать? javascript (желательно jQuery) в порядке.

+0

Hi andy! – alex

ответ

8

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

Попробуйте загрузить onload JavaScript. Событие выполняется только после завершения загрузки страницы.

function loadBG(){ 
    document.getElementById("big-menu").style.backgroundImage="url(../images/big-menu.jpg)"; 
} 
window.onload=loadBG(); 
+0

все изображения и все остальные фоновые изображения завершатся при загрузке этой функции? событие onload, AFAIK, запускается, когда HTML, а не изображения, заканчивается загрузкой. – andyk

+1

Событие onload запускается, когда все ресурсы на странице заканчиваются loding, включая изображения, iframes и css-файлы и файлы javascript. –

+0

@Pim спасибо за разъяснение. – andyk

0

Управление, когда загрузка изображений в CSS на самом деле невозможна. Вы можете попробовать поставить его на самом дне своего StyleSheet, но я сомневаюсь, что вы увидите улучшение.

2

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

Вы можете использовать JQuery для загрузки изображений в правильной последовательности, хотя

$('firstElement').addClass('some-menu'); 
$('secondElement').addClass('some-other-menu'); 
$('lastElement').addClass('big-menu'); 

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

$('firstElement').css("background-image", "some-menu.jpg"); 
$('secondElement').css("background-image", "some-other-menu.jpg"); 
$('lastElement').css("background-image", "big-menu.jpg"); 
+0

Изображения, на которые ссылаются в таблице стилей, попадут на провод, даже если они не используются в фактическом макете. Добавление класса будет просто задерживаться, когда они будут показаны. –

4

Это не может быть идеальным решением (как это CSS-фон, а не изображение), но YUI Image loader обеспечивает хороший способ отложенной загрузки изображений.

создать группу

var imgGroup = new YAHOO.util.ImageLoader.group(window, 'load', 2); 

После загрузки документа, изображение будет загружать через 2 секунды после этого. См. Yahoo! Shine или examples для демонстрации.

+0

Также см. Эту ссылку для эквивалента jQuery: http://www.appelsiini.net/projects/lazyload –

4

Еще одно решение состоит в том, чтобы разделить ваши активы на разные домены, браузеры будут запрашивать сразу два актива, а затем ждать, пока один будет загружен до начала следующего. Вы можете наблюдать это с помощью Firebug и YSlow, поэтому размещайте некоторые объекты на изображениях.example.com и images1.example.com и посмотрите, не оказывает ли это влияние

+0

хороший ответ. Я подумал об этом, но он казался довольно громоздким и сейчас не совсем осуществимо, учитывая, что мне нужно только отложить это изображение, и у меня нет доступа к подобластям. Тем не менее, +1 :) – andyk

+1

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

0

Порядок загрузки не может контролироваться с помощью css. Однако для этого вы можете использовать javascript.

Хотя, возможно, перед тем, как сделать это, вы должны optmize изображение, используя smush.это или ваша любимая программа для изображений. Я считаю, что jpeg выглядят очень хорошо при сохранении с качеством 85%. Поэкспериментируйте и не забудьте настроить веб-сервер на кеширование изображений в течение длительного времени, а затем проблема будет только в первый раз, когда ваши пользователи перейдут на сайт.

0

Javascript трюк работал для меня в решении этой проблемы. Тем не менее, мне пришлось слегка исправить синтаксис:

function loadBG(){ 
    document.getElementById("big-menu").style.backgroundImage="url(../images/big-menu.jpg)"; 
} 
window.onload=loadBG(); 
+1

Я отредактировал его ответ, чтобы содержать исправленный синтаксис. – gmeben

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