我对 JavaScript 相当陌生,并且一直在尝试编写自己的脚本来动态地为移动设备上的用户提供较小的图像。
假设我有一个普通的 HTML 图像,如下所示:
<img id="test" src="https://www.example.com/pictures/myimage.jpg" />
然后我想出了一个简单的脚本,在加载任何图像之前检查页面尺寸(通过使用 DOMContentLoaded 事件)。根据传入的屏幕尺寸,它会更改图像 src 以提供针对该屏幕尺寸优化的图像。这是脚本:
document.addEventListener("DOMContentLoaded", function(event){
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0],
x = w.innerWidth || e.clientWidth || g.clientWidth,
y = w.innerHeight|| e.clientHeight|| g.clientHeight;
if(x >= 1000)
{
var largeImage = true;
}
else if(x <= 999 && x >= 651)
{
var mediumImage = true;
}
else if(x <= 650)
{
var smallImage = true;
}
if(largeImage){
// Do nothing as the image is the right size (large)
}
if(mediumImage){
var imageSrc = document.getElementById("test").src.toString();
document.getElementById("test").src = imageSrc.replace("/myimage.jpg","/medium/myimage.jpg");
}
if(smallImage){
var imageSrc = document.getElementById("test").src.toString();
document.getElementById("test").src = imageSrc.replace("/myimage.jpg","/small/myimage.jpg");
}
});
为可怕的破解代码道歉,但它确实有效,并且为移动设备节省了 2% 的加载时间。
但是,当我使用 Google Page Speed Insights 分析结果时,我看到该页面仍在加载原始图像(尽管尺寸非常小,通常为几百字节),以及较小的“替换”图像出色地。所以我的问题是如何加载原始图像,因为我对 DOMContentLoaded 的理解如下:
DOMContentLoaded 事件在文档完全加载和解析后触发,无需等待样式表、图像和子框架完成加载
(取自 MDN)
而且我知道这与这个问题并不真正相关,但是如果有人也有 SEO 背景,那么从 SEO 的角度来看,了解这种行为是否会以任何方式造成损害将会很有用。
我更愿意坚持使用 JavaScript(而不是使用 JQuery),因为其中很大一部分是关于尝试学习这门语言并自己想出一些真正有用的东西。
非常感谢。