本文目录

JavaScript 单张静态图片延迟加载

🌙
手机阅读
本文目录结构

图片延迟加载:

静态资源图片的延迟加载(一般是网站上固定的大图,为了不影响第一次加载页面的速度,我们需要把这张大图延迟加载)

开始的时候,我们给当前大图所在的位置的div加一个默认的背景图(要求小,起到占位的作用)

等过XX毫秒后,再进行加载;因为这个时候,别的资源都加载的差不多了;而且图片慢慢的显示出来,网页有动起来的感觉

相关知识点

1、用setTimeout循环创建定时器产生的累加的问题:在每一次执行方法的时候,第一步首先把之前创建的定时器清除掉;

2、在设置定时器的时候,如果一个匿名函数里面又包含了一个小的函数执行,然而小函数执行要用到匿名函数的上级作用域的东西,这样匿名函数作用域不销毁,性能不好;

代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>静态图片的延迟加载</title>
    <style type="text/css">
        body, div, img {
            margin: 0;
            padding: 0;
        }

        img {
            border: none;
        }

        html, body {
            width: 100%;
        }

        #div1 {
            width: 100%;
            height: 290px;
            background: url("http://broszhu.com/works//onmousemove/img/3.jpg") no-repeat;
            background-size: 100% 100%;
            background: none \9;
            _background: none;
            background-color: #37C7D4;
        }

        #div1 img {
            width: 100%;
            height: 290px;
            opacity: 0;
            filter: alpha(opacity=0);
        }
    </style>
</head>
<body>
<div id="div1"></div>
<script>
    //图片延迟加载:
    //1、静态资源图片的延迟加载(一般是网站上固定的大图,为了不影响第一次加载页面的速度,我们需要把这张大图延迟加载)
    //开始的时候,我们给当前大图所在的位置的div加一个默认的背景图(要求小,起到占位的作用)
    var oDiv = document.getElementById("div1");
    window.setTimeout(loadImg, 1000);
    function loadImg() {
        var oImg = new Image;
        oImg.src = "http://broszhu.com/works/imgLoad/img/5.jpg";
        oImg.alt = "";
        oImg.onload = function () {
            oDiv.appendChild(oImg);
            move(this);
        }
    }
    function move(ele) {
        var speed = 0;
        _move();
        function _move() {
            window.clearTimeout(ele.timer);
            speed += 0.02;
            setCss(ele, "opacity", speed);
            if (speed >= 1) {
                setCss(ele, "opacity", 1);
                return;
            }
            ele.timer = window.setTimeout(_move, 10);
        }
    };
    function setCss(curEle,attr,value) {//设置CSS属性值;
        switch (attr) {
            case "opacity":
                curEle["style"][attr] = value;
                curEle["style"]["filter"] = "alpha(opacity=" + (value * 100) + ")";
                break;
            case "zIndex":
                curEle["style"][attr] = value;
                break;
            default:
                curEle["style"][attr] = !isNaN(value) ? value += "px" : value;
        }
    }
    //1、用setTimeout循环创建定时器产生的累加的问题:在每一次执行方法的时候,第一步首先把之前创建的定时器清除掉
    //2、在设置定时器的时候,如果一个匿名函数里面又包含了一个小的函数执行,然而小函数执行要用到匿名函数的上级作用域的东西,这样匿名函数作用域不销毁,性能不好
</script>
</body>
</html>

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了