做了一个图片等比缩放的js
//下面判断应该按宽还是高来缩放图片
var scale; if(sizeV.x/sizeV.y>(scale=this.width/this.height)) useW=false;
else useW=true;
//这里是我框架里的方法,用来混合样式到某个元素
M.dom.mixinStyle(img,{width:(useW?sizeV.x:sizeV.y*scale)+"px",
height:(useW?sizeV.x/scale:sizeV.y)+"px"
})
原理就是判断图片的高宽比和要缩放到的尺寸的高宽比的大小,这里说起来比较绕口,大家自己去想,上面的变量useW是表示按照宽度缩放,如果是true 则在定义样式的时候宽度就直接是要缩放的宽度,高度则根据图片的高宽比计算得出,否则相反. 关于在外面套一个a标签来生成空白的问题也很简单,
M.dom.mixinStyle((wrap=document.createElement("a")),{
width:sizeV.x+"px",
height:sizeV.y+"px",
display:"inline-block",
textAlign:"center",
background:"#ddd"
});
if(useW==true) M.dom.mixinStyle((wrap),{
height:sizeV.x/scale+"px",
padding:(sizeV.y-sizeV.x/scale)/2+"px 0px"
});
原理都差不多,根据情况不同生成不同的a标签 之后我们做了一些处理把图片又放回了它原来的位置: 全部代码如下:(里面用了几个我库里的函数,你应该知道的,M框架)
/**
*这是一个基础方法,可以修改其行为
*通常的使用情形是在页面里 需要限制最大图像的大小,防止页面被撑开,小的图片不处理,大的图片按缩放比缩放,
*这个方法,传入一个缩放的大小,然后判断图片大小,然后根据图片的比例和要缩放到的比例比较 最后做到等比缩放来适应外容器
*使用情形有:1.页面里大图片的缩小处理 2.在一个固定区域里放进各种比例的图片,用js控制他们的大小,然后等比缩放,使宽或者高中的一个适应父容器
*/
imgResize:function(img,sizeV){
//首先判断有没有下一个兄弟元素,如果没有就好办了,如果有则返回的时候insertbefore一下
var next=img.nextSibling;
var imgSrc=img.src;
// if(/.*.gif.*/i.test(imgSrc)) return; //过滤gif图片,gif的处理会引起一些问题,
var img_r=new Image();
var imgSize,useW;
img_r.onload=function(){
this.onload=null;//如果过滤了gif图片,可以去掉这句
imgSize=new M.Vector(this.width,this.height);
//下面判断应该按宽还是高来缩放图片
var scale,wrap;
if(sizeV.x/sizeV.y>(scale=this.width/this.height)) useW=false;
else useW=true;
M.dom.mixinStyle((wrap=document.createElement("a")),{
width:sizeV.x+"px",
height:sizeV.y+"px",
display:"inline-block",
textAlign:"center",
background:"#ddd"
});
if(useW==true) M.dom.mixinStyle((wrap),{
height:sizeV.x/scale+"px",
padding:(sizeV.y-sizeV.x/scale)/2+"px 0px"
});
var p=img.parentNode;
wrap.appendChild(p.removeChild(img));
M.dom.mixinStyle(img,{
width:(useW?sizeV.x:sizeV.y*scale)+"px",
height:(useW?sizeV.x/scale:sizeV.y)+"px"
})
try{
if(next){
// alert("dd");
p.insertBefore(wrap,next);
}else{
p.appendChild(wrap);
}
}catch(e){} }
img_r.src=imgSrc;
}
4.等等? 好像少了一个需求,是的,将超限的图片缩小的需求比上述的需求简单,所以不再重复,无非是从dom里取出来,根据src创建Image,然后onload里调整img大小,然后再塞回去(注意怎么塞才能正好塞回去,我这里分了两种情况,一种是有下一个兄弟节点的,记住这个节点,之后insertBefore即可,没有下一个兄弟节点的,之后appendChild即可) 下面还有个效果demo: demo
css实现非等宽图片列表的布局详解
做了一个图片等比缩放的js的更多相关文章
- VUE2.0+VUE-Router做一个图片上传预览的组件
之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的 ...
- 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。
最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了.编码 为了快速实现我们的目标,我们 ...
- css技术之用最高和最宽的限制“max-height和max-width”做图片同比例缩放,达到图片不变形目的,做出批量打印图片功能,页面打印“window.print()”
一.简介 他们是为流而生的,像width/height这种定死的砖头式布局,min-width/max-width就没有存在的意义 ,min-width/max-width一定是自适应布局或流体布局中 ...
- 理解CSS3中的background-size(对响应性图片等比例缩放)
理解CSS3中的background-size(对响应性图片等比例缩放) 阅读目录 background-size的基本属性 给图片设置固定的宽度和高度的 固定宽度400px和高度200px-使用ba ...
- 使用C#进行图片转换格式,缩放,自动旋转,保留exif(转载)
这几天心血来潮做了一个批量图片缩放,转换格式,并且可以根据exif的信息旋转图片,校正exif信息后保存的小程序.根据配置文件 指定需要的功能. 1 2 3 4 5 6 7 8 9 10 11 12 ...
- android 拍照,裁切,上传圆形头像, 图片等比缩放
最近太忙了,没有空更新博客,其它部分以后再更新: 今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但 ...
- [jquery] 图片热区随图片大小自由缩放
在图片上直接画出带超级链接热区元素map和area相信大家并不陌生,Dreamweaver等网页制作软件都有直接在图片上绘制带超级链接的热区工具,但是直接绘制的热区是不能随着图片自适应放大和缩小的,现 ...
- 记一次产品需求:图片等比缩放和CSS自适应布局16:9
前言 前阵子,产品跑过来问我现有的模板中没有图片模板,需要添加一个图片模板:然而,他要求图片在展示区最好能够实现随着窗口的变化而自动按图片比例等比缩放,并且居中展示图片.我当时想着,抛开技术实现层面, ...
- vue项目中编写一个图片预览的公用组件
今天产品提出了一个查看影像的功能需求. 在查看单据的列表中,有一列是影像字段,一开始根据单据号调用接口查看是否有图片附件,如果有则弹出一个全屏的弹出层,如果没有给出提示.而且,从列表进入详情之后,附件 ...
随机推荐
- android混淆打包配置(忽略第三方jar)
在project.properties里加上 proguard.config=proguard.cfg proguard.cfg 配置如下: -optimizationpasses 5-dontu ...
- vs2015 不支持javascript的智能提示高亮
有些人安装了vs2015后发现居然不支持javascrpt的高亮功能,连工具-选项-文本编辑器里面的javascript也没有了,楼主也碰到这么个情况了,估计是有与装了多个版本的原因,楼主电脑安装了V ...
- jQuery源码笔记——二
jQuery选择这样返回对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, con ...
- Linux 常用命令学习
sed 大法: cat file | sed 's/string/replace_str/' file 按大小分割文件 split -b 100m filename 设置vi不自动转换tab: set ...
- JS 更改表单的提交时间和Input file的样式
JS转换时间 function renderTime(data) { var da = eval('new ' + data.replace('/', '', 'g').replace('/', '' ...
- 内存管理之三——Cocos2d-x学习历程(七)
1.容器---2.0版本 Cocos2d-x引擎为我们提供了CCArray.CCDictionary等Objective-C风格的容器.使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的 ...
- 关于mysql使用dbForge调试的问题:Object 'test.p_insertRoute' does not exist.
mysql中使用dbForge6.1版本调试存储过程,如果存储过程中定义的变量时枚举类型,那么就会报出该存储过程没有报出的错误,这个应该是dbForge6.1版本的bug
- PHP设计模式之工厂模式(权限分配)
// 抽象基类 User abstract class User{ protected $name = NULL; // 构造函数 function User($name){ $this->na ...
- 重拾php---以及zend-studio 的使用快捷方式
感觉好久没有碰php了,今天心血来潮,重新入门.先整理一下刚刚学习的笔记. 一个字符串是用双引号括起来的一个词或一个句字,比如:“Hi,imooc!”.你可以用PHP语言输出把这个字符串输出,像这样: ...
- codeforces 652E . Pursuit For Artifacts 强连通分量
题目链接 题目大意: 给一个图, n个点m条边, 某些边上面有权值. 一条边只能走一次, 给两个点s, t. 问你, 从s到t能否经过有权值的边. 首先肯定要缩点, 然后看同一个连通分量里面的边, 是 ...