【发布时间】:2017-02-14 09:30:06
【问题描述】:
我有一个 JS 代码,它在我的客户的不同网页中被调用。我想获取图像的总数。 我只想要那些对用户可见的图像,而不是任何其他图像。这是我的 JS 代码
function getImageCount(topWindow) {
try {
var images = topWindow.document.getElementsByTagName('img');
var imageCount;
for (var i=0, length = images.length; i < length; i++) {
var image = images[i];
var clientWidth = image.clientWidth;
if(clientWidth && clientWidth > 1) {
var src = image.getAttribute('src');
if(src) {
src = src.toLowerCase();
if(src.indexOf('.jpg') !== -1 ||
src.indexOf('.jpeg') !== -1 ||
src.indexOf('.gif') !== -1 ||
src.indexOf('png') !== -1) {
imageCount = imageCount ? ++imageCount : 1;
}
}
}
}
return imageCount;
} catch (e) {
processError("getImageCount", e);
}
}
var imageCount = getImageCount(top);
我一直在努力稳定这段代码,以便它在所有不同类型的网页上都能正常工作。基本上我想要的是一个能正确捕获图像计数的通用代码。
例如: 我的代码将http://www.msn.com/en-us/news/other/one-free-agent-every-nfl-team-should-sign-this-offseason/ss-AAmLlC0#image 的图像计数为 1
我想要的是一个通用代码,它可以为我提供正确的图像计数,而不管它在哪里运行。谁能给我一些详细的解决方案。
非常感谢。
【问题讨论】:
-
是否也应该计算 iframe 中的图像?
-
top在 MDN。还有 CSS 附加到元素背景的图片,还有画在 canvas 和 svg 元素中的图片,也应该算进去吗? -
是的,如果它们是可见的,我们需要考虑它们。
-
我认为您必须计算所有加载 css 的图像,因为您无法知道哪些是可见的,哪些是不可见的。然后你需要一些函数来检查视口内的图像。但大概您需要将其绑定到滚动功能(因为可见的图像会在滚动时发生变化)。
-
您的所有要求使问题过于宽泛。 SO上有关于检测元素可见性和查找CSS图像的帖子,请搜索它们。您可以将 the answer of mine 应用于 iframe 中的搜索元素,“无论 [代码] 在何处运行”。您可以将所有画布和 svg 视为图像,从技术上讲它们是图像,尽管它们可能仅包含纯文本。将所有细节结合到您的代码中,如果您遇到困难,请提出一个新问题。
标签: javascript image