У меня есть утилита, которая рисует простую дугу, используя SVG или, как запасной вариант, Canvas.(Раннюю версию можно найти в моем проекте Raphael Arcs на моем веб-сайте.
Чтобы приспособить мобильное решение, я недавно добавил код для контроля размера контейнера и, если он изменяется, чтобы заново нарисовать изображение, чтобы оно соответствовало контейнеру нового размера. Это дополнение использует только размер содержащего DIV; код добавляет либо объект SVG, либо объект Canvas в DIV.
Повторная перезагрузка страницы, однакоиногда макет DIV не готов, даже когда $(document).ready
говорит, что это так. Это кажется наиболее распространенным в Chrome, я видел его только один раз с Opera и никогда с Firefox 3.6. Высота и ширина содержащего DIVвернитесь к нулю.
Если вы загрузите ссылку выше в Chrome и нажмете перезагрузить, каждый десятый удар или около того демоверсия Canvas будет показывать аналогичный недостаток: он будет иметь размер width: 100% viewport, height:300px, и демонстрация не будет отображаться правильно.
Я просмотрел документацию jQuery и, похоже, настаиваю, что $(document).ready()
должно быть достаточно.Я бы предпочел, чтобы 12% моих пользователей не сталкивались с ошибками браузера.Кроме написания моего собственного теста макета (вращающийся таймаут, снова и снова спрашивающий: «Контейнер уже размер?»), Есть ли общая методика или библиотека, чтобы гарантировать, что загружен не только DOM, но и менеджер компоновки?
[РЕДАКТИРОВАТЬ]
Я закончил тем, что делал что-то вроде этого (код - Coffeescript):
$(document).ready ->
$('.wrapper').each ->
demo = =>
c = new CanvasArc $('.canvas_demo', this)
c.sweep(1.0)
r = new RaphaelArc $('.raphael_demo', this)
r.sweep(1.0)
scan = =>
if $('.canvas_demo', this).height()
demo()
else
setTimeout(scan, 100)
scan()
Мне действительно не следовало этого делать.