2016-02-05 5 views
2

Я запускаю сценарий (взломать), чтобы обмануть Safari, чтобы правильно определить размер видео на отзывчивой странице. Скрипт ниже ждет момента, затем скрывается, а затем показывает видео, в результате чего Safari понимает, что он должен расширить видео до нужного размера.

Я обеспокоен тем, что $(document).ready может запустить сценарий слишком рано (т. Е. До загрузки видео), в результате чего сценарий не будет делать то, что он должен делать с видео. Возможно ли, что с $(document).ready сценарий может срабатывать, но так как видео не загружается после установленного миллисекунды, что видео не будет скрыто/показано?

Должен ли я использовать window.onload (или другой метод?) Вместо этого, чтобы гарантировать, что мой сбой/показ калибровки взлома работает?

В моих тестах сценарий в основном работает, даже при перезагрузке, когда я очищаю кеш. Но несколько раз, когда я загружал страницу на случайных компьютерах, видео не будет правильно изменяться до тех пор, пока я не перезагружу страницу. Использование window.onload кажется менее идеальным в том, что пользователь может заметить видео с неправильным размером при загрузке содержимого страницы или просмотреть взломанное действие после его выполнения.

<script><!-- Super hack to toggle display block/none which tricks Safari into properly sizing video--> 
    $(document).ready(function() { 
    $("#video1").delay(3000).hide(0, function() { 
     $("#video1").delay(3500).show(); 
     }); 
     }); 
</script> 
+1

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

+0

См. Http://stackoverflow.com/a/3698214/5277935 – AMACB

ответ

1

Вот разница между этими двумя событиями:

  • window.onload срабатывает после того, как весь контент (т.е. средства массовой информации и таблицы стилей) были загружены. Это событие DOM

  • $(document).ready() уволен после загрузки документа HTML (т. Е. Последний загрузочный тег был загружен, носители и таблицы стилей, возможно, еще не загрузились). Это событие технически уникально для jQuery, но, если aailiabe, jQuery на самом деле использует событие DOM DOM.

Однако JQuery действительно есть событие, которое срабатывает только после всех СМИ загружено, $(document).load(), однако это не рекомендуется, так как 1.8


Если вы хотите, чтобы ваш код для запуска перед тем видео-ролик загрузилась, используйте $(document).ready()

Если вы хотите, чтобы ваш код для запуска после загрузил видео, используйте window.onload или $(document).load()


Чтобы ответить на ваш комментарий:

Прилагается видео загрузится на время задержки закончили (общее значение для 7.5 seconds), ваш хак будет работать.

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

Очевидно, что если видео не было загружено, скрытие и показ не будет изменить что-либо визуально, так как элемент пуст/не имеет содержимого.

+0

Спасибо @druzion. Я знаю, что с «window.onload» мой javascript будет запущен и потому, что мое видео определенно загружено в этот момент, эффект скрипта будет применен к нему. Однако, используя '$ (document) .ready()' Я знаю, что мой скрипт будет запущен, вероятно, до загрузки видео. Так в чем же результат? Означает ли это, что мой show/hide hack будет работать только в случаях, когда видео загружается, когда документ готов? Или, будет ли сценарий ждать, пока видео, которое оно ссылается на нагрузки, и только затем выполнит? Я не уверен, что основные правила касаются этого. – forestkelley

+0

Если видео загружено после задержек (итого до 7,5 секунд), ваш взлом будет работать. Даже если видео не загружено, элемент HTML все еще существует, поэтому его можно скрывать и показывать даже до загрузки видео. Очевидно, что если он не загружен, скрытие и показ ничего не изменят визуально, так как элемент все равно пуст. – Druzion

+0

Ваш последний комментарий - именно то, что мне нужно было знать. Похоже, я должен использовать 'window.onload' с более короткой задержкой. Бонус около 7,5 секунд общего времени. Мне не приходило в голову, что задержки будут проходить один за другим. Я предположил, что оба они будут запускаться с самого начала (всего 3,5 секунды). Еще раз спасибо! – forestkelley

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

  • Нет связанных вопросов^_^