>  기사  >  웹 프론트엔드  >  네이티브 js 코드로 이미지 확대 효과 달성

네이티브 js 코드로 이미지 확대 효과 달성

高洛峰
高洛峰원래의
2016-12-08 13:56:051003검색

오늘은 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(&#39;.wrap&#39;);
var box=document.querySelector(&#39;.box&#39;);
var main=document.querySelector(&#39;.main&#39;);
var mainImg=document.querySelector(&#39;.main img&#39;);
//添加移动事件
wrap.onmousemove=function(){
//鼠标移入可视图片后出现 锁定放大区域及放大图片
box.style.display=&#39;block&#39;;
main.style.display=&#39;block&#39;;
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+&#39;px&#39;;
box.style.top=disy+&#39;px&#39;;
 
//获取放大比例
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=&#39;none&#39;;
main.style.display=&#39;none&#39;;
}
</script>
</body>
</html>

효과 미리보기:

네이티브 js 코드로 이미지 확대 효과 달성

두 번째는 원본 이미지를 직접 확대하는 방법입니다. 돋보기는 위와 동일하며, 최종적으로 가시 영역을 배치할 필요가 없다는 점을 제외하면 이전 방법과 차이점이 없습니다. 확대된 영역의 왼쪽 및 위쪽 값을 수정하면 해당 이미지의 왼쪽 및 위쪽 값이 자동으로 동시에 수정되어 동기 증폭 효과를 얻을 수 있습니다. 🎜>

<!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(&#39;.main&#39;);
var box=document.querySelector(&#39;.box&#39;);
var boximg=document.querySelector(&#39;#img2&#39;);
//添加鼠标移动事件
main.addEventListener(&#39;mousemove&#39;,move,false);
function move(){
//显示放大的圆形区域
box.style.display=&#39;block&#39;;
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+&#39;px&#39;;
box.style.top=disy+&#39;px&#39;;
// var scalx=main.offsetWidth/box.offsetWidth
// var scaly=main.offsetHeight/box.offsetHeight;
//同理当你移动时放大的图片它的图片也要修改left和top值
boximg.style.left=-event.clientX*2+&#39;px&#39;;
boximg.style.top=-event.clientY*2+&#39;px&#39;;
// box.scrollLeft=(boximg.offsetWidth-box.offsetWidth);
// box.scrollTop=(boximg.offsetHeight-box.offsetHeight);
}
// 添加鼠标移出事件
main.addEventListener(&#39;mouseout&#39;,out,false);
function out(){
box.style.display=&#39;none&#39;;
}
</script>

효과 미리보기:

네이티브 js 코드로 이미지 확대 효과 달성

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.