当前位置: 首页 > 面试题库 >

与浏览器无关的检测图像加载时间的方法

越鸿才
2023-03-14
问题内容

在IE中,您可以onreadystatechange。有负载。jQuery用“ready”很好地包装了DOM的load事件。似乎我只是不了解另一个漂亮的库对图像加载的实现。

上下文是我正在动态生成图像(通过服务器回调),可能需要一些时间才能下载。在仅用于IE的代码中,我设置了img元素的src,然后当onreadystatechange事件以“complete”状态触发时,我将其添加到DOM中,以便用户看到它。

我对“本机”JavaScript解决方案或可以完成此工作的库的指针感到满意。那里有很多图书馆,我敢肯定这是我的一个例子,只是不知道合适的图书馆。就是说,我们已经是jQuery用户,因此我不急于为了获得此功能而添加非常大的库。


问题答案:

注意: 我是在2010年写的,当时的浏览器是IE8/9beta,Firefox3.x和Chrome4.x。请仅将此用于研究目的,我怀疑您可以将其复制/粘贴到现代浏览器中,并且可以正常使用。

警告:
现在是2017年,我仍然时不时地对此有所了解,请仅将其用于研究目的。我目前不知道如何检测图像加载状态,但是可能有比这更优雅的方法了……至少我非常希望有这种方法。我强烈建议不要在没有更多研究的情况下在生产环境中使用我的代码。

警告第二部分Electric Boogaloo: 现在是2019年,大多数jQuery功能现在已内置在vanilla
JS中。如果您仍在使用它,可能是时候停止并考虑前往MDN并阅读Vanilla JS提供的一些有趣的新东西了。

我参加这个聚会有点晚了,也许这个答案会对别人有所帮助…

如果您使用的是jQuery,请不要理会股票事件处理程序(onclick/onmouseover/etc),实际上完全不要再使用它们了。使用他们在API中提供的事件方法。

这将在将图像附加到主体之前发出警报,因为在将图像加载到内存中时会触发加载事件。它正是按照您的指示进行操作:使用test.jpg的src创建一个图像,当test.jpg加载时发出警报,然后将其附加到正文中。

var img = $('<img src="test.jpg" />');
img.load(function() {
    alert('Image Loaded');
});
$('body').append(img);

在将图像插入到主体之后,这将提醒您,再次执行您告诉它的操作:创建图像,设置事件(未设置src,因此尚未加载),将图像附加到主体(仍然nosrc),现在设置src …现在加载了图像,因此触发了事件。

var img = $('<img />');
img.load(function() {
    alert('Image Loaded');
});
$('body').append(img);
$img.attr('src','test.jpg');

当然,您还可以添加一个错误处理程序,并使用bind()合并一堆事件。

var img = $('<img />');
img.bind({
    load: function() {
        alert('Image loaded.');
    },
    error: function() {
        alert('Error thrown, image didn\'t load, probably a 404.');
    }
});
$('body').append(img);
img.attr('src','test.jpg');

根据@ChrisKempen的要求…

这是一种非事件驱动的方法,用于确定在加载DOM之后图像是否损坏。此代码是StereoChrome的文章的代码的派生,该文章使用naturalWidth,naturalHeight和complete属性确定图像是否存在。

$('img').each(function() {
    if (this.naturalWidth === 0 || this.naturalHeight === 0 || this.complete === false) {
        alert('broken image');
    }
});


 类似资料:
  • 问题内容: 我正在网上浏览,看到了以前从未见过的东西。在此网站上:http : //blogof.francescomugnai.com/2009/04/mega-roundup-of-geektool-scripts- inspiration-gallery/ 当您向下浏览页面时,仅当图像位于浏览器的可见部分时才加载图像。我以前从未见过这种情况,想知道是否还有其他人,以及究竟该怎么做。 我猜这是

  • 问题内容: 我将扮演一个恶魔的拥护者片刻。我一直想知道为什么将浏览器检测(而不是功能检测)视为一种不好的做法。如果我测试某个浏览器的某个版本并确认该功能以某种可预测的方式运行,则可以决定对其进行特殊处理。这样做的理由是将来会万无一失,因为此部分浏览器版本不会更改。另一方面,如果我检测到DOM元素具有函数X,则不一定表示: 此功能在所有浏览器中的工作方式相同,并且 更重要的是,即使在所有未来的浏览器

  • 我尝试了许多方法通过jQuery或JavaScript检测浏览器关闭事件。但是,不幸的是,我一直未能检测到接近。和方法也不起作用。 如何在卸载前检测窗口、或

  • 问题内容: 是否存在检测selenium浏览器何时打开错误页面的通用方法?例如,禁用您的互联网连接并执行 在Firefox中,Selenium将加载“重试”错误页面,其中包含诸如“ Firefox无法在www.google.com上建立与服务器的连接”之类的文本。selenium不会引发任何错误。 是否存在与浏览器无关的方法来检测这些情况?对于Firefox(Python),我可以做 但是(1)这

  • 我想捕获浏览器窗口/选项卡关闭事件。我尝试了以下方法,但不起作用: 尝试了这些链接,但没有更多的成功。 JavaScript检查浏览器窗口何时关闭 如何捕获浏览器窗口关闭事件? javascript检测浏览器关闭标签/关闭浏览器 尝试检测浏览器关闭事件 问题: 我只想检测浏览器关闭事件,并在不向用户显示提示的情况下对此进行一些处理。 我尝试过很多方法,通过jQuery或JavaScript检测浏览

  • 问题内容: 如何使用JavaScript确定确切的浏览器和版本? 问题答案: 顾名思义,这将告诉您浏览器提供的名称和版本号。 当您在多个浏览器上测试新代码时,它对于对测试结果和错误结果进行排序非常方便。