jQuery实现动态加载大尺寸图片

如果页面中的图片下载尺寸太大,而且不需要把所有图片显示在页面中,可以使用js来动态加载图片,即友好又加快了整个页面的加载速度。不多说了,直接看下面代码,这里是使用了jQuery库实现,使用的版本为1.4.2的。

DOM结构:

    <div id="slider">
        <div class="nav">
            <ul>
                <li>
                    <a href="http://www.wallcoo.com/paint/Robert_Finale_art_paintings/
                        wallpapers/1280x800/Robert_Finale_art_paintings_PortofinoDawn.jpg">Image 1</a>
                </li>
                <li>
                    <a href="http://www.wallcoo.com/paint/Robert_Finale_art_paintings/
                        wallpapers/1280x800/Robert_Finale_art_paintings_ReflectionOfBelgium.jpg">Image 2</a>
                </li>
                <li>
                    <a href="http://www.wallcoo.com/paint/Robert_Finale_art_paintings/
                        wallpapers/1280x800/Robert_Finale_art_paintings_SummerBreeze.jpg">Image 3</a>
                </li>
                <li>
                    <a href="http://www.wallcoo.com/paint/Robert_Finale_art_paintings/
                        wallpapers/1280x800/Robert_Finale_art_paintings_NewBeginnings.jpg">Image 4</a>
                </li>
            </ul>
        </div>
        <div class="photos">
            <ul>
                <li>
                    <a href=""><strong>第 1 张图片</strong></a>
                </li>
                <li>
                    <a href=""><strong>第 2 张图片</strong></a>
                </li>
                <li>
                    <a href=""><strong>第 3 张图片</strong></a>
                </li>
                <li>
                    <a href=""><strong>第 4 张图片</strong></a>
                </li>
            </ul>
        </div>
    </div>

用简单的CSS代码调整下结构:

    *{margin:0;padding:0}
    body{font-family:Verdana;font-size:12px}
    ul{list-style:none}
    img{border:0;vertical-align:bottom}
    #slider{width:600px;margin:0 auto}
    #slider .nav{width:100px;float:left}
    #slider .nav li{height:30px;line-height:30px}
    #slider .nav li a{display:block;height:30px;font-weight:700;color:#333}
    #slider .nav li a:hover{color:red}
    #slider .photos{border:solid 1px #ccc;overflow:hidden;float:left;padding:10px}
    #slider .photos,#slider .photos li,#slider .photos img{width:400px;height:300px}
    #slider .photos li{display:none;position:relative}
    #slider .photos li a{
    text-decoration:none;
    color:#999;
    }
    #slider .photos li .loading{position:absolute;z-index:9;
    font-size:18px;font-weight:700;color:#fc0}

javascript实现动态加载图片:

    $(function(){
        //获取所需元素集合,缓存到jquery对象
        var div = $("#slider"), li = $("div.photos li", div);
        //默认显示第一张图片的容器
        li.eq(0).show();
        //声明setInterval变量,用来显示图片下载进度
        var process;
        $("div.nav li", div).each(function(i){
            $(this).bind("mouseover", {
                index: i
            }, function(e){
                var i = e.data.index, curr = li.eq(i), a = $("a", curr);
                //显示当前导航对应的图片的容器
                li.hide().eq(i).show();
                //立即清除所有图片下载显示进度
                clearInterval(process);
                a.empty();
                //append一个进度提示到当前图片容器
                $('<span></span>', {
                    text: "loading",
                    "class": "loading",
                    css: {
                        top: parseInt((li.height() - $(this).height()) / 2) + "px",
                        left: parseInt((li.width() - $(this).width()) / 2) + "px"
                    }
                }).appendTo(a);
                //append一个img元素到当前图片容器
                $('<img />').appendTo(a);
                var img = $("img", curr);
                //动态显示下载进度
                process = setInterval(function(){
                    loading($(".loading", curr), 10, "loading");
                }, 200);
                img.load(function(){
                    //图片加载后隐藏图片下载进度显示
                    $(".loading", curr).fadeOut();
                    clearInterval(process);
                });
                img.attr("src", $("a", this).attr("href"));
            });
        });
    });
    function loading(element, maxlength, loadingText){
        $(element).text(function(i, text){
            return (text.length < maxlength) ? text + "." : loadingText;
        });
    }
posted @ 2010-04-16 18:24  nicolaszhao  阅读(2760)  评论(0编辑  收藏  举报