• 图片加载判断


    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="lib/jquery.js"></script>
    </head>
    <body>
        <img lazysrc="images/1.jpg" alt="">
        <script>
            var imgReady = (function () {
                var list = [], intervalId = null,
    
                // 用来执行队列
                tick = function () {
                    var i = 0;
                    for (; i < list.length; i++) {
                        list[i].end ? list.splice(i--, 1) : list[i]();
                    };
                    !list.length && stop();
                },
    
                // 停止所有定时器队列
                stop = function () {
                    clearInterval(intervalId);
                    intervalId = null;
                };
    
                return function (url, ready, load, error) {
                    var onready, width, height, newWidth, newHeight,
                        img = new Image();
                    
                    img.src = url;
    
                    // 如果图片被缓存,则直接返回缓存数据
                    if (img.complete) {
                        ready.call(img);
                        load && load.call(img);
                        return;
                    };
                    
                    width = img.width;
                    height = img.height;
                    
                    // 加载错误后的事件
                    img.onerror = function () {
                        error && error.call(img);
                        onready.end = true;
                        img = img.onload = img.onerror = null;
                    };
                    
                    // 图片尺寸就绪
                    onready = function () {
                        newWidth = img.width;
                        newHeight = img.height;
                        if (newWidth !== width || newHeight !== height ||
                            // 如果图片已经在其他地方加载可使用面积检测
                            newWidth * newHeight > 1024
                        ) {
                            ready.call(img);
                            onready.end = true;
                        };
                    };
                    onready();
                    
                    // 完全加载完毕的事件
                    img.onload = function () {
                        // onload在定时器时间差范围内可能比onready快
                        // 这里进行检查并保证onready优先执行
                        !onready.end && onready();
                    
                        load && load.call(img);
                        
                        // IE gif动画会循环执行onload,置空onload即可
                        img = img.onload = img.onerror = null;
                    };
    
                    // 加入队列中定期执行
                    if (!onready.end) {
                        list.push(onready);
                        // 无论何时只允许出现一个定时器,减少浏览器性能损耗
                        if (intervalId === null) intervalId = setInterval(tick, 40);
                    };
                };
            })();
    
            $(function () {
                var $img = $('img');
                imgReady($img.attr('lazysrc'), function () {
                    console.log(this.width, this.height)
                })
            })
        </script>
    
    </body>
    </html>
  • 相关阅读:
    spring声明式事务管理详情解析
    Nginx nginx.conf配置文件详细说明
    etcd
    rsyslog使用简介
    LINUX常见命令
    kafka简介&使用
    kafka安装
    Zookeeper简介&应用场景
    Zookeeper安装
    安装JDK
  • 原文地址:https://www.cnblogs.com/wangwenfei/p/img.html
Copyright © 2020-2023  润新知