오늘은 js에서 작성한 사진 증폭 효과를 공유하겠습니다. 사실 둘 다 두 개의 사진을 사용하여 두 개의 사진에 해당하는 설정을 지정합니다. 마침내 다른 위치에 표시되어 궁극적으로 확대 효과를 얻습니다.
첫 번째는 제가 타오바오 쇼핑 페이지에서 흉내낸 돋보기 효과입니다. 제품 사진 위에 마우스를 올리면 사진에 직사각형 영역이 나타나는데, 이 영역이 바로 여러분이 원하시는 영역입니다. 확대하고 싶습니다. 그러면 상품 이미지 오른쪽에 확대된 상품 이미지가 나타납니다. 이 확대 방법을 사용하려면 확대 비율을 계산한 다음 확대 영역의 scrollLeft 및 scrollTop 값을 수정하여 해당 확대 효과를 얻으면 됩니다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>图片放大器</title> <style media="screen"> *{ margin: 0; padding: 0; } /*可视区域的父级标签*/ .wrap{ width: 400px; height:auto; border: 1px solid black; display: inline-block; position: absolute; left: 0; top: 0; } .wrap>img{ width: 100%; height: auto; } /*锁定放大的矩形区域*/ .box{ border: 1px solid black; width: 100px; height: 100px; background: rgba(0, 0, 0, 0.5); opacity: 0.8; position: absolute; cursor: pointer; display: none; } /*要显示放大图片的父级*/ .main{ width: 700px; height: 700px; margin-left: 420px; overflow:hidden; display:none; position: absolute; top: 0; } .main>img{ width:2800px; height:auto; } </style> </head> <body> <div class="wrap"> <img src="dog.jpg" alt="" /> <div class="box"></div> </div> <div class="main"> <img src="dog.jpg"alt="" /> </div> <script type="text/javascript"> //获取四个对象 var wrap=document.querySelector('.wrap'); var box=document.querySelector('.box'); var main=document.querySelector('.main'); var mainImg=document.querySelector('.main img'); //添加移动事件 wrap.onmousemove=function(){ //鼠标移入可视图片后出现 锁定放大区域及放大图片 box.style.display='block'; main.style.display='block'; var event=window.event || event; //获取鼠标距离可视区域边缘的偏移量 var disx=event.clientX-box.offsetWidth/2; var disy=event.clientY-box.offsetHeight/2; //矩形区域的最大可移动范围 var distanceMaxX=wrap.offsetWidth-box.offsetWidth; var distanceMaxY=wrap.offsetHeight-box.offsetHeight; // 判断让锁定放大的矩形区域不能出框 if (disx<=0) { disx=0; } if (disy<=0) { disy=0; } if(disx>=distanceMaxX) { disx=distanceMaxX; } if(disy>=distanceMaxY) { disy=distanceMaxY; } box.style.left=disx+'px'; box.style.top=disy+'px'; //获取放大比例 var scalex=box.offsetLeft/distanceMaxX; var scaley=box.offsetTop/distanceMaxY; main.scrollLeft=(mainImg.clientWidth-main.clientWidth)*scalex; main.scrollTop=(mainImg.clientHeight-main.clientHeight)*scaley; } //添加移出事件 wrap.onmouseout=function(){ box.style.display='none'; main.style.display='none'; } </script> </body> </html>
효과 미리보기:
두 번째는 원본 이미지를 직접 확대하는 방법입니다. 돋보기는 위와 동일하며, 최종적으로 가시 영역을 배치할 필요가 없다는 점을 제외하면 이전 방법과 차이점이 없습니다. 확대된 영역의 왼쪽 및 위쪽 값을 수정하면 해당 이미지의 왼쪽 및 위쪽 값이 자동으로 동시에 수정되어 동기 증폭 효과를 얻을 수 있습니다. 🎜>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>放大镜</title> <style type="text/css"> .main{ width: 500px; height: 570px; border: 2px solid black; position: relative; /*overflow: hidden;*/ } #img1{ width: 100%; height: 100%; } .box{ width: 200px; height: 200px; border-radius: 200px; /*border: 1px solid black;*/ display: none; position: absolute; overflow: hidden; cursor:move; } //放大图片 给绝对定位让移动时它也能跟着移动 实现和我们锁定的区域同步 #img2{ width: 1200px; height: 1400px; position: absolute; /*left: 0; top: 0;*/ /*display: none;*/ } </style> </head> <body> <div class="main"> <img id="img1" src="dog.jpg"/ alt="네이티브 js 코드로 이미지 확대 효과 달성" > <div class="box"> <img id="img2" src="dog.jpg"/ alt="네이티브 js 코드로 이미지 확대 효과 달성" > </div> </div> </body> </html> <script type="text/javascript"> var main=document.querySelector('.main'); var box=document.querySelector('.box'); var boximg=document.querySelector('#img2'); //添加鼠标移动事件 main.addEventListener('mousemove',move,false); function move(){ //显示放大的圆形区域 box.style.display='block'; var event=window.event||event; //获取鼠标距离可视区域边缘的偏移量 var disx=event.clientX-box.offsetWidth/2; var disy=event.clientY-box.offsetHeight/2; var dismax=main.offsetWidth-box.offsetWidth; var dismay=main.offsetHeight-box.offsetHeight; //矩形区域的最大可移动范围 if (disx<=0) { disx=0; } if (disx>=dismax) { disx=dismax-2; } if(disy<=0){ disy=0; } if(disy>=dismay){ disy=dismay-2; } //当你移动的时候修改圆形区域的left以及 top值。 box.style.left=disx+'px'; box.style.top=disy+'px'; // var scalx=main.offsetWidth/box.offsetWidth // var scaly=main.offsetHeight/box.offsetHeight; //同理当你移动时放大的图片它的图片也要修改left和top值 boximg.style.left=-event.clientX*2+'px'; boximg.style.top=-event.clientY*2+'px'; // box.scrollLeft=(boximg.offsetWidth-box.offsetWidth); // box.scrollTop=(boximg.offsetHeight-box.offsetHeight); } // 添加鼠标移出事件 main.addEventListener('mouseout',out,false); function out(){ box.style.display='none'; } </script>