JS中通过url动态获取图片大小的方法小结(两种方法)


Posted in Javascript onOctober 31, 2018

很多时候再项目中,我们往往需要先获取图片的大小再加载图片,但是某些特定场景,如用过cocos2d-js的人都知道,在它那里只能按比例缩放大小,是无法设置指定大小的图片的,这就是cocos2d-js 的坑了,我们必须先获取图片大小,计算比例再对图片进行缩放。

查阅资料,我总结了两种通过url获取图片大小的方法:

1.预加载获取图片大小

var imgLoad = function (url, callback) {
  var img = new Image();
  img.src = url;
  if (img.complete) {
    callback(img.width, img.height);
  } else {
    img.onload = function () {
      callback(img.width, img.height);
      img.onload = null;
    };
  };
};

此方法必须等待图片加载完毕才能获取尺寸,速度超慢,图片会先出现原本大小,一段时间后才进行缩放,体验差

2.封装的方法imgReady

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);
    };
  };
})();

方法调用:

imgReady('http://www.google.com.hk/intl/zh-CN/images/logo_cn.png', function () {
  alert('size ready: width=' + this.width + '; height=' + this.height);
});

方法二体验下好很多,速度也很快,建议使用。

总结

以上所述是小编给大家介绍的JS中通过url动态获取图片大小的方法小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Prototype 学习 工具函数学习($A方法)
Jul 12 Javascript
小议javascript 设计模式 推荐
Oct 28 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
JavaScript实现省份城市的三级联动
Feb 11 Javascript
微信小程序实现留言功能
Oct 31 #Javascript
微信小程序签到功能
Oct 31 #Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 #Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
Oct 31 #Javascript
微信小程序实现签到功能
Oct 31 #Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 #Javascript
微信小程序实现自动定位功能
Oct 31 #Javascript
You might like
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
Python的语言类型(详解)
2017/06/24 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
python属于跨平台语言码
2020/06/09 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
水污染治理专业毕业生推荐信
2013/11/14 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
安全责任协议书
2014/04/21 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
2014年业务工作总结
2014/11/17 职场文书
会议邀请函
2015/01/30 职场文书