博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动web图片加载完获取img宽高
阅读量:6704 次
发布时间:2019-06-25

本文共 2861 字,大约阅读时间需要 9 分钟。

1、vue中 @load=function(){}  

   等待img加载完触发load函数

2、window.load=function(){var imgheight=$(".btnimg").height;} 

  当一个图片很大的时候这个方法将一直不执行(图片少当然看不出异常)

3、定时器循环是否图片都已经加载完全

var t_img; // 定时器  var isLoad = true; // 控制变量 //isImgLoad函数在所有图片加载完成后执行 isImgLoad(function(){         var imgheight=$(".btnimg").height;     // 获取图片高度});// 判断图片加载的函数function isImgLoad(callback){    // 这里需要获取的图片类名都是btnimg,只判断这些图片而不受其他大图的影响    $('.btnimg').each(function(){        // 找到为0就将isLoad设为false,并退出each        if(this.height === 0){            isLoad = false;            return false;        }    });    // 如果isLoad为true,即目标图片没有发现为0的。默认为加载完毕    if(isLoad){        clearTimeout(t_img); // 清除定时器        // 回调函数        callback();    }else{        // 为false,因为找到了没有加载完成的图,将调用定时器递归        isLoad = true;        t_img = setTimeout(function(){            isImgLoad(callback); // 递归扫描,再次执行判断图片是否加载函数        },500); // 我这里设置的是500毫秒就扫描一次,可以自己调整    }}

 4、图片预加载

var imgReady = (function(){    var list = [],        intervalId = null;    // 用来执行队列    var queue = function(){        for(var i = 0; i < list.length; i++){            list[i].end ? list.splice(i--,1) : list[i]();        }        !list.length && stop();    };        // 停止所有定时器队列    var stop = function(){        clearInterval(intervalId);        intervalId = null;    }    return function(url, ready, error) {        var onready = {},             width,             height,             newWidth,             newHeight,            img = new Image();        img.src = url;        // 如果图片被缓存,则直接返回缓存数据        if(img.complete) {            ready.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;        };        // 图片尺寸就绪        var 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();            // IE gif动画会循环执行onload,置空onload即可            img = img.onload = img.onerror = null;        };                        // 加入队列中定期执行        if (!onready.end) {            list.push(onready);            // 无论何时只允许出现一个定时器,减少浏览器性能损耗            if (intervalId === null) {                intervalId = setInterval(queue, 40);            };        };    }})();

  http://www.cnblogs.com/tugenhua0707/p/3525668.html

转载于:https://www.cnblogs.com/Eeexiang/p/10402382.html

你可能感兴趣的文章
MongoDB分片副本集搭建
查看>>
ospf中创建末节区域
查看>>
mysql基本参数查询
查看>>
CUDA学习(六十六)
查看>>
是否将信息存储在云?
查看>>
懒癌患者有福了!iOS用户可以在苹果地图和Siri里直接打滴滴
查看>>
刚性通道时代——MSTP
查看>>
Struts2 下载取消报异常最终解决办法 1.2 版本
查看>>
利用pg_resetwal回到过去
查看>>
松滋有一刘氏分支是南宋名臣文天祥的后裔
查看>>
工作之命令小总结(7):tail命令
查看>>
C#3.0新特性小结(2)
查看>>
Linux基础命令之echo(涉及bash命令引用及替换部分内容)
查看>>
exchange 2010英文版的安装前骤及步骤
查看>>
【iOS-Cocos2d游戏开发之五】【2】多触点与触屏事件详解(单一监听、事件分发)...
查看>>
青年菜君与小农女送菜商业模式PK
查看>>
ripv2&ospf路由重发布
查看>>
老虎机的制作
查看>>
Classloader和线程
查看>>
浅谈Attribute [C# | Attribute | DefaultValueAttribute]
查看>>