基于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 相关文章推荐
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
Sep 15 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 Javascript
Vuex入门到上手教程
Jun 20 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
Jul 13 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
Aug 16 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
angular4实现带搜索的下拉框
Mar 25 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内存缓存Memcached类实例
2014/12/08 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
js 单引号 传递方法
2009/06/22 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python比较两个列表大小的方法
2015/07/11 Python
python实现决策树分类
2018/08/30 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
学python需要去培训机构吗
2020/07/01 Python
会务接待方案
2014/02/27 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
催款函范本大全
2015/06/24 职场文书
七年级作文之雪景
2019/11/18 职场文书