我正在编写一些Javascript代码,将大图像调整大小以适应用户的浏览器窗口。(不幸的是,我无法控制源图像的大小。)
因此,在HTML中会有类似这样的内容:
有没有办法让我确定
标签中的src图像是否已下载?
我需要这个,因为如果在浏览器加载图片之前执行$(document).ready(),就会遇到问题。$("#photo").width()和$("#photo").height()将返回占位符(alt文本)的大小。在我的情况下,这是大约134 x 20。
现在我只是检查照片的高度是否小于150,并假设如果是,则只是alt文本。但这是相当粗略的方法,如果照片小于150像素高(在我特定的情况下不太可能),或者alt文本超过150像素高(可能发生在小浏览器窗口上),它就会出错。
编辑:对于想要查看代码的任何人:
(注:此文本为英语,已翻译成中文)
更新:感谢您的建议。如果我为
然后在Javascript中:
因此,在HTML中会有类似这样的内容:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
有没有办法让我确定
我需要这个,因为如果在浏览器加载图片之前执行$(document).ready(),就会遇到问题。$("#photo").width()和$("#photo").height()将返回占位符(alt文本)的大小。在我的情况下,这是大约134 x 20。
现在我只是检查照片的高度是否小于150,并假设如果是,则只是alt文本。但这是相当粗略的方法,如果照片小于150像素高(在我特定的情况下不太可能),或者alt文本超过150像素高(可能发生在小浏览器窗口上),它就会出错。
编辑:对于想要查看代码的任何人:
(注:此文本为英语,已翻译成中文)
$(function()
{
var REAL_WIDTH = $("#photo").width();
var REAL_HEIGHT = $("#photo").height();
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(REAL_HEIGHT < 150)
{
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
if(REAL_HEIGHT < 150)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
更新:感谢您的建议。如果我为
$(“#photo”).load
事件设置回调,则存在事件无法触发的风险,因此我直接在图像标记上定义了一个onLoad事件。记录一下,这是我最终使用的代码:<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
然后在Javascript中:
//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
isPhotoLoaded = true;
}
$(function()
{
//Hides scrollbars, so we can resize properly. Set with JS instead of
// CSS so that page doesn't break with JS disabled.
$("body").css("overflow", "hidden");
var REAL_WIDTH = -1;
var REAL_HEIGHT = -1;
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(!isPhotoLoaded)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
else if(REAL_WIDTH < 0)
{
//first time in this function since photo loaded
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
complete
属性提供了一种重要的方式来判断图片是否已经加载完成。 - BorisOkunskiycomplete
属性并没有得到明确的支持:无法找到可靠的关于浏览器支持的来源。HTML5 规范是唯一提到它的,而且在撰写本文时仍处于草案版本。请参见关于 "complete" 属性的唯一规范 http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#dom-img-complete,Mozilla 显示对 "complete" 属性的支持状态为未知 http://developer.mozilla.org/en/docs/Web/API/HTMLImageElement。 - Adrianoimagesloaded
JavaScript库在这方面做得非常出色。请参见https://dev59.com/FnI-5IYBdhLWcg3wMFQf#19959809。 - Adriano