Mobile Safari - ограничение на количество пикселей translate3d?

У меня следующая структура HTML

<body>
  <div id="graphic">
   <div id="wrap">
     <svg width="8000px" height="32000px">
      ....
     </svg>
   </div>
  </div>

И к нему применили следующий CSS:

#graphic {
  width: 768px;
  height: 1004px;
  overflow: hidden;
}

#wrap {
  width: 768px;
  height: 1004px;
  -webkit-transform: scale(1) translate3d(0, 0, 0);
}

Используя анимацию CSS3, я хочу панорамировать / масштабировать очень большую графику svg. Он работает ... вроде как. Я обнаружил на iPad проблему, заключающуюся в том, что при установке значения y для translate3d ниже ~ 16500 пикселей графика больше не отображается (в Safari или Chrome это работает совершенно нормально). Я подумал, что может быть ограничение на высоту / ширину рендеринга SVG в мобильном Safari, но удаление overflow: hidden из контейнера #graphic позволяет мне прокручивать полностью вниз и все, что отображается правильно.

Кто-нибудь слышал или испытывал подобные ограничения / Есть ли какое-то значение CSS, которое я должен установить, чтобы все это работало? Любая помощь горячо приветствуется.


person Felix    schedule 02.07.2012    source источник


Ответы (1)


Да, вы достигли предела. Элементы Translate3D должны умещаться в памяти текстур графического процессора, и когда вы "пере- или недооцениваете", это может привести к сбросу всей текстуры. См. Документация Apple об ограничениях памяти текстур.

person Michael Mullany    schedule 03.07.2012
comment
Большое спасибо за ответ. Так что, я думаю, нет даже какого-то хакерского способа преодолеть этот предел? - person Felix; 03.07.2012
comment
Есть несколько возможных решений - 1-й - не использовать перевод, вместо этого использовать изменение позиции. 2-й - разделить изображение на сетку фрагментов изображений - это может сработать. - person Michael Mullany; 03.07.2012
comment
Привет, Майкл, я думал об использовании translate3d для аппаратного ускорения, поэтому использование позиции на самом деле не вариант. Разделение изображений на сетку также не сработало, поскольку все изображения находятся в одном контейнере с этим пределом. - person Felix; 04.07.2012
comment
Это не ответ на ваш вопрос, извините за это, но есть причина, по которой Google использует плитки, загружает входящие плитки, когда они находятся за пределами области просмотра, и выгружает их, когда они снова снаружи. Хранить на странице целое изображение размером 10k пикселей - это небольшая трата памяти. - person Design by Adrian; 08.02.2013