基于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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
Javascript调用C#代码
Jan 17 Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
js实现仿QQ秀换装效果的方法
Mar 04 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
js实现对table的增加行和删除行的操作方法
Oct 13 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
解决ie img标签内存泄漏的问题
Oct 13 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获取mysql版本的几种方法小结
2008/03/25 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
C语言50道问题
2014/10/23 面试题
分布式数据库需要考虑哪些问题
2013/12/08 面试题
质检部岗位职责
2013/11/11 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
土木工程专业推荐信
2014/02/19 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android