基于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 对话框和状态栏使用说明
Oct 25 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
Javascript window对象详解
Nov 12 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
Aug 03 Javascript
Vue.JS入门教程之自定义指令
Dec 08 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 Javascript
使用elementUI实现将图片上传到本地的示例
Sep 04 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
微信小程序自定义可滑动日历界面
Dec 28 Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 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 阴历-农历-转换类代码
2012/01/16 PHP
PHP实现小偷程序实例
2016/10/31 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
python实现备份目录的方法
2015/08/03 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
详解supervisor使用教程
2017/11/21 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
Python urllib3软件包的使用说明
2020/11/18 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
销售文员的岗位职责
2013/11/20 职场文书
校园文化建设方案
2014/02/03 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
群教班子对照检查材料
2014/08/26 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
JavaScript 定时器详情
2021/11/11 Javascript