基于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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
模拟select的代码
Oct 19 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
JS的get和set使用示例
Feb 20 Javascript
JavaScript实现Java中Map容器的方法
Oct 09 Javascript
JavaScript实现隐藏省略文字效果的方法
Apr 27 Javascript
jQuery Validate 校验多个相同name的方法
May 18 jQuery
实现单层json按照key字母顺序排序的示例
Dec 06 Javascript
微信小程序实现留言板
Oct 31 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
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
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
php查询操作实现投票功能
2016/05/09 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
vue的mixins属性详解
2018/03/14 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
pyhton列表转换为数组的实例
2018/04/04 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
试用期员工考核制度
2014/01/22 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
志愿者宣传口号
2014/06/17 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL