zoukankan      html  css  js  c++  java
  • 案例:放大镜显示和隐藏遮挡层及大层

     <style>
    * {
    margin: 0;
    padding: 0;
    }

    .box {
    350px;
    height: 350px;
    margin: 100px;
    border: 1px solid #ccc;
    position: relative;
    }

    .big {
    400px;
    height: 400px;
    position: absolute;
    top: 0;
    left: 360px;
    border: 1px solid #ccc;
    overflow: hidden;
    display: none;
    }

    .mask {
    175px;
    height: 175px;
    background: rgba(255, 255, 0, 0.4);
    position: absolute;
    top: 0px;
    left: 0px;
    cursor: move;
    display: none;
    }

    .small {
    position: relative;
    }
    </style>

    </head>
    <body>
    <div class="box" id="box">
    <div class="small"><!--小层-->
    <img src="imgs/small.png" width="350" alt=""/>
    <div class="mask"></div><!--遮挡层-->
    </div><!--小图-->
    <div class="big"><!--大层-->
    <img src="imgs/big.jpg" width="800" alt=""/><!--大图-->
    </div><!--大图-->
    </div>
    <script src="../DOM/commer.js"></script>
    <script>
    //获取最外面的div
    var box=ver("box");
    //获取小层
    var small=box.children[0];
    //获取遮挡层
    var mask=small.children[1];
    //获取大层
    var big=box.children[1];
    //获取大图
    var bigImg=big.children[0];

    //鼠标进入显示遮挡层和大图的div
    box.onmouseover=function () {
    mask.style.display="block";
    big.style.display="block";
    };
    //鼠标离开隐藏遮挡层和大图的div
    box.onmouseout=function () {
    mask.style.display="none";
    big.style.display="none";
    };


    //鼠标的移动事件---鼠标是在小层上移动
    small.onmousemove = function (e) {
    //鼠标此时的可视区域的横坐标和纵坐标
    //主要是设置鼠标在遮挡层的中间显示
    var x = e.clientX - mask.offsetWidth / 2;
    var y = e.clientY - mask.offsetHeight / 2;
    //主要是margin的100px的问题
    x=x-100;
    y=y-100;
    //横坐标的最小值
    x=x<0?0:x;
    //纵坐标的最小值
    y=y<0?0:y;
    //横坐标的最大值
    x=x>small.offsetWidth-mask.offsetWidth?small.offsetWidth-mask.offsetWidth:x;
    //纵坐标的最大值
    y=y>small.offsetHeight-mask.offsetHeight?big.offsetHeight-mask.offsetHeight:y;

    //为遮挡层的left和top赋值
    mask.style.left = x + "px";
    mask.style.top = y + "px";

    //遮挡层的移动距离/大图的移动距离=遮挡层的最大移动距离/大图的最大移动距离
    //大图的移动距离=遮挡层的移动距离*大图的最大移动距离/遮挡层的最大移动距离

    //大图的横向的最大移动距离
    var maxX=bigImg.offsetWidth-big.offsetWidth;
    //大图的纵向的最大移动距离
    var maxY=bigImg.offsetHeight-big.offsetHeight;
    //大图的横向移动的坐标
    var bigImgMoveX=x*maxX/(small.offsetWidth-mask.offsetWidth);
    //大图的纵向移动的坐标
    var bigImgMoveY=y*maxX/(small.offsetWidth-mask.offsetWidth);
    //设置图片移动
    bigImg.style.marginLeft=-bigImgMoveX+"px";
    bigImg.style.marginTop=-bigImgMoveY+"px";
    };

    </script>
    <script>
    //获取需要的元素
    var box = ver("box");
    //获取小图的div
    var small = box.children[0];
    //遮挡层
    var mask = small.children[1];
    //获取大图的div
    var big = box.children[1];
    //获取大图
    var bigImg = big.children[0];

    //鼠标进入显示遮挡层和大图的div
    box.onmouseover = function () {
    mask.style.display = "block";
    big.style.display = "block";
    };
    //鼠标离开隐藏遮挡层和大图的div
    box.onmouseout = function () {
    mask.style.display = "none";
    big.style.display = "none";
    };

    //鼠标的移动事件---鼠标是在小层上移动
    small.onmousemove = function (e) {
    //鼠标此时的可视区域的横坐标和纵坐标
    //主要是设置鼠标在遮挡层的中间显示
    var x = e.clientX - mask.offsetWidth / 2;
    var y = e.clientY - mask.offsetHeight / 2;

    //主要是margin的100px的问题
    x = x - 100;
    y = y - 100;
    //横坐标的最小值
    x = x < 0 ? 0 : x;
    //纵坐标的最小值
    y = y < 0 ? 0 : y;

    //横坐标的最大值
    x = x > small.offsetWidth - mask.offsetWidth ? small.offsetWidth - mask.offsetWidth : x;
    //纵坐标的最大值
    y = y > small.offsetHeight - mask.offsetHeight ? small.offsetHeight - mask.offsetHeight : y;
    //为遮挡层的left和top赋值
    mask.style.left = x + "px";
    mask.style.top = y + "px";

    //遮挡层的移动距离/大图的移动距离=遮挡层的最大移动距离/大图的最大移动距离
    //大图的移动距离=遮挡层的移动距离*大图的最大移动距离/遮挡层的最大移动距离

    //大图的横向的最大移动距离
    var maxX = bigImg.offsetWidth - big.offsetWidth;

    //大图的纵向的最大移动距离
    //var maxY = bigImg.offsetHeight - big.offsetHeight;

    //大图的横向移动的坐标
    var bigImgMoveX = x * maxX / (small.offsetWidth - mask.offsetWidth);
    //大图的纵向移动的坐标
    var bigImgMoveY = y * maxX / (small.offsetWidth - mask.offsetWidth);

    //设置图片移动
    bigImg.style.marginLeft = -bigImgMoveX + "px";
    bigImg.style.marginTop = -bigImgMoveY + "px";

    }
    ;
    </script>
  • 相关阅读:
    .NET探索模型路由约定实现伪静态
    .NET中使用DebuggerDisplay轻松定制调试
    .NET探索平台条件编译
    Spring Boot+Logback输出日志到指定路径
    SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020
    FSAF:嵌入anchor-free分支来指导acnhor-based算法训练 | CVPR2019
    RepPointsV2:更多的监督任务,更强的性能 | NIPS 2020
    RepPoints:微软巧用变形卷积生成点集进行目标检测,创意满满 | ICCV 2019
    CornerNet-Lite:CornerNet粗暴优化,加速6倍还提点了 | BMVC 2020
    SaccadeNet:使用角点特征进行two-stage预测框精调 | CVPR 2020
  • 原文地址:https://www.cnblogs.com/lujieting/p/10058518.html
Copyright © 2011-2022 走看看