繁体   English   中英

如何在将图片设置为动画时使用jquery异步加载图像

[英]How to load image asynchronously using jquery while animating pictures as screenshot

我正在尝试使用jquery javascript框架异步加载图像。 加载的图像完全下载到本地页面后,应淡入。 到目前为止,我可以异步加载图像并在固定时间后淡入,而不是在图像完全下载后消失。 如果图像太高,这会在淡入淡出时产生一些图形错误,并且由于图像大小,下载会花费一些时间。 当图像异步加载时,浏览器分配的内存也会逐步增加。 甚至之前显示的相同图像也会分配新的内存。

完全下载后,如何异步加载图像并进行褪色处理。 以及如何加载图像以确保浏览器中没有内存泄漏。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta charset="utf-8">
   <title>jQuery demo</title>
 </head>
 <body>
   <script src="jquery-1.8.0.min.js"></script>
   <script src="jquery.timer.js"></script> 
   //<script src="jquery.center.js"></script> 
   <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
   <div class="hide">
       <img id="bild" height=100% src="logo.jpg" alt="Logo" />
   </div>
   <script>
    var timer = $.timer(function() 
    {
        var img = $('#bild').attr('src','http://localhost/test.php?'+(new Date()).getTime()).load(function() 
            {
                if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
                    $('#bild').attr('src','logo.jpg'); //Show logo in error case
                } else {
                    $("#div.hide").append(img);
                }
           }).stop(true,true).fadeIn(1000).delay(3000).fadeOut(1000);
    });

    $("#bild").error(function()
    {
            $('#bild').attr('src','logo.jpg');
    });
    timer.set({ time : 5000, autostart : true });
   </script>
   </body>
 </html>

尝试这个:

 if($('#bild').prop('complete')) // if image is already in cache
    {
        // your code
        $(this).fadeIn(1000).delay(3000).fadeOut(1000);
    }
else{
    $('#bild').load(function(){   // works when image is loaded and not present in cache
       // your code
       $(this).fadeIn(1000).delay(3000).fadeOut(1000);
    });
}

www.farinspace.com/jquery-image-preload-plugin/

那个jQuery插件可以满足您的需求。 每个图像加载事件都有回调函数,所有图像加载完成后都有另一个回调函数。

$imgs.imgpreload({
    each: function() {
        // an image loaded, you could fade in each one
    },
    all: function(){                            
        // all images loaded, you could do something else here
    }
}); 

或者,您可以预加载图像,以便它们在浏览器到达DOM之前就开始下载。

感谢您的代码示例。 经过一番尝试,并得到了朋友的进一步帮助,我们开始工作了。 这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta charset="utf-8">
   <title>jQuery demo</title>
 </head>
 <body>
   <script src="jquery-1.8.0.min.js"></script>
   <script src="jquery.timer.js"></script> 
   //<script src="jquery.center.js"></script> 
   <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
   <div id="imageWrapper" class="hide">
       <img id="bild1" style="height: 100%;" src="logo.jpg" alt="Logo" />
       <img id="bild2" style="height: 100%; display: none;" src="logo.jpg" alt="Logo" />
   </div>
   <script>
    setImage($('#bild2'));
    var timer = $.timer(function() 
    {
        var visible = $('#imageWrapper img:visible');
        var hidden = $('#imageWrapper img:hidden');

        if (!hidden[0].complete || typeof hidden[0].naturalWidth == "undefined" || hidden[0].naturalWidth == 0)
            hidden.attr('src','logo.jpg'); //Show logo in error case

        if(hidden.attr('src')!= visible.attr('src')) 
        {
            visible.fadeOut(1000, function() {
                setImage(visible);
                hidden.fadeIn(1000);
            });
        }
        else
            setImage(hidden); //don't fade if current and next picture are the same (e.g. error pic -> error pic), but try to set new image
    });

    $("#imageWrapper img").error(function()
    {
        $(this).attr('src','logo.jpg');
    });
    timer.set({ time : 5000, autostart : true });

    function setImage(img)
    {
        img.attr('src','http://localhost/test.php?'+(new Date()).getTime());
    }
   </script>
   </body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM