jQuery动态改变图片显示大小(修改版)的实现思路及代码


Posted in Javascript onDecember 24, 2013

当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸。通过搜索,我们可以从网上找到实现此功能的jQuery代码如下。这段代码可以使图片的大小保持在一定范围内,如果图片的原始尺寸都大于max*值,则显示出来的图片宽度都相等。

原始代码:

$(document).ready(function() {
     $('.post img').each(function() {
     var maxWidth = 100; // 图片最大宽度
     var maxHeight = 100;    // 图片最大高度
     var ratio = 0;  // 缩放比例
     var width = $(this).width();    // 图片实际宽度
     var height = $(this).height();  // 图片实际高度     // 检查图片是否超宽
     if(width > maxWidth){
         ratio = maxWidth / width;   // 计算缩放比例
         $(this).css("width", maxWidth); // 设定实际显示宽度
         height = height * ratio;    // 计算等比例缩放后的高度 
         $(this).css("height", height);  // 设定等比例缩放后的高度
     }
     // 检查图片是否超高
     if(height > maxHeight){
         ratio = maxHeight / height; // 计算缩放比例
         $(this).css("height", maxHeight);   // 设定实际显示高度
         width = width * ratio;    // 计算等比例缩放后的高度
         $(this).css("width", width * ratio);    // 设定等比例缩放后的高度
     }
 });
 });

在我的js代码中,也采取了这种写法。然而在不同的浏览器测试效果时,发现此种写法不能适应chrome浏览器(chrome版本号为10.0.648.204),会产生图片以原有尺寸显示出来的bug。后来把$('.post img').each()的代码用$(window).load()方法包装起来,就解决了chrome浏览器显示不正确的问题。那么在chrome浏览器中为什么会产生bug,并且$(document).ready和$(window).load有什么区别呢?

原来document ready事件是在HTML文档载入即DOM准备好就开始执行了,即使图片资源还没有加载进来。而window load事件执行的稍晚一些,它是在整个页面包括frames, objects和images都加载完成后才开始执行的。从这种区别可以分析出chrome浏览器在对于图片不采用$(window).load()方法处理时,图片载入与动态改变图片的js代码执行顺序不确定。

关于上面的代码,放到我的页面中时获取图片高度时会报错,提示没有提供width方法

var width = $(this).width();    // 图片实际宽度
     var height = $(this).height();  // 图片实际高度

故修改代码如下:

jQuery(window).load(function () {
            jQuery("div.product_info img").each(function () {
                DrawImage(this, 680, 1000);
            });
        });
        function DrawImage(ImgD, FitWidth, FitHeight) {
            var image = new Image();
            image.src = ImgD.src;
            if (image.width > 0 && image.height > 0) {
                if (image.width / image.height >= FitWidth / FitHeight) {
                    if (image.width > FitWidth) {
                        ImgD.width = FitWidth;
                        ImgD.height = (image.height * FitWidth) / image.width;
                    } else {
                        ImgD.width = image.width;
                        ImgD.height = image.height;
                    }
                } else {
                    if (image.height > FitHeight) {
                        ImgD.height = FitHeight;
                        ImgD.width = (image.width * FitHeight) / image.height;
                    } else {
                        ImgD.width = image.width;
                        ImgD.height = image.height;
                    }
                }
            }
        }
Javascript 相关文章推荐
JQuery 获得绝对,相对位置的坐标方法
Feb 09 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
node.js实现端口转发
Apr 14 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 Javascript
Vue 动态组件与 v-once 指令的实现
Feb 12 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
jquery自动切换tabs选项卡的具体实现
Dec 24 #Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 #Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 #Javascript
JS控制图片等比例缩放的示例代码
Dec 24 #Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
Dec 24 #Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 #Javascript
js 获取、清空input type="file"的值(示例代码)
Dec 24 #Javascript
You might like
PHP clearstatcache()函数详解
2010/03/02 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
javascript 获取图片颜色
2009/04/05 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
js实现分割上传大文件
2016/03/09 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python实现井字棋游戏
2020/03/30 Python
Python常见异常分类与处理方法
2017/06/04 Python
python删除字符串中指定字符的方法
2018/08/13 Python
在keras中实现查看其训练loss值
2020/06/16 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
python通过cython加密代码
2020/12/11 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
美国性感女装网站:bebe
2017/03/04 全球购物
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
大学生优秀团员事迹材料
2014/01/30 职场文书
学校招生宣传广告词
2014/03/19 职场文书
中学教师读书笔记
2015/07/01 职场文书
学习委员竞选稿
2015/11/20 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
python turtle绘图命令及案例
2021/11/23 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