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 相关文章推荐
javascript new 需不需要继续使用
Jul 02 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
Jul 09 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
Angular.js组件之input mask对input输入进行格式化详解
Jul 10 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 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
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python实现简单登录验证
2016/04/13 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Python jieba库分词模式实例用法
2021/01/13 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
毕业生如何写自我鉴定
2014/03/15 职场文书
青春寄语大全
2014/04/09 职场文书
环保专项行动方案
2014/05/12 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL