放大镜效果的制作

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>淘宝放大镜制作</title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #demo{
                width: 400px;
                height: 255px;
                margin: 50px;
                position: relative;
                border: 1px solid red;
                display: block;
            }
            /*宽高没有设置 默认和其父盒子的宽高保持一致*/
            #small-box{
                position: relative;
                z-index: 1;
            }
            #float-box{
                display: none;
                width: 160px;
                height: 120px;
                position: absolute;
                background: gray;
                border: 1px solid gray;
                opacity: 0.5;
            }
            #big-box{
                display: none;
                /*相对于demo盒子来进行的定位*/
                position: absolute;
                top: 0;
                /*距离左边的距离是小盒子的宽度加上两者之间的距离*/
                left: 460px;
                width: 400px;
                height: 300px;
                overflow: hidden;
                border: 1px solid red;
                z-index: 1;
            }
            /*大图必须设置定位 向上找 知道找到一个设置定位的父亲为止 无论是什么定位都可以*/
            #big-box img{
                position: absolute;
                z-index: 1;
            }

            #mask{
                position: absolute;
                display: block;
                width: 400px;
                height: 255px;
                background-color:white ;
                opacity: 0;
                z-index: 10;

            }
        </style>
    </head>
    <body>
        <div id="demo">
            <div id="small-box">
                <!--设置代替层-->
                <div id="mask"></div>
                <div id="float-box"></div>
                <img src="macbook-small.jpg" />
            </div>
            <div id="big-box">
                <img src="macbook-big.jpg" />
            </div>
        </div>
    </body>
</html>
<script>
    window.onload=function(){
        //获取最父级盒子
        var objDemoBox=document.getElementById('demo');
        //获取小图片盒子
        var objSmallBox=document.getElementById('small-box');
        //获取鼠标可以移动的的盒子
        var objFloatBox=document.getElementById('float-box');
        //获取大图片盒子
        var objBigBox=document.getElementById('big-box');
        //获取大图片
        var objBigBoxImg=objBigBox.getElementsByTagName('img')[0];
        //获取鼠标真正拖动的对象
        var objMarkBox=document.getElementById('mask');


        //设置鼠标悬停后的样式
        objMarkBox.onmouseover=function(){
            objFloatBox.style.display='block';
            objBigBox.style.display='block';
        }
        //设置鼠标移开后的样式显示效果
        objMarkBox.onmouseout=function(){
            objFloatBox.style.display='none';
            objBigBox.style.display='none';
        }
        //获取鼠标移动时的事件 主要是通过鼠标事件来获取鼠标的坐标
        objMarkBox.onmousemove=function(ev){
            var _event=ev ||window.event;
            var left=_event.clientX-objDemoBox.offsetLeft-objSmallBox.offsetLeft-objFloatBox.offsetWidth/2;
            var top=_event.clientY-objDemoBox.offsetTop-objSmallBox.offsetTop-objFloatBox.offsetHeight/2;;
            //限制盒子的移动区域不能超过小盒子
            if(left<0){
                left=0;
            }else 
            if(left>objSmallBox.offsetWidth-objFloatBox.offsetWidth){
                left=objSmallBox.offsetWidth-objFloatBox.offsetWidth
            }
            if(top<0){
                top=0;
            }else 
            if(top>objSmallBox.offsetHeight-objFloatBox.offsetHeight){
                top=objSmallBox.offsetHeight-objFloatBox.offsetHeight
            }

            //使其随着鼠标移动而移动 改变坐标
            objFloatBox.style.left=left+'px';
            objFloatBox.style.top=top+'px';


            //下面是计算大图片的应该移动的距离 万能公式
            var ppx=left/(objSmallBox.offsetWidth-objFloatBox.offsetWidth);
            var ppy=top/(objSmallBox.offsetHeight-objFloatBox.offsetHeight);
            //使得图片的位置发生改变
            objBigBoxImg.style.left=-ppx*(objBigBoxImg.offsetWidth-objBigBox.offsetWidth)+'px';
            objBigBoxImg.style.top=-ppy*(objBigBoxImg.offsetHeight-objBigBox.offsetHeight)+'px';

        }

    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值