原生js实现实现放大镜特效

275 阅读1分钟

纯原生js实现实现放大镜特效

**先上效果图

接下来是html概览,因为要通过js去操作dom做特效需要在html里拿到id或class

js代码实现

 window.addEventListener('load',function(){
 ​
   var box=document.querySelector('.img');
 ​
   var move=document.querySelector('.move');
 ​
   var big=document.querySelector('.big');
 ​
   //鼠标的进出去决定盒子的出现
 ​
   box.addEventListener('mouseover',function(){
 ​
 •    move.style.display='block';
 ​
 •    big.style.display='block';
 ​
 •    box.addEventListener('mouseout',function(){
 ​
 •      move.style.display='none';
 ​
 •      big.style.display='none';
 ​
 •    })
 ​
   })
 ​
   //鼠标跟随
 ​
    box.addEventListener('mousemove',function(e){//这里的e为event事件的缩写,用操作对象
 //的回调来做形参
 •    var x=e.pageX-this.offsetLeft;
 ​
 •    var y=e.pageY-this.offsetTop;
 ​
 •    moveX=x-move.offsetWidth/2;
 ​
 •    moveY=y-move.offsetHeight/2;
 ​
 •    console.log(box.offsetWidth-move.offsetWidth);
 ​
 •    //让move只能在盒子范围内移动
 ​
 •    if(moveX<=0){
 ​
 •      moveX=0;
 ​
 •    }else if(moveX>=box.offsetWidth-move.offsetWidth){
 ​
 •      moveX=box.offsetWidth-move.offsetWidth;
 ​
 •    }
 ​
 •    if(moveY<=0){
 ​
 •      moveY=0;
 ​
 •    }else if(moveY>=box.offsetHeight-move.offsetHeight){
 ​
 •      moveY=box.offsetHeight-move.offsetHeight;
 ​
 •    }
 ​
 •    move.style.left=moveX+'px';
 ​
 •    move.style.top=moveY+'px';
 ​
 •    movemax=box.offsetWidth-move.offsetWidth;
 ​
 •    //大图的移动,按比例移动
 ​
 •    var b=document.querySelector('.b');
 ​
 •    var bMax=b.offsetWidth-big.offsetWidth;
 ​
 •    console.log(bMax);
 ​
 •    var bX=moveX*bMax/movemax;
 ​
 •    var bY=moveY*bMax/movemax;
 //大图的移动方向应该与鼠标相反,所以是-bx,-by
 •    b.style.marginLeft=(-bX+'px');
 ​
 •    b.style.marginTop=(-bY+'px');
 ​
    })   
 ​
 ​
 ​
 })