页面图片放大镜效果

实现网页中图片的放大镜效果

效果如下

放大镜效果图

布局思路

一.设置一个外层盒子
二.外层盒子内放置左右两个盒子
三.左边盒子(minBox)放置一张图片和一个p标签(作为移动蒙版)
四.右边盒子(maxBox)作为视口并放置一张更大的图片(设置overflow:hidden;移动大图片的位置实现放大效果)

布局结构
<div class="outer">
    <div class="minbox">
        <img src="./images/timg.jpg" alt="">
        <p class="mask"></p>
    </div>
    <div class="bigbox">
        <img src="./images/timg.jpg" alt="">
    </div>
</div>
css样式
<style>
        *{
            margin:0px;
            padding:0px;
        }
        .outer{
            position:relative;
            margin: 50px auto;
        }
        .outer:after{
            content: "\200B";
            display:block;
            height:0;
            clear:both;
        }
        .outer>.minbox{
            width:400px;
            height:200px;
            border:1px solid #888888;
            float: left;
            position: relative;
        }
        .outer>.minbox>img{
            width:400px;
            height:200px;
        }
        .outer>.minbox>.mask{
            width:100px;
            height:100px;
            background-color: rgba(135, 223, 170, 0.58);
            position:absolute;
            top:0;
            left:0;
            display:none;
        }
        .outer>.bigbox{
            width:250px;
            height:250px;
            position: absolute;
            left:402px;
            top:0px;
            overflow: hidden;
            display:none;
        }
        .outer>.bigbox>img{
            width:800px;
            height:400px;
        }
    </style>

js行为思路

一.鼠标移入minBox时蒙版和右边的视口出现
二.鼠标在minBox内移动时保持鼠标在蒙版正中间并判断蒙版可移动的最大和最小范围
三.计算大图要移动的距离比例(我用的是长方形图片,所以要分别计算宽比和高比)
四.鼠标移出蒙版和右边的视口消失

js代码
<script>
    oMinBox = document.querySelector('.outer>.minbox')
    oMask = document.querySelector('.outer>.minbox>.mask')
    oBigBox = document.querySelector('.outer>.bigbox')
    oImg = document.querySelector('.outer>.bigbox>img')

    oMinBox.onmouseenter = function (e){
        var e = e || window.event
        oMask.style.display = "block"
        oBigBox.style.display = "block"
        oMinBox.onmousemove = function(e){
            var e = e || window.event
            var maskPosition = {
                left:e.clientX - oMask.offsetWidth/2 - oMinBox.getBoundingClientRect().left,
                top:e.clientY - oMask.offsetHeight/2 - oMinBox.getBoundingClientRect().top
            }
            if(maskPosition.left<=0){
                maskPosition.left = 0
            }else if(maskPosition.left>=oMinBox.clientWidth - oMask.offsetWidth){
                maskPosition.left = oMinBox.clientWidth - oMask.offsetWidth
            }
            if(maskPosition.top<=0){
                maskPosition.top = 0
            }else if(maskPosition.top>=oMinBox.clientHeight - oMask.offsetHeight){
                maskPosition.top = oMinBox.clientHeight - oMask.offsetHeight
            }
            oMask.style.left = maskPosition.left + 'px'
            oMask.style.top = maskPosition.top + 'px'

            //计算比例
            var scaleWidth = (oImg.clientWidth - oBigBox.offsetWidth)/(oMinBox.clientWidth - oMask.offsetWidth)
            var scaleHeight = (oImg.clientHeight - oBigBox.offsetHeight)/(oMinBox.clientHeight - oMask.offsetHeight)
            var bigBoxPosition = {
                left:maskPosition.left * scaleWidth,
                top:maskPosition.top * scaleHeight
            }
            oImg.style.marginLeft = -bigBoxPosition.left + 'px'
            oImg.style.marginTop = -bigBoxPosition.top + 'px'
        }
    }
    oMinBox.onmouseleave = function(e){
        var e = e || window.event
        oMask.style.display = "none"
        oBigBox.style.display = "none"
    }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值