学习的JS放大镜

来源:互联网 发布:关键词分分析软件 编辑:程序博客网 时间:2024/06/05 11:46
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
    #bujv{width:171px;height:256px;position:relative;border:1px #000000 solid;padding:10px;}
    #smallbox{width:171px;height:256px;position:relative;}
    #smallbox #mod{width:100%;height:100%;background: #ff0;opacity:0;position:absolute;z-index: 5;display:block;}
    #smallbox #float1{width:50px;height:50px;background: #5F5C5C;opacity:0.5;position:absolute;z-index: 1;display:none}
    #bujv #bigbox{width:185px;height:270px;left:245px;top:0;position: absolute;display: none;overflow: hidden;}
    #bigImg{position:absolute;}
</style>
<script>
    window.onload = function(){
        var bujv = document.getElementById("bujv");
        var smallbox = document.getElementById("smallbox");
        var mod = document.getElementById("mod");
        var float1 = document.getElementById("float1");
        var bigbox = document.getElementById("bigbox");
        var bigImg = document.getElementById("bigImg");
        // mod移入移出事件
        mod.onmouseover = function(){
            float1.style.display = "block";
            bigbox.style.display = "block";
            }
        mod.onmouseout = function(){
            float1.style.display = "none";
            bigbox.style.display = "none";
            }
        // mod移动事件
        mod.onmousemove = function(evt){
            var e = evt || window.event //事件兼容写法
            // 使鼠标到滑块的中心位置
            var fleft = e.clientX - bujv.offsetLeft - mod.offsetLeft - float1.offsetWidth/2;
            var ftop = e.clientY - bujv.offsetTop - mod.offsetTop - float1.offsetHeight/2;
            // 设置边界
            if (fleft < 0){ //左边界
                fleft = 0 ;
            }else if(fleft > mod.offsetWidth - float1.offsetWidth){ //右边界
                fleft = mod.offsetWidth - float1.offsetWidth;
            }
            if (ftop < 0){ //上边界
                ftop = 0 ;
            }else if(ftop > mod.offsetHeight - float1.offsetHeight){ // 下边界
                ftop = mod.offsetHeight - float1.offsetHeight;
            }
            // 滑块跟随鼠标移动(实质是改变滑块的left和top值)
            float1.style.left = fleft + "px";
            float1.style.top = ftop + "px";
            //设置比例  滑块在mod中的移动范围
            var bileX = fleft / (mod.offsetWidth - float1.offsetWidth);
            var bileY = ftop / (mod.offsetHeight - float1.offsetHeight);
            // 大图能移动的范围 (比例乘以大图与大盒子的差)
            bigImg.style.left = - bileX * (bigImg.offsetWidth - bigbox.offsetWidth) + "px";
             bigImg.style.top = - bileY * (bigImg.offsetHeight - bigbox.offsetHeight) + "px";
        }
    }
</script>
</head>
<body>
    <div id="bujv">
        <div id="smallbox">
            <span id="mod"></span>
            <div id="float1"></div>
            <img src="small.jpg">
        </div>
        <div id="bigbox"><img src="big.jpg" id="bigImg"></div>
    </div>
</body>
</html>
0 0