Я использую этот хак Javascript для загрузки масштабированных изображений при работе на устройстве с сетчаткой. Он изменит атрибуты src
и width
на всех изображениях, чтобы использовать соответствующее масштабированное изображение. Обратите внимание, что я тестировал это только с локальными изображениями.
Установите display: none
, а затем сбросьте его при загрузке изображения, чтобы исправить мерцание. Также обратите внимание, что этот код, вероятно, несовместим с другими браузерами, кроме WebKit.
document.addEventListener("DOMContentLoaded", function() {
var scale = window.devicePixelRatio;
// might want this to be scale != 2
if (scale == undefined || scale == 1) {
return;
}
var re = /^(.*)(\..*)$/;
var images = document.getElementsByTagName("img");
for (var i = 0; i < images.length; i++) {
var img = images[i];
var groups = re.exec(img.src);
if (groups == null) {
continue;
}
img.style.setProperty("display", "none");
img.addEventListener("load", function(event) {
event.target.width /= scale;
event.target.style.setProperty("display", "");
});
img.src = groups[1] + "@" + scale + "x" + groups[2];
}
});
Советы - добавить это в файл с именем, например. scaledimages.js
, а затем используйте
<script type="text/javascript" src="scaledimages.js"></script>
Убедитесь, что js-файл указан в «Ресурсах копирования пакета», а не в «Скомпилированных источниках» в ваших целях «Фазы сборки». Швы Xcode по умолчанию определяют файлы Javascript как нечто, что ему нравится компилировать. Также обратите внимание, что текущий скрипт может сломаться, если в будущем devicePixelRatio
окажется равным 3 или больше, в качестве меры предосторожности может быть изменение (scale == undefined || scale == 1)
на scale != 2
, пока загружайте только @2x
.
Обновление. Существует также jQuery-Retina-Display-Plugin, который делает что-то похожее, но требует, чтобы вы установили атрибут width
и швы, чтобы также использовать запрос HEAD
, чтобы увидеть, существует ли изображение, не уверен, как это будет работать для локальных файлов.
person
Mattias Wadman
schedule
12.10.2011