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 设置标题的自动翻转
Oct 03 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
Mar 05 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
js实现可旋转的立方体模型
Oct 16 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
vue实现消息的无缝滚动效果的示例代码
Dec 05 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
vue-socket.io跨域问题有效解决方法
Feb 11 Javascript
如何在postman中添加cookie信息步骤解析
Jun 30 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的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
JavaScript静态的动态
2006/09/18 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
python装饰器decorator介绍
2014/11/21 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
工作的心得体会
2013/12/31 职场文书
上班看电影检讨书
2014/02/12 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
表彰大会主持词
2014/03/26 职场文书
计划生育诚信协议书
2014/11/02 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
庆七一主持词
2015/06/29 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
python的变量和简单数字类型详解
2021/09/15 Python