<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>放大镜功能</title>
<style>
#small {
width: 300px;
width: 303px;
border: 2px solid red;
position: relative;
}
#small img {
width: 100%;
}
#slider {
width: 60px;
height: 60px;
position: absolute;
left: 0;
top: 0;
background-color: rgba(0, 200, 200, 0.5);
display: none;
}
#big {
width: 300px;
height: 303px;
position: absolute;
left: 350px;
top: 10px;
display: none;
overflow: hidden;
}
#big img {
width: 1500px;
}
</style>
</head>
<body>
<!--左侧的小图部分-->
<div id="small">
<img src="img/2.png" alt="" />
<!--图片上的滑块部分-->
<div id="slider"></div>
</div>
<!--右侧的大图部分-->
<div id="big">
<img src="img/3.jpg" alt="" />
</div>
</body>
<script type="text/javascript">
var small = document.getElementById("small");
var sliderDiv = document.getElementById("slider");
var big = document.getElementById("big");
var bigImg = document.querySelector("#big>img");
//给small添加移入移出事件
small.onmouseenter = function() {
sliderDiv.style.display = "block";
big.style.display = "block";
}
small.onmouseleave = function() {
sliderDiv.style.display = "none";
big.style.display = "none";
}
//给small添加鼠标移动事件
small.onmousemove = function(e) {
var event1 = event || e;
//获取鼠标点的位置,X轴位置,设置left值
var xDistance = event1.clientX - small.offsetLeft - sliderDiv.offsetWidth / 2;
//获取鼠标点的位置,Y轴位置,设置top值
var yDistance = event1.clientY - small.offsetTop - sliderDiv.offsetHeight / 2;
//设置滑块移动的X轴的最大值
var maxX = small.offsetWidth - sliderDiv.offsetWidth;
var maxY = small.offsetHeight - sliderDiv.offsetHeight;
//左侧超出时
if (xDistance <= 0) {
xDistance = 0;
}
//右侧超出
if (xDistance > maxX) {
xDistance = maxX;
}
//上侧超出
if (yDistance < 0) {
yDistance = 0;
}
//下侧超出
if (yDistance > maxX) {
yDistance = maxY;
}
//设置滑块的位置
sliderDiv.style.left = xDistance + "px";
sliderDiv.style.top = yDistance + "px";
//修改大图的位置
//第一种方式:使用滚动
//当滑块滚动到某一位置是占总总滚动距离的百分比
// big.scrollLeft = (bigImg.offsetWidth - big.clientWidth) * xDistance / maxX ;
// big.scrollTop = (bigImg.offsetHeight - big.clientHeight) * yDistance / maxY ;
//第二种方式:使用定位
bigImg.style.position="absolute";
bigImg.style.left=-(bigImg.offsetWidth-big.clientWidth)*xDistance/maxX+"px";
bigImg.style.top=-(bigImg.offsetHeight-big.clientHeight)*yDistance/maxY+"px";
}
</script>
</html>