基于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(7)
Dec 23 Javascript
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
JavaScript 学习笔记(十一)
Jan 19 Javascript
jQuery中add()方法用法实例
Jan 08 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
使用vue制作FullPage页面滚动效果
Aug 21 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 Javascript
关于vue组件事件属性穿透详解
Oct 28 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
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
php时间戳转换代码详解
2019/08/04 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
python实现线程池的方法
2015/06/30 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
现金会计岗位职责
2013/12/05 职场文书
大学军训感言
2014/01/10 职场文书
表扬信格式
2014/01/12 职场文书
开业庆典主持词
2014/03/21 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
个人四风对照检查材料
2014/09/26 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
综合素质评价自我评价
2015/03/06 职场文书
诚信教育主题班会
2015/08/13 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
基于angular实现树形二级表格
2021/10/16 Javascript