商品放大镜效果

1.html布局:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="mag.css"/>
	</head>
	<body>
		<div id="boxShow">
		<div class="smallpic" id="smallpic">
			<img src="img/ph1.jpg" style="opacity: 1;"/>
			<img src="img/ph2.jpg"/>
			<img src="img/ph3.jpg"/>
			<img src="img/ph4.jpg"/>
			<img src="img/ph5.jpg"/>
			<img src="img/ph6.jpg"/>
			<div class="mask" id="mask"></div>
		</div>
		<div id="boxul">
			<div class="wrap">
			<ul id="picUl">
				<li class="active"><img src="img/ph1.jpg"/></li>
				<li><img src="img/ph2.jpg"/></li>
				<li><img src="img/ph3.jpg"/></li>
				<li><img src="img/ph4.jpg"/></li>
				<li><img src="img/ph5.jpg"/></li>
				<li><img src="img/ph6.jpg"/></li>
			</ul>
			</div>
		<a href="javascript:;" id="left"><</a>
		<a href="javascript:;" id="right">></a>
		</div>

		</div>
		<div class="bigpic" id="bigpic">
			<div id="img1">
			<img src="img/big1.jpg"/>
			<img src="img/big2.jpg"/>
			<img src="img/big3.jpg"/>
			<img src="img/big4.jpg"/>
			<img src="img/big5.jpg"/>
			<img src="img/big6.jpg"/>
			</div>
		</div>
		<script src="mag.js" type="text/javascript" charset="utf-8"></script>
		 <script src="move.js" type="text/javascript" charset="utf-8"></script>
	</body>
