我一直在努力寻找一种解决视网膜时代常见问题的好方法。
让我们说以下内容:
解决这个问题的简单方法可能是这样的:
<img src="img.jpg" data-highres="img@2x.jpg" />
如果检测到视网膜设备,写一些js与img.jpg交换img.jpg。这可行,但如果我在视网膜设备上进入网站,将加载img.jpg和img@2x.jpg。不是带宽友好:(
在原始src加载之前,是否有可能以某种方式拦截和更改图像的src?
或者你们中的任何人都有另一种方法来解决问题吗?
答案 0 :(得分:1)
将来,您可以使用the picture element。与此同时,我见过的唯一可行方法是:
class="retina-image"
)data-something
属性)<noscript><img src="..." alt="..."></script>
这是the picturefill library使用的方法。
答案 1 :(得分:0)
这可能是火焰诱饵,但这是我的两分钱:
对带宽的担忧主要是移动平台问题。考虑到大多数现代移动平台现在采用高像素密度显示器,对这些设备的高分辨率图像的需求将相当高。为什么在90%的时间内(低分辨率和高分辨率图像)可以提供3倍的图像分辨率,而你可以在100%的时间内分辨率为2倍的分辨率?
因此,在 一些 场景中,可能更容易提供更高分辨率的图像(将其宽度/高度样式减半)并将其保留在那里 - 从而在其他地方节省(昂贵)时间和精力。在一个似乎都是妥协的行业中, 有时 最有意义作为一种方法。
答案 2 :(得分:0)
我认为昆汀基本上回答了你的问题。
我可以添加的是,虽然没有src的img元素在技术上不符合规范,但省略它不会破坏您的代码,您将避免预加载。然后你可以使用<img data-src="" data-src2="">
并使用JavaScript交换图像。 <noscript>
元素可能是执行此操作的“正确”方法,但它使代码非常冗长,我听说有些浏览器也会预加载<noscript>
图像。
我遇到的一项服务使图像响应(包括Retina显示)是Pixtulate。它们还提供JavaScript以在页面加载完成之前正确调整大小并替换img.src url。应该非常简单。
答案 3 :(得分:-1)
如果您对window.devicePixelRatio
执行某些操作并循环显示具有data-highres
属性的图片。
这非常粗糙,但你得到了我的漂移。
$(document).ready(function() {
if (window.devicePixelRatio > 1) {
// retina
} else {
// default
}
});
使用空白/清除1px gif
<img src="clear.gif" data-basesrc="img1" />
然后使用basesrc
atttribute并在JS中附加相应的文件名。