【每日一学】模仿淘宝图片放大效果。
原理:我们需要两张图片,一张大图和一张小图。默认大图不显示,当鼠标在小图上时,大图展示出来。然后跟随鼠标在小图上移动距离,来设定大图的移动。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>放大镜</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
height: 1000px;
}
.box{
width: 400px;
height: 400px;
position: relative;
margin: 100px 0 0 50px;
}
.small-box{
width: 100%;
height: 100%;
border: 2px solid #000;
position: relative;
}
.small-box>img{
width: 400px;
height: 400px;
}
.box .small-slider{
width: 150px;
height: 150px;
background-color: goldenrod;
opacity: .6;
position: absolute;
/*默认隐藏*/
display: none;
left: 0px;
top: 0px;
}
.box .show-Box{
width: 600px;
height: 600px;
border: 2px solid #000;
position: absolute;
overflow: hidden;
/*默认隐藏*/
display: none;
left: 410px;
top:0px;
}
.box .show-Box img{
position: absolute;
}
</style>
</head>
<body>
<div id="box">
<div id="smallBox">
<img src="https://img14.360buyimg.com/n1/s450x450_jfs/t1435/291/1093842322/97500/de4725cb/55bb420fNfb17575e.jpg" alt="">
<span></span>
</div>
<div id="showBox">
<img src="https://img14.360buyimg.com/n0/jfs/t1435/291/1093842322/97500/de4725cb/55bb420fNfb17575e.jpg" alt="">
</div>
</div>
<script>
window.onload = function () {
var fatherBox = document.getElementById('box');
var smallBox = document.getElementById('smallBox');//获得小盒子
var smallSlider = smallBox.children[1];//获得小黄块
var showBox = document.getElementById('showBox');//获得展示块
var showBoxImg = showBox.children[0];
var smallBoxLeft = smallBox.offsetParent.offsetLeft;//获得小盒子左边间距
var smallBoxTop = smallBox.offsetParent.offsetTop; //获得小盒子上边间距
//触摸小盒子
smallBox.onmouseover = function () {
/*1.首先要将smallSlider showBox显示出来*/
showBox.style.display = 'block';
smallSlider.style.display = 'block'
//滑块所走最大横向距离x
var maxLeftX = smallBox.offsetWidth-smallSlider.offsetWidth-4//4为边框;
//滑块所走最大纵向距离y
var maxTopY = smallBox.offsetHeight-smallSlider.offsetHeight-4//同上;
//大图片所走距离x
var showImgMaxLeft = showBox.offsetWidth-showBoxImg.offsetWidth;
//大图片所走距离y
var showImgMaxTop = showBox.offsetHeight-showBoxImg.offsetHeight;
var leftRatio = maxLeftX/showImgMaxLeft;//横向(X)距离比例
var topRatio = maxTopY/showImgMaxTop;//纵向(Y)距离比例
//当鼠标在小盒子上移动的时候
smallBox.onmousemove = function (event) {
var event = event || window.event;
var leftX = event.pageX-smallBoxLeft-smallSlider.offsetWidth * 0.5;
var topY = event.pageY-smallBoxTop-smallSlider.offsetHeight * 0.5;
if (leftX<0){
leftX = 0;
} else if (leftX >= maxLeftX ){
leftX = maxLeftX;
}
if (topY<0){
topY = 0;
}else if (topY >= maxTopY){
topY = maxTopY;
}
smallSlider.style.left = leftX + 'px';
smallSlider.style.top = topY + 'px';
showBoxImg.style.left = leftX/leftRatio+'px';
showBoxImg.style.top = topY/topRatio+'px';
return false;
}
//摸完了后
smallBox.onmouseout = function () {
/*2.移出鼠标后,隐藏smallSlider showBox*/
smallSlider.style.display = 'none';
showBox.style.display = 'none';
}
return false;
}
}
</script>
</body>
</html>贴到页面中试试看吧。






网友评论文明上网理性发言 已有0人参与
发表评论: