• 基于jq图片居中插件 [center]


    最近在做一个项目,
    大量的图片基于js进行缩放(图片放大镜),
    考虑用css要写许多hack,
    而已经基于jq了,
    干脆写个方法得了。

    代码很简单,不用多讲但是很实用。

    $.fn.extend({ center: function (n,b) {
    		
    		n=typeof n?n:300;//过渡时间,默认为300毫秒;Number类型;
    		b=b===false?b:true;//铺满父容器;如果为真 则清除标签上的style样式、计算出缩放数据后、还原清楚的样式后、按照缩放数据缩放,如果为假 则保持原尺寸(会出现图片显示不全现象);Boolean类型;
    		
    		$(this).each(function() {
                    
    			var t=$(this),tP=t.parent();//获取相对缩放的父容器;
    			var tOld=t.attr("style");//存储当前样式;
    				b&&t.removeAttr("style");//清除当前样式;
    				
    			var tH=t.height(),tW=t.width();//缩放对象宽,高;
    			var tPH=tP.height(),tPW=tP.width();//缩放对象父容器宽,高;
    			
    			var scaleW=tH/tW,scaleH=tW/tH;//比例计算;
    			var pScaleW=tPH/tPW,pScaleH=tPW/tPH;//父容器比例计算;
    			
    			var baseW=(pScaleW-scaleW)>(pScaleH-scaleH);//是否按照宽度进行缩放;
    			
    			t.attr("style",tOld);//还原存储的样式;
    			
    			var data={"width":tW,"height":tH,"opacity":1};//缩放效果数据(声明和原始数据);
    			
    					if((baseW&&b)){data.width=tPW; data.height=tPW*scaleW};//按照宽度进行缩放更改效果数据;
    					if((!baseW&&b)){data.height=tPH; data.width=tPH*scaleH};//按照高度进行缩放更改效果数据;
    			
    				data["top"]=(tPH-data.height)/2; data["left"]=(tPW-data.width)/2;//计算位置;
    			
    				t.css("opacity",0);
    				t.stop(true,true).animate(data,n);//实施效果参数;
    				
    		})
    		
    	 }})
    

    center插件在线调试

    
    
    
    
    

     完整实例:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>wangzf.com</title>
    <style>
    .item{ position:relative;
    	   height:300px; 300px; overflow:hidden; border:5px #ccc solid; float:left; margin:10px;}
    .item img{ position:absolute;}
    .item span{ position:absolute; top:50%;padding:20px; display:none; background:rgba(0,0,0,.5); color:#fff;}
    .item:hover span{ display:block;}
    </style>
    
    </head>
    <body>
    
    <div class="item"><img src="http://f.hiphotos.baidu.com/album/w%3D2048/sign=5a4b7bd68326cffc692ab8b28d394b90/7af40ad162d9f2d3ba2229a0a8ec8a136327cc4a.jpg"><span></span></div>
    <div class="item"><img src="http://d.hiphotos.baidu.com/pic/w%3D230/sign=3f65b6e61c950a7b753549c73ad0625c/0d338744ebf81a4c22620119d62a6059242da68a.jpg"><span></span></div>
    <div class="item"><img src="http://h.hiphotos.baidu.com/pic/w%3D230/sign=d44f53508701a18bf0eb154cae2e0761/08f790529822720e536837867bcb0a46f21fab2c.jpg"><span></span></div>
    <div class="item"><img src="http://e.hiphotos.baidu.com/pic/w%3D230/sign=3b73e8b90b55b3199cf9857673a88286/7af40ad162d9f2d3c39c8057a8ec8a136227ccfd.jpg"><span></span></div>
    <br clear="all">
    <a href="http://wangzf.com">wangzf.com</a>
    </body>
    </html>
    <script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
    
    <script>
    $(function(){
    	$.fn.extend({ center: function (n,b) {
    		n=typeof n?n:300;b=b===false?b:true;
    		$(this).each(function() {
    			var t=$(this),tP=t.parent();
    			var tOld=t.attr("style");b&&t.removeAttr("style");
    			var tH=t.height(),tW=t.width();
    			var tPH=tP.height(),tPW=tP.width();
    			var scaleW=tH/tW,scaleH=tW/tH;
    			var pScaleW=tPH/tPW,pScaleH=tPW/tPH;
    			var baseW=(pScaleW-scaleW)>(pScaleH-scaleH);
    			t.attr("style",tOld);
    			var data={"width":tW,"height":tH,"opacity":1};
    					if((baseW&&b)){data.width=tPW; data.height=tPW*scaleW};
    					if((!baseW&&b)){data.height=tPH; data.width=tPH*scaleH};
    				data["top"]=(tPH-data.height)/2; data["left"]=(tPW-data.width)/2;
    				t.css("opacity",0);
    				t.stop(true,true).animate(data,n);
    		})}})
    });
    </script>
    <script>
    $(function(){
    	$("img").each(function() {
            var t=$(this);
    		t.next().html("设置前图片大小 宽*高= "+t.width()+"*"+t.height())
        });
    	
    	$("img").eq(0).center(300,false)
    	$("img").eq(1).center()
    	$("img").eq(2).center(300,false)
    	$("img").eq(3).center()
    	})
    </script>
    

    王那个锋啊的个人博客  wangzf.com

  • 相关阅读:
    DMA
    [计网笔记] 应用层
    为博客添加网易云音乐播放器外链
    acm对拍程序 以及sublime text3的文件自动更新插件auto refresh
    操作系统---内存管理(上) 概念 覆盖交换技术 连续分配管理方式
    操作系统---死锁的检测和解除
    C++ bitset的使用
    Codeforces Round #647 (Div. 2)
    sublime Text3 实现2:1:1三分屏效果
    操作系统---信号量以及四个进程同步问题
  • 原文地址:https://www.cnblogs.com/wangzf-No1/p/3414701.html
Copyright © 2020-2023  润新知