**JS实现淘宝产品放大镜效果**

JS实现淘宝产品放大镜效果
在这里插入图片描述
要点:
1、鼠标往左移,大图片相当于大图片盒子往右移
2、鼠标移动时小图与大图的位置关系
根据图片所示的关系应是left / objSmall.offsetWidth-objFloat.offsetWidth=大 图移动的位置 / 整个大图图片的offset.offsetWidth-objBig.offsetWidth
3、特殊4个情况
考虑浮动块移到盒子外面的情况、
4、鼠标始终在浮动块中间

JavaScript代码

<script>
    		window.onload = function(){
    			//总盒子
    			var objDemo = document.getElementById("demo");
    			//小图盒子
    			var objSmall = document.getElementById("small-box");
    			//浮动块
    			var objFloat = document.getElementById("float-box");
    			//大图盒子
    			var objBig = document.getElementById("big-box");
    			//大图图片
    			var objImage = document.getElementById("big");
    
    			objSmall.onmouseover = function(){
    				objFloat.style.display = "block";
    				objBig.style.display = "block";
    			}
    			objSmall.onmouseout = function(){
    				objFloat.style.display = "none";
    				objBig.style.display = "none";
    			}
    			objSmall.onmousemove = function(event){
    				 var _event = event || window.event;  //兼容多个浏览器的event参数模式
    
    				 //获取鼠标相对于小图的位置=鼠标X轴-大容器的offsetLeft-小盒子的left-浮动块的一半
    				 var left = _event.clientX- objDemo.offsetLeft-objSmall.offsetLeft-objFloat.offsetWidth/2;
    				 var top = _event.clientY - objDemo.offsetTop-objSmall.offsetTop-objFloat.offsetHeight/2;
    
    				 //判断当浮动块在四条边的时候
    				 if(left < 0){
    				 	left = 0;
    				 }else if(left >(objSmall.offsetWidth -objFloat.offsetWidth)){
    				 	left = objSmall.offsetWidth -objFloat.offsetWidth;
    				 }
    				  if(top < 0){
    				 	top = 0;
    				 }else if(top >(objSmall.offsetHeight -objFloat.offsetHeight)){
    				 	top = objSmall.offsetHeight -objFloat.offsetHeight;
    				 }
    				 
    				 //获取大图的位置
    				 var bigx = left/(objSmall.offsetWidth-objFloat.offsetWidth);
    				 objImage.style.left = -bigx*(objImage.offsetWidth-objBig.offsetWidth)+"px";
    
    				 var bigy = top/(objSmall.offsetHeight-objFloat.offsetHeight);
    				 objImage.style.top = -bigy*(objImage.offsetHeight-objBig.offsetHeight)+"px";
    				 
    				 //使鼠标在浮动块中间
    				 objFloat.style.left = left +"px";
    				 objFloat.style.top = top +"px";
    			}
    		}
    	</script>

HTML代码

<div id="demo">
		<div id="small-box">
			<div id="float-box"></div>
			<img src="macbook-small.jpg" alt="" >
		</div>
		<div id="big-box">
			<img src="macbook-big.jpg" alt="" id="big">
		</div>
	</div>

CSS代码

<style type="text/css" media="screen">
		*{
			margin: 0;
			padding: 0;
		}
		#demo {
            width: 400px;
            height: 255px;
            margin: 50px;
            position: relative;
            border: 1px solid #ccc;
        }
        #small-box {
            position: relative;
            z-index: 1;
        }
        #float-box {
            display: none;
            width: 160px;
            height: 120px;
            position: absolute;
            background: #ffffcc;
            border: 1px solid #ccc;
            filter: alpha(opacity=50);
            opacity: 0.5;
        }
        #big-box {
            display: none;
            position: absolute;
            top: 0;
            left: 460px;
            width: 400px;
            height: 300px;
            overflow: hidden;
            border: 1px solid #ccc;
            z-index: 1;
        }

        #big-box img {
            position: absolute;
            z-index: 5
        }
	</style>

猜你喜欢

转载自blog.csdn.net/weixin_43264322/article/details/85771226