做了一个图片等比缩放的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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。