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

如何使用Javascript / jQuery确定图像是否已加载?

蒋嘉颖
2023-03-14
问题内容

我正在编写一些Javascript来调整大图像的大小,以适合用户的浏览器窗口。(不幸的是,我没有控制源图像的大小。)

因此,HTML中将包含以下内容:

<img id="photo"
     src="a_really_big_file.jpg"
     alt="this is some alt text"
     title="this is some title text" />

我是否可以确定 标签中的src图像img是否已下载?

我需要这样做,因为如果$(document).ready()在浏览器加载图像之前执行该命令,就会遇到问题。
$("#photo").width()$("#photo").height()返回占位符的大小(替代文本)。就我而言,这大约是134 x 20。

现在,我只是在检查照片的高度是否小于150,并假设是alt文字。但这是一个很不错的技巧,如果照片的高度小于150像素(在我的特定情况下不太可能),或者替换文字的高度大于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事件设置回调,则存在事件未触发的风险,因此我直接在image标签上定义了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));
  }

});

问题答案:

添加事件侦听器,或让图像通过onload声明自身。然后从那里找出尺寸。

<img id="photo"
     onload='loaded(this.id)'
     src="a_really_big_file.jpg"
     alt="this is some alt text"
     title="this is some title text" />


 类似资料:
  • 问题内容: 我如何断言页面的CSS已在Watin 2.1中成功加载并应用了其样式? 问题答案: 在进行了一些研究并写下我的答案之后,我偶然发现了该链接,该链接解释了您需要了解的有关CSS的所有信息,何时加载CSS以及如何检查CSS。 实际上,所提供的链接对它的解释很好,以至于我在其中添加了一些引用以供将来参考。 如果您好奇,我的答案将是#2和#4的变体。 何时真正加载样式表? … 顺便说一句,让我

  • 问题内容: 您如何确定大写锁定是否在使用JavaScript? 需要注意的是:我用google搜索了,找到的最佳解决方案是将事件附加到每个输入,然后每次检查所按字母是否为大写,如果是,则检查是否也按住shift键。如果不是,则必须打开大写锁定。这感觉真的很脏而且只是… 浪费 -当然有比这更好的方法了吗? 问题答案: 您可以尝试一下。添加了一个有效的示例。当焦点位于输入上时,打开大写锁定会使LED变

  • 问题内容: 我的应用程序具有以下结构: 我有一个包含一些脚本的功能文件夹,以及一个在ui.py文件上包含PyQt生成的代码的ui文件夹。 还有一个main.py文件,该文件加载ui.py以显示界面,并且ui.py从根目录的“ images”文件夹中加载一些图像。 如果我直接在python上执行脚本(main.py文件中为double clic),则图像不会显示。 但是,如果将终端与“ python

  • 问题内容: 我正在尝试检查Jquery库是否已加载到HTML页面上。我正在检查它是否有效,但是有些不正确。这是我所拥有的: 问题答案: 事情不对 好吧,您正在使用jQuery检查jQuery是否存在。如果未加载jQuery,则根本不会运行,并且回调也不会执行,除非您正在使用另一个库,并且该库碰巧共享相同的语法。 删除您的(使用类似方法):

  • 问题内容: 出于某种原因,我的表单不想获取复选框的值…我不确定这是否是我的编码,但是当我尝试输入值时,我得到了结果。我有什么问题? 编辑 我尝试将其更改为此 但是现在它甚至不想。怎么了 问题答案: 将函数放在内部。当执行该行时,主体尚未解析,并且该元素不存在。这工作得很好:

  • 问题内容: 我在下面编写的功能是否足以在当今大多数(如果不是全部)浏览器中预加载图像? 我有一个图像URL数组,可以循环访问这些URL,并为每个URL 调用该函数。 问题答案: 是。这应该适用于所有主要的浏览器。