文章标题

html部分

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>放大镜2</title>
        <link rel="stylesheet" type="text/css" href="../css/reset.css" />
        <link rel="stylesheet" type="text/css" href="../css/放大镜2.css" />
        <script type="text/javascript" src="../js/basics.js"></script>
        <script type="text/javascript" src="../js/放大镜2.js"></script>    
    </head>
    <body>
        <div id="box">
            <div id="smallImg">
                <img src="../img/1_2.jpeg"/>
                <div class="move-area"></div>
            </div>
            <div id="smallImg-logo">
                <ul class="clear">
                    <li>
                        <img src="../img/1_1.jpeg" data-sImg="../img/1_2.jpeg" data-bImg="../img/1_3.jpeg"/>
                    </li>
                    <li>
                        <img src="../img/2_1.jpeg" data-sImg="../img/2_2.jpeg" data-bImg="../img/2_3.jpeg"/>
                    </li>
                    <li>
                        <img src="../img/3_1.jpeg" data-sImg="../img/3_2.jpeg" data-bImg="../img/3_3.jpeg"/>
                    </li>
                    <li>
                        <img src="../img/4_1.jpeg" data-sImg="../img/4_2.jpeg" data-bImg="../img/4_3.jpeg"/>
                    </li>
                    <li>
                        <img src="../img/5_1.jpeg" data-sImg="../img/5_2.jpeg" data-bImg="../img/5_3.jpeg"/>
                    </li>

                </ul>
            </div>
            <div id="bigImg">
                <img src="../img/1_3.jpeg" />
            </div>
        </div>
    </body>
</html>

css部分

#box{
    height: 480px;
    width: 380px;
    border: solid 1px #CCCCCC;
    position: relative;
    margin: 20px 0 0 20px;
}
#box #smallImg{
    margin:10px;
    width: 358px;
    height: 358px;
    border: solid 1px #CCCCCC;
    position: relative;
}

#box .move-area{
    background:plum;
    opacity: 0.3;
    filter: alpha(opacity = 30);
    width: 100px;
    height: 100px;
    position: absolute;
    top: 10px;
    left: 10px;
    display: none;
}
#box #smallImg img{
    width: 358px;
    height: 358px;
}
#box #smallImg-logo{
    padding-left: 30px;
}
#box #smallImg-logo ul li{
    float: left;
    height: 54px;
    width: 54px;
    border: solid 1px #CCCCCC;
    margin-right: 10px;
}

#box #smallImg-logo ul li img{
    height: 54px;
    width: 54px;
}

#box #bigImg{
    position: absolute;
    top: 0;
    right: -550px;
    height: 500px;
    width: 500px;
    border: solid 1px #CCCCCC;
    overflow: hidden;
    /*display: none;*/
}
#box #bigImg img{
    position: absolute;
    top: 0;
    left: 0;
}

js部分

/*
 * 1、分为三个部分小图、大图、图标
 * 2、给小图添加自定义的属性用于保存,小图和大图中的图片来源
 * 3、给小图标添加鼠标移入事件,当鼠标移入转换对应的小图和大图
 * 4、给小图添加移入事件,显示区域框和大图对应区域框的位置(区域框相对于器包含块定位,改变它的left和top值)
 *  区域框的left值 = 鼠标事件发生位置pageX - 最外层包含块的offsetLeft的值 - 其直接包含框的offset的值 -区域框宽度的一般,值同理
 * 5、大图的图片设置相对于其包含块相对定位,它移动的距离为 -(大图的宽度/小图的宽度)*x,运动方向个区域框的方法相反,所以取负
 * 6、区域框的大小设置:小图/大图*40;
 * 
 * 注意事项:
 * 1、自己生成的移动狂的大小要取整数
 * 2、当鼠标移动框的距离大于包含框的宽度- 移动狂的宽度时,让 移动框的lef值= 包含块的宽度(offsetWidth)- 移动狂的宽度,高度同理
 * 有时候可能会收到边框的影响则x/y的值再减去边框长度(或者使用clientWidth则不需要减去边框长度)
 */

window.onload = function(){
    var smallImgLogo = $('smallImg-logo');
    var lis1 = smallImgLogo.getElementsByTagName('li');
    var smallImgPic = $('smallImg').getElementsByTagName('img')[0];
    var bigImgPic = $('bigImg').getElementsByTagName('img')[0];


    for(var i = 0;i < lis1.length;i++){
        lis1[i].index = i;
        lis1[i].onmouseover = function(){
            this.style.borderColor = 'black';
            smallImgPic.src = lis1[this.index].children[0].getAttribute('data-sImg');
            bigImgPic.src = lis1[this.index].children[0].getAttribute('data-bImg');
        };
        lis1[i].onmouseout = function(){
            this.style.borderColor = '#ccc';
        };
    }

    var moveArea = document.getElementsByClassName('move-area')[0];
    var scale = (bigImgPic.offsetWidth)/(smallImgPic.offsetWidth);

    moveArea.style.width = parseInt(1/scale*300)+'px';
    moveArea.style.height = parseInt(1/scale*300)+'px';

    var smallImg = $('smallImg');
    var bigImg = $('bigImg');
    var box = $('box');
    smallImg.onmousemove = function(evt){
        var e = evt || window.event;

        moveArea.style.display = 'block';
        bigImg.style.display = 'block';

        var x = e.pageX - box.offsetLeft - smallImg.offsetLeft - parseInt(moveArea.offsetWidth/2);
        var y = e.pageY - box.offsetTop - smallImg.offsetTop - parseInt(moveArea.offsetHeight/2);

        if(x < 0){
            x = 0;
        }else if(x > (smallImg.clientWidth - moveArea.offsetWidth)){
            x = smallImg.clientWidth - moveArea.offsetWidth;  
        }

        if(y < 0){
            y = 0;
        }else if(y > (smallImg.clientHeight - moveArea.offsetHeight)){
            y = smallImg.clientHeight - moveArea.offsetHeight;
        }
//      console.log(x);
        moveArea.style.left = x + 'px';
        moveArea.style.top = y + 'px';

        bigImgPic.style.left = -scale*x + 'px';
        bigImgPic.style.top = -scale*y + 'px';

    }

    smallImg.onmouseout = function(){
        moveArea.style.display = 'none';
        bigImg.style.display = 'none';
    }

};

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值