购物简单的放大镜

230 阅读1分钟

思路:
1.写好css样式
2.获取显示大图比例算出 放大镜的宽度
3.根据放大镜在图片中移动的距离求出大图片现实的位置
4.鼠标移入container事件 移除事件

代码如下
css代码:
<style>
    .container{
        width: 450px;
        height: 450px;
        position: absolute;
        margin: 50px;
        border: 1px solid #000;
    }
    .s-img{
        width: 100%;
        height: 100%;
        position: absolute;
        left:0;
        top:0
    }
    .s-img img{
        width: 100%;
    }
    .b-img{
        width: 540px;
        height: 540px;
        position: absolute;
        top:0;
        left: 460px;
        border: 1px solid #000;
        background: url(./1.jpg) no-repeat;
        display:none
    }
    .magnifier{
        width: 300px;
        height: 300px;
        position: absolute;
        background: rgba(201, 233, 21, 0.4);
        display: none;
    }
</style>



html代码:
<div class="container">
    <div class="s-img">
        <img src="./1.jpg">
    </div>
    <div class="magnifier"></div>
    <div class="b-img"></div>
</div>


js代码:

<script>
    var bImg=document.querySelector('.b-img');
    var magnifier=document.querySelector('.magnifier');
    var container=document.querySelector('.container');
    //声明大图片为800
    var size=800;
    var sImgSize=450;

    container.onmouseover=function(e){
        e.preventDefault();
        magnifier.style.display=bImg.style.display='block';
        //运用比例算出放大镜的宽高(例子为正方形 所以宽高都一样)
        magnifier.style.width=magnifier.style.height=bImg.offsetWidth/size*sImgSize+'px';
        container.onmousemove=function(e){
            //算出放大镜的left和top值
            var x=e.pageX-container.offsetLeft-magnifier.offsetWidth/2;
            var y=e.pageY-container.offsetTop-magnifier.offsetWidth/2;
            //最大的位移值
            var maxWidth=container.offsetWidth-magnifier.offsetWidth;
            //给放大镜设置边距  不能超出容器
            if(x<0) x=0;
            if(y<0) y=0;
            if(x>maxWidth){
                x=maxWidth
            }
            if(y>maxWidth){
                y=maxWidth
            }
            magnifier.style.left=x+'px';
            magnifier.style.top=y+'px';
            //x/maxWidth、、y/maxWidth 坐标的比例
            var dx=x/maxWidth*(size-bImg.offsetWidth);
            var dy=y/maxWidth*(size-bImg.offsetWidth);
            bImg.style.backgroundPosition=`-${dx}px -${dy}px`
        }
     }
     //移除容器将放大镜和大图隐藏
     container.onmouseout=function(){
        magnifier.style.display=bImg.style.display='';
    }