【问题标题】:display a gif after it has been loaded加载后显示 gif
【发布时间】:2012-08-18 20:14:29
【问题描述】:

所以我的网站上有一个<img onload="resizeImage()" src="movie.gif">,我只想在它完全加载后显示它。 gif是通过php从我的sql数据库加载的,因此img src因页面而异。我也有调整大小以使图像全尺寸

<script type="text/javascript">

function resizeImage()
{
  var window_height = document.body.clientHeight
  var window_width  = document.body.clientWidth
  var image_width   = document.images[0].width
  var image_height  = document.images[0].height
  var height_ratio  = image_height / window_height
  var width_ratio   = image_width / window_width
  if (height_ratio > width_ratio)
  {
    document.images[0].style.width  = "auto"
    document.images[0].style.height = "100%"
  }
  else
  {
    document.images[0].style.width  = "100%"
    document.images[0].style.height = "auto"
  }
}
</script>

是否可以将 gif 放入 div 中并执行此操作

#div {
     display:none;
{

然后在加载图像后将 div 更改为此

#div {
     display:block;
{

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你可以使用这个 HTML:

    <img src="movie.gif" onload="displayImage(this)" style="display:none;">
    

    使用这个javascript:

    function displayImage(obj) {
        obj.style.display = "block";
    }
    

    在 HTML 中不使用事件处理程序的另一种方法是动态创建对象,并且仅在加载后将其插入页面,如下所示:

    var img = new Image();
    img.onload = function() {
        document.body.appendChild(this);
    };
    img.src = "movie.gif";
    

    或者,您也可以动态创建它,立即将其插入 DOM,但仅在加载后才可见:

    var img = new Image();
    img.style.display = "none";
    img.onload = function() {
        this.style.display = "block";
    };
    img.src = "movie.gif";
    document.body.appendChild(img);
    

    好的,既然您已经展示了您的实际代码和 HTML,下面是一个考虑了附加信息并使用您现有代码的答案:

    让你的 HTML 变成这样:

    <img onload="resizeImage(this)" src="movie.gif" style="display:none;">
    

    将您的代码更改为:

    <script type="text/javascript">
    
    function resizeImage(obj)
    {
      var window_height = document.body.clientHeight;
      var window_width  = document.body.clientWidth;
      var image_width   = obj.width;
      var image_height  = obj.height;
      var height_ratio  = image_height / window_height;
      var width_ratio   = image_width / window_width;
      if (height_ratio > width_ratio)
      {
        obj.style.width  = "auto";
        obj.style.height = "100%";
      }
      else
      {
        obj.style.width  = "100%";
        obj.style.height = "auto";
      }
      obj.style.display = "block";
    }
    </script>
    

    【讨论】:

    • @JaredFarrish - 你错了。像这样内联完成时,onload 处理程序将始终触发,即使图像已经被缓存。请参阅我对您的答案的评论。您不能稍后在 javascript 中应用事件处理程序。那是您可以完全错过活动的地方。事实上,在 IE 中,如果图像已被缓存,您将在 IE 中每次都使用您的代码错过事件。
    • 好吧,我会接受这个假设,但是。我必须检查一下(因为这不是我的经验,但可能是我没有尝试过内联处理程序)。
    • 好吧:jsfiddle.net/userdude/Ea2sZ Mea culpa; is 有时是使用内联处理程序的理由。喜欢那个。 (您还缺少引文。)
    • @JaredFarrish - 我添加了另外两个不需要内联处理程序的选项,但是它们通过在代码中动态创建图像而不是在页面 HTML 中来工作。
    • 所有三个(最后一个调整):jsfiddle.net/userdude/Ea2sZ/1 每天学习新东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多