基于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 相关文章推荐
JS date对象的减法处理实现代码
Dec 28 Javascript
DOM2非标准但却支持很好的几个属性小结
Jan 21 Javascript
浅析Node.js中的内存泄漏问题
Jun 23 Javascript
使用Promise解决多层异步调用的简单学习心得
May 17 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
Aug 31 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
JavaScript复制变量三种方法实例详解
Jan 09 Javascript
koa-passport实现本地验证的方法示例
Feb 20 Javascript
JS函数本身的作用域实例分析
Mar 16 Javascript
js实现车辆管理系统
Aug 26 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网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php自动加载方式集合
2016/04/04 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Pycharm github配置实现过程图解
2020/10/13 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
小学岗位竞聘方案
2014/01/22 职场文书
个人实习生的自我评价
2014/02/16 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
布达拉宫的导游词
2015/02/02 职场文书
春风化雨观后感
2015/06/11 职场文书
地震捐款简报
2015/07/21 职场文书
python三子棋游戏
2022/05/04 Python