基于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的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
Mar 26 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
windows下vue-cli导入bootstrap样式
Apr 25 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
Sep 25 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
代码解析React中setState同步和异步问题
Jun 03 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
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
银行开业庆典方案
2014/02/06 职场文书
业务员简历自我评价
2014/03/06 职场文书
大学学生会辞职信
2015/05/13 职场文书
单位同意报考证明
2015/06/17 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers