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 相关文章推荐
HTML中不支持静态Expando的元素的问题
Mar 08 Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
js实现索引图片切换效果
Nov 21 Javascript
node.js 动态执行脚本
Jun 02 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
微信小程序input框中加入小图标的实现方法
Jun 19 Javascript
微信小程序框架wepy之动态控制类名
Sep 14 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
Jun 18 Javascript
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中调用ASP.NET的WebService的代码
2011/04/22 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
全面理解闭包机制
2016/07/11 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
Python变量和字符串详解
2017/04/29 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python 防止死锁的方法
2020/07/29 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
党日活动总结
2014/05/07 职场文书
车辆工程专业求职信
2014/06/14 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书