码迷,mamicode.com
首页 > 其他好文 > 详细

放大镜

时间:2018-04-17 23:42:50      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:pos   target   判断   SM   cli   rip   use   ++   最大   

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            #box{
            position: relative;
            }
            #imgSmall{
                width: 400px;
                height: 400px;
                position:absolute;
                top: 0;
                left: 0;
            }
            #divSmall{
                width: 400px;
                position: absolute;
                top: 0;
                left: 0;
                height: 400px;
            }
            #divBig{
                width: 400px;
                height: 400px;
                position: absolute;
                left:410px;
                top: 0;
                overflow: hidden;
                opacity:0;
                display: none;
            }
            #glass{
                width: 100px;
                height: 100px;
                background: rgba(0,0,0,.5);
                position: absolute;
                top:0;
                left: 0;
                overflow:hidden;
                display: none;
                opacity: 0;
                cursor: pointer;
            }
            #imgSmall2{
                width: 400px;
                height: 400px;    
                position:absolute;
                top: 0;
                left:0;
            }
            #imgBig{
                width:1600px;
                height: 1600px;
                position: absolute;
                top: 0;
                left: 0;
            }
            #mask{
                width:400px;
                height: 400px;
                background: rgba(0,0,0,.5);
                position: absolute;
                top: 0;
                left: 0;
            }
            #show{
                width: 400px;
                height: 200px;
                position: absolute;
                top: 400px;
                left:0;
            }
            #show div{
                float: left;
                width: 20px;
                height: 200px;
                background: greenyellow;
                text-align: center;
                line-height: 200px;
                font-size: 30px;
                color:pink;
            }
            #show #div2{
                width:360px;
                background:yellowgreen;
                overflow: hidden;
            }
            #div2 img{
                width: 150px;
                height: 150px;
            }
            #div2 li{
                float:left;
                list-style: none;
                height: 150px;
                padding: 0 5px;
                cursor: pointer;
            }
            #div2 ul{
                width: 640px;
                padding-top:20px;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div id="divSmall">
                <img id="imgSmall"  src="img/img1.png"/>
                <div id="mask"></div><!--设置一块幕布把原图遮起来-->
                <div id="glass">
                    <img id="imgSmall2" src="img/img1.png"/>
                </div>
            </div>
            <div id="divBig">
                <img id="imgBig" src="img/img1.png"  />
            </div>
        </div>
        <div id="show">
            <div id="div1">&lt;</div>
            <div id="div2">
                <ul id="ul1">
                    <li><img src="img/img4.png"  /></li>
                    <li><img src="img/img2.png"  /></li>
                    <li><img src="img/img3.png"  /></li>
                    <li><img src="img/img1.png"  /></li>
                </ul>
            </div>
            <div id="div3">&gt;</div>
        </div>
        <script src="startMove.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            //当鼠标在小div上移动时
            divSmall.onmousemove = (e)=>{
                //获取鼠标相对div整体的坐标,因为div定位相对于box定位所以
            var [x,y] = [e.clientX - box.offsetLeft,e.clientY - box.offsetTop];
            //定义鼠标在glass的中心 ,最大宽度减去元素本身一半。
                 x-=glass.offsetWidth/2;
                 y-= glass.offsetHeight/2; 
                if(x<0){
                    x=0;//用来判断在原点位置时x轴是否会溢出,这里是左边
                }
                if(y<0){
                    y=0;//用来判断在原点位置时y轴是否会溢出,这里是右边
                }
                var maxX = divSmall.offsetWidth - glass.offsetWidth;
                //定义glass在X轴可运动的最大范围
                if(x>maxX){
                    x = maxX; //如果大于,就让它等于
                }
                var maxY = divSmall.offsetHeight - glass.offsetHeight;
                //定义glass在Y轴可运动的最大范围
                if(y>maxY){
                    y = maxY; //如果大于,就让它等于
                }
                [glass.style.left,glass.style.top] = [x+"px",y+"px"];
                //把得到的鼠标移动的值传给glass
                [imgBig.style.left,imgBig.style.top] = [-4*x+"px",-4*y+"px"];
                //把得到的鼠标移动的值传给imgBig 负数是因为在操作时图片一定是相反的移动,
                //4是倍数关系。
                [imgSmall2.style.left,imgSmall2.style.top]=[-x+"px",-y+"px"] 
                //类似于大图一样,移动时他也一定是相反运动
            }
            divSmall.onmouseout=()=>{
                startMove(glass,{"opacity":0},()=>{
                    glass.style.display = "none";
                });    
                startMove(divBig,{"opacity":0},()=>{
                    divBig.style.display ="none";
                });//先让运动执行完,然后在执行display
                
            }
            divSmall.onmouseover=()=>{
                startMove(glass,{"opacity":100});
                glass.style.display = "block";
                startMove(divBig,{"opacity":100});
                divBig.style.display ="block";
            }
            var n=div2.scrollLeft;
            var timer ;
            div1.onmouseover =()=>{
             timer = setInterval(()=>{
                n++;
                div2.scrollLeft=n++;
                if(n>=280){
                    clearInterval(timer);
                }
                },10);    
            }
            div1.onmouseout =()=>{
                clearInterval(timer);
            }
                div3.onmouseover =()=>{
             timer = setInterval(()=>{
                n--;
                div2.scrollLeft=n--;
                if(n<=0){
                    clearInterval(timer);
                }
                },10);    
            }
                div3.onmouseout=()=>{
                    clearInterval(timer);
                }
            ul1.onclick =(e)=>{
                var e = e.target;
                if(e.nodeName=="IMG"){
                imgSmall2.src=imgSmall.src=imgBig.src=e.src ;
                }
                
            }
        </script>
    </body>
</html>

 

放大镜

标签:pos   target   判断   SM   cli   rip   use   ++   最大   

原文地址:https://www.cnblogs.com/l8l8/p/8870587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!