</html>

 2.css样式:mag.css

			*{
				padding:0px;margin:0px;
			}
			.smallpic{
				 450px;
				height: 450px;
				border: 1px solid #ccc;
				position: relative;
				margin-bottom: 10px;
			}
			.smallpic img{
				 450px;
				height: 450px;
				position: absolute;
				left:0px;
				top:0px;
				opacity: 0;
			}
			#boxShow{
				 460px;
				height: 512px;
			}
			#boxul{
				 450px;
				height: 58px;
				position: relative;
			}
			.wrap{
				 315px;
				height: 70px;
				margin: 0 auto;
				position: relative;
				overflow: hidden;
			}
			#picUl{
				500px;
				height: 58px;
				position: absolute;
				left: 0;
				top: 0;
			}
			#picUl li{
				 58px;
				height: 58px;
				margin: 0 10px;
				list-style: none;
				float: left;
			}
			#picUl li.active{
				border: 2px solid red;
			}
			#picUl li img{
				 54px;
				height: 54px;
				border: 2px solid #fff;
			}
			#right,#left{
				font-size: 30px;
				color: #ccc;
				font-family: verdana;
				position: absolute;
				text-decoration: none;
				top:10px;
			}
			#left{
				left:10px;
			}
			#right{
				right:10px;
			}
			#right:hover,#left:hover{
				color: #000;
			}
			.mask{
				position: absolute;
				left:0px;top:0px;
				 50px;
				height: 50px;
				background: rgba(169,255,0,0.5);
				visibility: hidden;
			}
			.bigpic{
				 600px;
				height: 600px;
				border: 1px solid #ccc;
				position: absolute;
				left:455px;
				top:0px;
				overflow: hidden;
				visibility: hidden;
			}
			#img1{
				 800px;
				height: 800px;
			}
			.bigpic img{
				 100%;
				 100%;
				position: absolute;
				left:0px;
				top:0px;
			}

  3.js效果:mag.js

			var oSmallPic=document.getElementById('smallpic');//小图
			var oMask=document.getElementById('mask');//小方
			var oBigPic=document.getElementById('bigpic');//大方
			var oImg1=document.getElementById('img1');//大图
			var imgLi2=oImg1.getElementsByTagName('img');//包裹大图的框
			var oul=document.getElementById('picUl');//小图下面的滚动图片的框
			var oli=document.getElementsByTagName('li');//滑动的图片元素
			var oBtnleft=document.getElementById('left');//做按钮
			var oBtnright=document.getElementById('right');//右边按钮
			var imgLi=oSmallPic.getElementsByTagName('img');//有放大镜的图片元素
			//小方/大方=小图/大图=scale
			oSmallPic.onmouseover=function(){
				//让小芳和大芳显示
				oMask.style.visibility='visible';
				oBigPic.style.visibility='visible';
				//求小芳的尺寸
				oMask.style.width=oBigPic.offsetWidth*oSmallPic.offsetWidth/oImg1.offsetWidth+'px';
				oMask.style.height=oBigPic.offsetHeight*oSmallPic.offsetHeight/oImg1.offsetHeight+'px';
				//求比例:倍数
				var scale=oBigPic.offsetWidth/oMask.offsetWidth;
				
				this.onmousemove=function(ev){
					var ev=ev||window.event;
					//让鼠标移动的放置在盒子的中间
					var l=ev.clientX-oMask.offsetWidth/2;
					var t=ev.clientY-oMask.offsetHeight/2;
					if(l<0){
						l=0;
					}else if(l>=oSmallPic.offsetWidth-oMask.offsetWidth){
						l=oSmallPic.offsetWidth-oMask.offsetWidth;
					}
			
					if(t<0){
						t=0;
					}else if(t>=oSmallPic.offsetHeight-oMask.offsetHeight){
						t=oSmallPic.offsetHeight-oMask.offsetHeight;
					}
					//判断小芳不能移出小图的范围。
					//赋值给小芳
					oMask.style.left=l+'px';
					oMask.style.top=t+'px';
					//将对应比例赋给大图
					oImg1.style.left=-l*scale+'px';
					oImg1.style.top=-t*scale+'px';
					
				}
			}
			
			oSmallPic.onmouseout=function(){
				oMask.style.visibility='hidden';
				oBigPic.style.visibility='hidden';
			}

			// 让oul滚动
		 oBtnright.onclick=function(){
		 	if(oul.offsetLeft>0){
		 		oul.style.left=-4*oli[0].offsetWidth+20+'px';
		 	}
		 	else(oul.offsetLeft<-4*oli[0].offsetWidth)
		 	{
		 		oul.style.left=0;
		 	}
			oul.style.left=-4*oli[0].offsetWidth+'px';			 	
		 }
		  oBtnleft.onclick=function(){
			oul.style.left=0;
		 }
			//切换
			var num=0;
			for(var i=0;i<oli.length;i++){
				oli[i].x=i;//自定义索引  给每一个小圆圈添加一个索引
				oli[i].onmouseover=function(){
					num=this.x;//num:当前被点击的按钮索引
					tab();
				}
			}
			
			//将切换的过程封装起来
			function tab(){
				for(var j=0;j<oli.length;j++){
					oli[j].className='';
					imgLi[j].style.opacity='0';
					imgLi2[j].style.opacity='0';
					
				}
				oli[num].className='active';
				imgLi[num].style.opacity='1';
				imgLi2[num].style.opacity='1';
			}	

缓冲运动的封装:move.js

	function getStyle(obj,attr){
				if(obj.currentStyle){
					return obj.currentStyle[attr];//ie8
				}else{
					return getComputedStyle(obj)[attr];//标准
				}
			}
			function bufferMove(obj,json,fn){
				clearInterval(obj.timer);//obj.timer:每个元素都有一个自己的定时器
				obj.timer=setInterval(function(){
					var bstop=true;//所有的属性都已经到了目标点
					
					for(var attr in json){
					
							//取当前值 current
							var current=0;
							if(attr=='opacity'){
								current=Math.round(getStyle(obj,attr)*100);
							}else{
								current=parseInt(getStyle(obj,attr));
							}
							//求速度
							var speed=(json[attr]-current)/7;
							speed=speed>0?Math.ceil(speed):Math.floor(speed);
							
							
							if(current!=json[attr]){
								bstop=false;
								if(attr=='opacity'){
									obj.style.opacity=(current+speed)/100;
									obj.style.filter='alpha(opacity='+(current+speed)+')';
								}else{
									obj.style[attr]=current+speed+'px';
								}
							}

					}
					if(bstop){
						clearInterval(obj.timer);
						fn&&fn();
					}

				},10);
			}

  

  

原文地址:https://www.cnblogs.com/xuxiaoxia/p/6711227.html