• 案例:放大镜显示和隐藏遮挡层及大层


     <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>
  • 相关阅读:
    div错位解决IE6、IE7、IE8样式不兼容问题
    DIV背景半透明文字不半透明的样式
    Div 自适应屏幕大小
    mysql 设置外键 四大属性 CASCADE SET NULL NO ACTION RESTRICT 理解
    msyql 主从配置
    全国最新区划数据-四级-省-市-县(区)-乡(镇)
    ThinkPHP3.2 伪静态配置
    色彩网站
    Javascript php 异常捕获
    jQuery 操作大全
  • 原文地址:https://www.cnblogs.com/lujieting/p/10058518.html
Copyright © 2020-2023  润新知