前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >放大镜

放大镜

作者头像
河湾欢儿
发布2018-09-06 17:19:02
1.5K0
发布2018-09-06 17:19:02
举报

放大镜:淘宝等电商页面应用广泛... 思路:先让move块和bimg块隐藏,当鼠标移动到box上时,使move块和bimg块显示,获取鼠标当前的位置,然后经过计算给与move块和bimg块适当的值实现放大镜效果

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>放大镜</title>
        <style type="text/css">
            *{
                margin: 0;padding: 0;
                }
            #magnifier {
                width: 800px;
                position: relative;
                margin: 50px 50px;
                }
            #magnifier #sImg{
                width: 360px;
                height: 360px;
                border: 1px solid #ccc;
                float: left;
                cursor: move;
                }
            #magnifier #move{
                width: 180px;
                height: 180px;
                position: absolute;
                top: 0;
                left: 0;
                background:#000;
                opacity: .3;
                display: none;
                }
            #magnifier #bImg{
                width: 420px;
                height: 420px;
                border: 1px solid #ccc;
                float: right;
                overflow: hidden;
                display: none;
                position: relative;
                }   
            #pic {
                position: absolute;
                top: 0;
                left: 0;
                }
        </style>
    </head>
    <body>
        <div id="magnifier">
            <div id="sImg">
                <img src="img/pic.jpg" width="360" height="360"/>
                <span id="move"></span>
            </div>
            <div id="bImg">
                <img src="img/pic.jpg" height="800" width="800" id="pic"/>
            </div>
        </div>
        <script type="text/javascript">
            var mag = document.getElementById("magnifier"); //获取大盒子
            var sImg = document.getElementById("sImg");//获取左边盒子
            var oMove = document.getElementById("move");//获取小黑框
            var bImg = document.getElementById("bImg");//右边的盒子
            var oPic = document.getElementById("pic");//右边图片
            sImg.onmouseover = function(){  //鼠标移入小图片显示滑块跟大图片
                oMove.style.display = 'block';
                bImg.style.display = 'block';
            }
            sImg.onmouseout = function(){ //鼠标移出小图片隐藏滑块跟大图片
                oMove.style.display = 'none';
                bImg.style.display = 'none';
            }
            sImg.onmousemove = function( ev ){ //当鼠标进入小图片时让小滑块移动
                ev = ev || event; //事件对象
                var mL = mag.offsetLeft; // 大DIV的距离左面的距离
                var mT = mag.offsetTop;  // 大DIV的距离上面的距离
                //为了让鼠标居中,拿到小滑块自身的宽度除以2
                var mW = oMove.offsetWidth / 2; 
                //为了让鼠标居中,拿到小滑块自身的高度除以2
                var mH = oMove.offsetHeight / 2;
                var x = ev.clientX - mL - mW; //拿到当前鼠标在小图片内的x轴移动位置
                var y = ev.clientY - mT - mH; //拿到当前鼠标在小图片内的Y轴移动位置
                var mMw = sImg.offsetWidth - oMove.offsetWidth; //算出小滑块最大的移动宽度 
                var mMh = sImg.offsetHeight - oMove.offsetHeight; //算出小滑块最大的移动高度
                if( x < 0 ){  //如果当前距离小于0,强制让他等于0
                    x = 0;
                }else if( x > mMw ){ 
                //如果当前距离大于小滑块最大的移动宽度,那么让他当前的位置等于小滑块最大的移动宽度
                    x = mMw;
                };
                if( y < 0 ){ //如果当前距离小于0,强制让他等于0
                    y = 0;
                }else if( y > mMh ){ 
                //如果当前距离大于小滑块最大的移动高度,那么让他当前的位置等于小滑块最大的移动高度
                    y = mMh;
                };
                oMove.style.left = x + 'px'; //把当前的位置赋给小滑块
                oMove.style.top = y + 'px'; //把当前的位置赋给小滑块
                //算比例,算大图对应小图的比例
                var preX = x / mMw; 
                var preY = y / mMh;
                //赋值
                oPic.style.left = -preX*( oPic.offsetWidth - bImg.offsetWidth )+'px';
                oPic.style.top = -preY*( oPic.offsetHeight - bImg.offsetHeight )+'px';
            }
        </script>
    </body>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档