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 相关文章推荐
filemanage功能中用到的common.js
Apr 08 Javascript
JavaScript获得选中文本内容的方法
Dec 02 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
Jan 24 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
深入学习JavaScript对象
Oct 13 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
Apr 15 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 Javascript
JavaScript实现消消乐的源代码
Jan 12 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读取javascript设置的cookies的代码
2010/04/12 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
js实现选项卡效果
2020/03/07 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
详解Python字典小结
2018/10/20 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
中学教师岗位职责
2013/11/26 职场文书
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
导师评语大全
2014/04/26 职场文书
员工合理化建议书
2014/05/19 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android