基于JQuery实现的图片自动进行缩放和裁剪处理


Posted in Javascript onJanuary 31, 2014

其实很早就想写一个这样的效果,至于原因?进来这个笔记,我相信你懂的。
一般门户网站,缺少不了大量的图片展示,而为了网站美观,图片又有各种不同尺寸,专业的网站编辑人员,会把图片处理成等比例的图片再上传,把网站弄得很好看,可惜,我想说,我遇到90%的网站编辑人员都是不专业的。
为了不让网站编辑人员毁掉我的心血,我决定做这样一个事情。

1、首先,在CSS里对图片定义好大小,如果JS不执行,就能看到拉伸的图片,也就是最正常的表现;
2、对每个定义图片大小的CSS多定义一个不常用的容器,这里我选用了斜体标签<cite></cite>,并定义其CSS与同根img的CSS一模一样,并定义该容器里的img的CSS样式回归margin:0;padding:0;
我是这样做的:

/*公用*/
cite{display:block;overflow:hidden;overflow:hidden !important;}/*某容器*/
#BigPic img{display:block;padding:2px;width:240px;height:160px;border:1px solid #cccccc;}
#BigPic cite{display:block;padding:2px;width:240px;height:160px;border:1px solid #cccccc;}
#BigPic cite img{display:block;margin:0px;padding:0px;border:none;}

3、定义图片处理函数,参考图片被定义的大小和原始大小,在保持比例的前提下填充满位置,再装进裁剪容器;
我的代码:

//图片尺寸判断与处理,用裁剪容器包围 - By COoL
function cutImgz(obj){
    var image=new Image();
    image.src=obj.src;    $this=$(obj);
    var iwidth=$this.width();//获取在CSS里固定的图片显示宽度
    var iheight=$this.height();//获取在CSS里固定的图片显示高度
    if(1*image.width*iheight!=1*iwidth*image.height){
        //原始图片的尺寸与CSS里固定的图片尺寸比例不一致,则进行处理
        if(image.width/image.height>=iwidth/iheight){
            $this.height(iheight+'px');
            $this.width((image.width*iheight)/image.height+'px');
        }
        else{
            $this.width(iwidth+'px');
            $this.height((image.height*iwidth)/image.width+'px');
        }
        //用cite装起来,做出裁剪效果
        $this.wrap('<cite />');
    }
}

4、在加载页面时遍历所有图片,判断其是否在缓存中,在缓存中则直接进行处理,不在缓存中则通过onload触发处理;
因为在缓存的图片秒load,在定义onload事件之前就已经load好,导致onload事件不被触发;而不在缓存的图片,若直接处理,图片未load出来,原始尺寸会被Image对象认为是空图,width和height都是0
我的代码:

$('img').each(function(){
    var image=new Image();
    image.src=this.src;
    if(image.complete){
        //存在缓存中,立即处理
        cutImgz(this);
    } else{
        //不存在缓存中,onload处理
        this.onload=function(){
            cutImgz(this);
        }
    }
});
Javascript 相关文章推荐
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
zeroclipboard复制到剪切板的flash
Aug 04 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
JQuery中属性过滤选择器用法实例分析
May 18 Javascript
js实现常用排序算法
Aug 09 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
Oct 09 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
vue实现随机验证码功能的实例代码
Apr 30 Javascript
JS通用方法触发点击事件代码实例
Feb 17 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
jquery为页面增加快捷键示例
Jan 31 #Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 #Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 #Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 #Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
Jan 31 #Javascript
js实现俄罗斯方块小游戏分享
Jan 31 #Javascript
获取select元素被选中的文本内容的js代码
Jan 29 #Javascript
You might like
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
python中循环语句while用法实例
2015/05/16 Python
python的exec、eval使用分析
2017/12/11 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
党支部承诺书
2015/01/20 职场文书
南京导游词
2015/02/03 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书