zoukankan      html  css  js  c++  java
  • 放大镜

    实现思路:

    需要的事件:
    鼠标移入 和 移出   移动  onmouseover  onmouseout  onmousemove
     
    鼠标移入 : 显示遮罩层mask和大图显示区
     
    鼠标移出 : 隐藏遮罩层mask和大图显示区
     
    鼠标移动 :
            1、操作mask的left和top  让mask动起来
            2、操作bigImg的left和top  让大图动起来
            3、mask移动方向和bigImg
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #box{
                 350px;
                height: 350px;
                border:1px solid #000;
                margin: 200px;
                position: relative;
            }
            #mask{
                 175px;
                height: 175px;
                background: pink;
                opacity: .3;
                position: absolute;
                left: 0;
                top: 0;
                cursor: move;
                display: none;
            }
            #big{
                 400px;
                height: 400px;
                border: 1px solid #000;
                position: absolute;
                top : 0;
                left :  355px;
                overflow: hidden;
                display: none;
            }
            #bigImg{
                position: absolute;
                top: 0;
                left: 0;
            }
        </style>
        <body>
            <div id="box">
                <div id="small">
                    <img src="001.jpg" alt="" id="smallImg"/>
                    <div id="mask"></div>
                </div>
                <div id="big">
                    <img src="0001.jpg" alt="" id="bigImg"/>
                </div>
            </div>
        </body>
    </html>
    <script>
        function $id(id){
            return document.getElementById(id)
        }
        //涉及的事件 : onmouseover  onmouseout onmousemove
        var box = $id("box"), //整个放大镜容器
            small = $id("small"),//小图区
            mask = $id("mask"),//遮罩
            smallImg = $id("smallImg"),//小图
            bigImg = $id("bigImg"), //大图
            big = $id("big"); //大图显示区
            
        //第一步 : 鼠标移入移出到small上 显示和隐藏mask和big
        small.onmouseover = function(){
            big.style.display = "block";
            mask.style.display = "block";
        }
        small.onmouseout = function(){
            big.style.display = "none";
            mask.style.display = "none";
        }
        //第二步 : 鼠标在small上移动  操作mask跟随鼠标移动
        //改变mask的left和top
        small.onmousemove = function(e){
            var e = e || event;
            var x = e.pageX - mask.offsetWidth/2-box.offsetLeft;
            var y = e.pageY - mask.offsetHeight/2-box.offsetTop;
            //得到mask移动时的最大的left和top
            var maxL = small.offsetWidth-mask.offsetWidth;
            var maxT = small.offsetHeight - mask.offsetHeight;
            //边界处理
            /*if( x<0 ){
                x = 0;
            }else if(x > maxL){
                x = maxL;
            }*/
            x = x < 0 ? 0 : ( x > maxL ? maxL : x);
            y = y < 0 ? 0 : ( y > maxT ? maxT : y);
            
            //设置mask的移动
            mask.style.left = x + "px";
            mask.style.top = y + "px";
            
            //分析大图向上或向左移动的距离
            //大图的left/mask的left = 大图宽度/小图宽度  = 大图显示区宽度/mask宽度
            /*var bigImgLeft = x*(bigImg.offsetWidth-big.offsetWidth)/(small.offsetWidth-mask.offsetWidth);
            var bigImgTop = y*(bigImg.offsetHeight-big.offsetHeight)/(small.offsetHeight-mask.offsetHeight);*/
            var bigImgLeft = x*(bigImg.offsetWidth)/(small.offsetWidth);
            var bigImgTop = y*(bigImg.offsetHeight)/(small.offsetHeight);
            
            //设置大图的移动
            bigImg.style.left = -bigImgLeft + "px";
            bigImg.style.top = -bigImgTop + "px";
        }
    </script>
  • 相关阅读:
    【Hadoop】MapReduce自定义分区Partition输出各运营商的手机号码
    【Hadoop】Hadoop的数据压缩方式
    【Java】生成随机的手机号码并输出到文件
    【Java】递归删除目录以及文件
    【Hadoop】单机、伪分布式、完全分布式集群搭建
    【Linux】常用基础命令
    【Web】jquery合并单元格
    【PHP】PHPStorm中文乱码解决方式
    【DataBase】mysql连接错误:Cannot get hostname for your address
    【.NET】Browser Link: Failed to deserialize JSON in Browser Link call
  • 原文地址:https://www.cnblogs.com/mortalway/p/12068085.html
Copyright © 2011-2022 走看看