zoukankan      html  css  js  c++  java
  • 京东商品图片放缩

    html部分:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
        #box {
          border: 2px solid #111;
           200px;
          height: 200px;
          margin: 0 auto;
        }
      </style>
    </head>
    <body>
      
    
      <div id="box" data-big-img="goods-big.gif">
        <img src="goods.gif" alt="">
      </div>
    
      <script type="text/javascript"  src="xuzoom.js"></script>
      <script type="text/javascript">
        
        window.onload = function () {
          var box = document.getElementById('box')
    
          xuzoom(box, {
            offsetWidth: 200,
            offsetHeight: 200,
            offsetX: 10,
            offsetY: 0
          })
        }
    
      </script>
    </body>
    </html>
    

     css部分:

    @charset "utf-8";
    #box {
      border: 2px solid #000;
       430px;
      height: 430px;
      margin: 0 auto;
      position: relative;
    }
    #box .sweepBox{
    	 215px;
      	height: 215px;
      	position: absolute;
      	background: url(../images/bgg.png);
      	cursor: move;
      	opacity: .4;
      	display: none;
    }
    .show{
    	 430px;
    	height: 430px;
    	position: absolute;
    	left: 435px;
    	top: 0px;
    	background: url(../images/2.jpg) no-repeat;
    	display: none;
    }
    

     js部分:

    window.onload = function() {
    	var box = document.getElementById('box'); //获取盒子id
    	var box_image = box.querySelector('img'); //获取原图
    	var sweepBox = box.getElementsByClassName('sweepBox')[0]; //获取扫描盒子
    	var show = document.querySelector('.show'); //获取显示图片的盒子
    	var width = box_image.offsetWidth; //原图片的宽
    	var height = box_image.offsetHeight; //原图片的高
    	//  扫描框宽高
    	var sweepW = width / 2,
    		sweepH = height / 2,
    		//  扫描框移动的度量宽高(用来计算鼠标在扫描盒子的移动量,在加上扫描盒子当前的offsetleft值就是盒子最终的位置)
    		stepW = sweepW / 2,
    		stepH = sweepH / 2;
    	/*确认鼠标从哪个方向进入盒子,从而确认移动盒子的初始位置*/
    	box.onmouseenter = function(e) {
    		function load(x, y) {
    
    			// 扫描框的横纵坐标偏移量
    			var offsetX = offsetY = 0
    			// 不知用什么switch表达式好,所以用了如下方法来判断位置,你有没有好方法? 
    			switch([(x - sweepW) > 0, (y - sweepH) > 0].join(',')) {
    
    				case 'false,true':
    					//  左下
    					offsetY = sweepH;
    					break;
    				case 'false,false':
    					// 左上
    					break;
    				case 'true,false':
    					//  右上
    					offsetX = sweepW;
    
    					break;
    				case 'true,true':
    					//  右下
    					offsetX = sweepW;
    					offsetY = sweepH;
    					break;
    			};
    			/* //第二种方法
    			 if(x-sweepW>0){
    			 	if(y-sweepH<0){
    			 		offsetX = sweepW;
    			 	}
    			 	else{
    			 		offsetX = sweepW;
    			      	offsetY = sweepH;
    			 	}
    			 }
    			 else{
    			 	if(y-sweepH>0){
    			 		offsetY = sweepH;
    			 	}
    			 }*/
    			/*设置扫描盒子的初始位置*/
    			sweepBox.style.left = offsetX + 'px';
    			sweepBox.style.top = offsetY + 'px';
    			sweepBox.style.display = 'block';
    			/*设置显示盒子的内容*/
    			show.style.backgroundPositionX = -offsetX * 2 + 'px';
    			show.style.backgroundPositionY = -offsetY * 2 + 'px';
    			show.style.display = 'block';
    		}
    		load(e.offsetX, e.offsetY);
    	};
    	/*扫描盒子的鼠标经过事件*/
    	sweepBox.onmousemove = function(e) {
    		/*扫描盒子的移动量*/
    		var moveX = e.offsetX - stepW;
    		var moveY = e.offsetY - stepH;
    		// 扫描框当前的偏移量
    		var offsetL = this.offsetLeft;
    		var offsetT = this.offsetTop;
    		// 计算出扫描盒子移动的最终坐标
    		var toX, toY;
    		// 沿x轴往右移动,并且扫描框右边界还没有碰到图片右边缘,那么可以移动,并且移动的距离最远到图片右边缘
    		if(moveX > 0 && offsetL < sweepW) {
    			toX = Math.min(offsetL + moveX, sweepW); /*因为扫描盒子的位置在0到图片的一半*/
    		}
    		// 与之相反,沿x轴往左移动,那么判断左边界未碰到图片左边缘,移动并且移动最左只能到0
    		if(moveX < 0 && offsetL > 0) {
    			toX = Math.max(offsetL + moveX, 0)
    		}
    		// y轴雷同
    		if(moveY > 0 && offsetT < sweepH) {
    			toY = Math.min(offsetT + moveY, sweepH);
    		}
    
    		if(moveY < 0 && offsetT > 0) {
    			toY = Math.max(offsetT + moveY, 0);
    		}
    		/*设置扫描盒子的最终位置*/
    		sweepBox.style.left = toX + 'px';
    		sweepBox.style.top = toY + 'px';
    		/*设置显示盒子内容位置*/
    		show.style.backgroundPositionX = -toX * 2 + 'px';
    		show.style.backgroundPositionY = -toY * 2 + 'px';
    	}
    	/*注销事件*/
    	box.onmouseleave = function() {
    		sweepBox.style.display = 'none';
    		show.style.display = 'none';
    	}
    }
    

      效果:

     

     

  • 相关阅读:
    datetime和time的时间戳用法
    ER图
    python update()
    理解JWT(JSON Web Token)认证及python实践
    python lambda匿名函数 用法
    flask_restful(转载)
    Flask-SQLALchemy
    创建只有一个元素的元组
    MySQL安装过程中显示无法启动
    聚类
  • 原文地址:https://www.cnblogs.com/LWJ-booke/p/7730714.html
Copyright © 2011-2022 走看看