放大镜

2018-09-29  本文已影响11人  然网名并卵

我们在网上购买衣物的时候都会看到这么一个效果,把鼠标放在衣服上,右边会出现一个框呈放大的效果。今天就教大家如何实现!

第一步:需要准备一张400×400的原图和一张800×800的放大图,放在两个div框中,并将后者隐藏,并给他的父级设置overflow:hidden;

第二步:在原图上设置一个200×200的小div,设置为半透明、隐藏,鼠标移入的时候将其和放大图的div一起显示出来。

第三步:设置鼠标移动的时候,小div跟着一起移动,并设置范围保证它不会移出去。

第四步:最关键的部分,设置右边的大图随着鼠标在原图上面的移动而移动。详情请看代码。

html部分:

<div id="left">

<img src="img/4.4.jpg" alt=""><!--这是左边的原图-->

<span></span> <!--这是显示放大的部分-->

</div>

<div id="right">

<img src="img/8.8.jpg" alt=""><!--这是放大图-->

</div> 

CSS部分:

#left{

width:400px;

    height:400px;

    border:1px solid #ccc;

    position:absolute;

    left:50px;

    top:50px;

}

#left span{

width:200px;

    height:200px;

    background:blue;

    opacity:0.3;

    position:absolute;

    top:0;

    left:0;

    display:none;

}

#right{

width:400px;

    height:400px;

    overflow:hidden;      /*溢出的部分给它隐藏*/

    position:absolute;

    top:50px;

    left:500px;

    display:none;

}

#right img{

position:absolute;    /*因为放大图要不停移动,所以要加定位*/

    left:0;

    top:0;

}

JS部分:

var oLeft=document.getElementById('left');

var oRight=document.getElementById('right');

var oSpan=document.querySelector('#left span');

var oImg=document.querySelector('#right img');

oLeft.onmouseover=function () {

oSpan.style.display='block';

    oRight.style.display='block';

}

oLeft.onmouseout=function () {

oSpan.style.display='none';

    oRight.style.display='none';

}

oLeft.onmousemove=function (ev) {

var l=ev.clientX-oSpan.offsetWidth/2-oLeft.offsetLeft;

    var t=ev.clientY-oSpan.offsetHeight/2-oLeft.offsetTop;

    if(l<0){

l=0;

    }else if(l>=oLeft.offsetWidth-oSpan.offsetWidth){

l=oLeft.offsetWidth-oSpan.offsetWidth;

    }

if(t<0){

t=0;

    }else if(t>=oLeft.offsetHeight-oSpan.offsetHeight){

t=oLeft.offsetHeight-oSpan.offsetHeight;

    }

oSpan.style.left=l+'px';      

    oSpan.style.top=t+'px';

    oImg.style.left=-oSpan.offsetLeft*(oImg.offsetWidth-oRight.offsetWidth)/(oLeft.offsetWidth-oSpan.offsetWidth)+'px';

    oImg.style.top=-oSpan.offsetTop*(oImg.offsetHeight-oRight.offsetHeight)/(oLeft.offsetHeight-oSpan.offsetHeight)+'px';

}

上一篇 下一篇

猜你喜欢

热点阅读