Ленивая загрузка флеш объектов - PullRequest
3 голосов
/ 11 апреля 2010

Я использую плагин для отложенной загрузки jQuery, чтобы отложить загрузку изображений ниже большой веб-страницы. Это прекрасно работает. Теперь я хотел бы применить ту же технику к большому объекту Flash, который также находится ниже сгиба. Я не думаю, что плагин с отложенной загрузкой обрабатывает вещи, которые не являются изображениями (по крайней мере, пока так не выглядит). Возможно, мне придется сделать это самому. В таком случае, как мне определить, когда область, содержащая объект Flash, становится видимой?

Редактировать: Я думаю, что смогу что-то взломать, используя плагин измерений jQuery и отслеживая div, содержащий объект Flash.

Edit2: ОК, я открыл щедрость на этот вопрос. Если кто-нибудь сможет добраться до него раньше, чем у меня будет возможность поиграть с этим на выходных, +250 к вам. :)

Ответы [ 5 ]

2 голосов
/ 11 апреля 2010

Если память мне не изменяет, установка параметра wmode объекта флэш-памяти в DOM на opaque сделает это. Здесь немного рассуждений о различных wmode настройках здесь

0 голосов
/ 22 апреля 2010

Глядя на исходный код плагина для отложенной загрузки, вы увидите, что не так много волшебства. По сути, там происходит две интересные вещи:

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

Так что для ленивой загрузки я бы просто использовал или разорвал функции, которые определяют, находится ли данный элемент в представлении или нет. Подключитесь к событию прокрутки, и если что-то должно появиться, вы встраиваете SWF с помощью swfobject. Это должно сделать это.

Также взгляните на плагин для отложенной загрузки source , это действительно не сложно.

0 голосов
/ 21 апреля 2010

Причина, по которой lazyLoad не работает с вашим сценарием, заключается в том, что lazyLoad просматривает атрибут "src", который отсутствует в объектах flash (и).

В src lazyLoad вы должны изменить любое место, ссылающееся на атрибут "src". Вам нужно будет знать, является ли элемент объектом или встроить, и правильно ссылаться на их «источник».

например (не проверено):

/* Save original only if it is not defined in HTML. */
if (undefined == $(self).attr("original")) {
   $(self).attr("original", $(self).attr("src") || $(self).attr("data") || $(self).find("embed").attr("src") );
}

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

0 голосов
/ 20 апреля 2010

Я думаю, что самым простым способом было бы отредактировать плагин для отложенной загрузки и отделить код обнаружения, когда элемент находится в поле зрения от кода, специфичного для изображения. Код обнаружения in-view запускает событие «появиться» на элементе (в вашем случае это div контейнера / заполнителя), который вы можете подключить для загрузки вашего Flash.

0 голосов
/ 17 апреля 2010

хм, я не знаю, как работает этот jquery prugin, но вы говорите, что он делает то, что вы хотите, если вы используете изображение - так почему бы вам не разместить изображение там, где должен быть ваш flash-объект, установите onload для этого изображения, и если эта загрузка загружена, вы заменяете изображение на нужный вам flash-объект (при условии, что jquery-plungin делает сумасшедшие вещи, поэтому загрузка не запускалась раньше).

РЕДАКТИРОВАТЬ: я знаю, что onload -атрибут для img-тегов официально не разрешен, но большинство (все?) Современных браузеров поддерживают это (насколько я знаю) - и, возможно, это помогает получить другой решение без этих проблем ...

...