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 相关文章推荐
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
Mar 10 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 Javascript
原生JS实现圆环拖拽效果
Apr 07 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
Vue.js 表单控件操作小结
Mar 29 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
JS中FileReader类实现文件上传及时预览功能
Mar 27 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
JS求解两数之和算法详解
Apr 28 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输入流php://input介绍
2012/09/18 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
php目录拷贝实现方法
2015/07/10 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
Javascript与flash交互通信基础教程
2008/08/07 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
法律进学校实施方案
2014/03/15 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
市场营销调查计划书
2014/05/02 职场文书
安全宣传标语
2014/06/10 职场文书
小学生环保标语
2014/06/13 职场文书
招商引资工作汇报
2014/10/28 职场文书
初中班主任教育随笔
2015/08/15 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers