vnsc威尼斯城官方网站canvas+javascript实现淘宝商品放大镜效果

工欲善其事,必先利其器。想要实现某一种效果,我们必须要先了解其中的原理。
放大镜的功能就是通过获取鼠标在小图中的位置,然后根据大小图的尺寸比例换算出大图需要显示的部分,然后使用定位让大图要显示的部分出现在右边的边框内。
然后看代码,根据代码看讲解会更容易理解。

javascript淘宝主图放大镜功能,javascript放大镜

工欲善其事,必先利其器。想要实现某一种效果,我们必须要先了解其中的原理。
放大镜的功能就是通过获取鼠标在小图中的位置,然后根据大小图的尺寸比例换算出大图需要显示的部分,然后使用定位让大图要显示的部分出现在右边的边框内。
然后看代码,根据代码看讲解会更容易理解。

html部分

<!DOCTYPE html> 
<html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <title>放大镜效果</title> 
 <link rel="stylesheet" href="magnifier.css"> 
</head> 
<body> 
 <div id="wrapper"> 
 <!--小图--> 
  <div id="img_min"> 
  <!--图片--> 
  <img src="test.jpg" alt="min"> 
  <!--跟随鼠标的白块--> 
  <p id="mousebg"></p> 
  </div> 
  <!--大图--> 
  <div id="img_max"><img id="img2_img" src="test.jpg" alt="max"></div> 
 </div> 
 <script type="text/javascript" src="magnifier.js"></script> 
</body> 
</html> 

css部分

*{ 
 margin: 0; 
 padding: 0; 
} 
div{ 
 position: relative; 
} 
div>div{ 
 width: 300px; 
 height: 300px; 
 float: left; 
 margin: 100px; 
 overflow: hidden; 
} 
#img_min>img{ 
 /*display: block;*/ 
 width: 300px; 
} 
#img_max{ 
 display: none; 

} 
#img_max>img{ 
 position: absolute; 
 top: 0; 
 left: 0; 
 display: block; 
 width: 1500px; 
} 
#mousebg{ 
 display: none; 
 position: absolute; 
 width: 60px; 
 height: 60px; 
 background-color: rgba(255,255,255,.7); 
 top: 0; 
 left: 0; 
} 

最重要的javascript部分

window.onload = function () { 
 var img1 = document.getElementById('img_min');//小图盒子 
 var img2 = document.getElementById('img_max');//大图盒子 
 var img2_img = document.getElementById('img2_img');//大图图片 
 var wrap = document.getElementById('wrapper'); 
 var mousebg = document.getElementById('mousebg');//鼠标白块 
 var mul = 5; 
 //当某一个模块dispaly:none的时候不能使用offsetWidth获取它的宽高 
 img1.onmouseover = function () { 
  //鼠标进入 
  img2.style.display = 'block'; 
  mousebg.style.display = 'block'; 

 } 
 img1.onmouseout = function () { 
  //鼠标离开 
  img2.style.display = 'none'; 
  mousebg.style.display = 'none'; 
 } 
 img1.onmousemove = function (event) { 
  var _event = event||window.event;//兼容性处理 
  var mouseX = _event.clientX - wrap.offsetLeft - img1.offsetLeft; 
  //计算鼠标相对与小图的位置 
  var mouseY = _event.clientY - wrap.offsetTop - img1.offsetTop; 

  //特殊情况处理,分别靠近四条边的时候 
  if(mouseX<mousebg.offsetWidth/2){ 
   mouseX = mousebg.offsetWidth/2; 
  } 
  if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
   mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
  } 
  if(mouseY<mousebg.offsetHeight/2){ 
   mouseY = mousebg.offsetHeight/2; 
  } 
  if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
   mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
  } 
  //计算大图的显示范围 
  img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
  img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 
  //使鼠标在白块的中间 
  mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; 
  mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px"; 

 } 
} 

如果你看完代码和注释已经理解了,用李云龙的一句话说:“哎呀,你小子tnd还真是个天才”。那么下面的解析部分你快速的浏览完就OK了。

解析部分:

html和css部分都是简单的布局代码,不再讲解,js部分代码也比较简单,我们直接讲解鼠标移动事件部分的代码。
首先用一张图来解释一下获取鼠标相对与小图位置的原理:

vnsc威尼斯城官方网站 1

可以看到通过代码中的运算,我们所获取的值就是鼠标相对于img1左上角的值。
理解了这一步之后,其实可以说我们的工作已经完成了一半了。
然后,我们先跳过特殊情况的处理,直接进行右边图片定位的基本运算。
因为有用到offsetWidth、offsetHeight、style.width、style.height属性,其中style.width、style.height和offsetWidth、offsetHeight的范围是相同的,其他不同我会在另一篇博客中详细描述。我们先用一张图了解下这几个属性,同时和上面的几个属性进行对比(图片来自互联网,侵删)

vnsc威尼斯城官方网站 2

然后我们讲解代码:

右边大图框中的图片使用style.left定位在大图框中的位置,负号是因为我们鼠标的运动方向刚好是和我们大图框中的图片运动的方向相反,mul则是根据大图和小图的尺寸计算出来的比例,-mul*mouseX计算出来的其实就是图片在大图框中的相对位置,但是此时你会发现你鼠标所在的位置在右边是在图框的左上角的,所以我们要加上一个
img2.offsetWidth/2
来让图片居中显示。同样我们在纵坐标进行相同的处理就好了。

//计算大图的显示范围 
  img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
  img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 

下面我们就要进行特殊情况的处理了,做到上一步的时候你会发现,在鼠标移动到边缘的时候,鼠标那个小白块有时候会跑出图片的范围,所以我们就要进行处理将它限制在图片的范围内,因为鼠标是在白色透明块的中间,所以我们就是将鼠标限制在距离图片边框上下左右二分之一白块长/宽的位置即可。

//特殊情况处理,分别靠近四条边的时候 
  if(mouseX<mousebg.offsetWidth/2){ 
   mouseX = mousebg.offsetWidth/2; 
  } 
  if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
   mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
  } 
  if(mouseY<mousebg.offsetHeight/2){ 
   mouseY = mousebg.offsetHeight/2; 
  } 
  if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
   mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
  } 

当距离左边小于二分之一宽的时候,我们就让mouseX等于二分之一宽,这样白块就不会继续移动,其他三个方向同理。
做完这一步,我们的效果也就全部完成了。
ps:抽象的地方可以通过画图来帮助理解。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持帮客之家。

工欲善其事,必先利其器。想要实现某一种效果,我们必须要先了解其中的原理。
放大镜的功…

淘宝上经常用到的一个功能是利用图片的放大镜功能来查看商品的细节

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>jQuery之家</title>
    <style type="text/css">
        *{margin:0;padding:0;}
        body{font-size: 14px;}
        canvas{
            display:none;
            background-color: #ffff91;
        }
        #square{
            width:80px;
            height: 80px;
            background-color: rgba(117,240,255,0.5);
            position:absolute;
            z-index: 999;
            cursor:crosshair;
            display:none;
        }
    </style>
    <script>
        onload=function(){
            var canvas=document.getElementById("canvas");//获取画布
            var ctx=canvas.getContext("2d");//获取画笔
            var img=document.getElementsByTagName("img")[0];//获取图片
            var square=document.getElementById("square");//获取选择框
            var squareData={};//存选择框信息
            var imgPosition=img.getBoundingClientRect();//获取图片的位置
            var p=img.naturalWidth/img.width;//原始图片与缩小后图片的比例
           // var even;
            //鼠标移入
            img.onmouseove=function(e){
                var even=e||event;//兼容火狐浏览器
                var x=even.clientX,
                    y=even.clientY;
                createSquare(x,y);
            };
            window.onmousemove=function(e){
                var even=e||event;
                var x=even.clientX;
                var y=even.clientY;
                //使选择框限制在图片内部
                if(x>=img.offsetLeft&&x<=img.offsetLeft+img.width&&y>=img.offsetTop&&y<=img.offsetTop+img.height){
                     createSquare(x,y);
                }else{
                    hideSquare();
                    hideCanvas();
                }
            };
            function createSquare(x,y){
                x=x-40<img.offsetLeft?img.offsetLeft:x-40;
                y=y-40<img.offsetTop?img.offsetTop:y-40;
                x=x+80<imgPosition.right?x:imgPosition.right-80;
                y=y+80<imgPosition.bottom?y:imgPosition.bottom-80;
                //将选择框左上角的位置存到squareData
                squareData.left=x;
                squareData.top=y;
                moveSquare(x,y);
            }
            function moveSquare(x,y){
                //设置选择框偏移位置
                square.style.left=x+"px";
                square.style.top=y+"px";
                showCanvas();
                showSquare();
                draw();
            }
            function showCanvas(){
                canvas.style.display="inline";
            }
            function hideCanvas(){
                canvas.style.display="none";
            }
            function showSquare(){
                square.style.display="inline";
            }
            function hideSquare(){
                square.style.display="none";
            }
            //将放大后的图片画到canvas中
            function draw(){
                console.log(squareData.left-imgPosition.left);
                ctx.drawImage(img,(squareData.left-imgPosition.left)*p,p*(squareData.top-imgPosition.top),p*80,p*80,0,0,canvas.width,canvas.height);
            }
        }
    </script>
</head>
<body>
<img src="img/N7ETzFO.jpg" alt="vnsc威尼斯城官方网站 3" width="300px">
<canvas id="canvas" width="300px" height="225px"></canvas>
<div id="square"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            width:350px;
            height: 350px;
            position: relative;
            margin-left: 200px;
            margin-top: 200px;
            border: 1px solid #000;
        }
        .smallBox {
            position: relative;
        }
        .mask {
            width: 175px;
            height: 175px;
            background-color: rgba(125, 125, 125, .4);
            position: absolute;
            left: 0;
            top: 0;
            display: none;

        }
        .bigBox {
            width: 400px;
            height: 400px;
            position:absolute;
            left: 350px;
            top: 0;
            overflow: hidden;
            display: none;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="smallBox">
        <img src="images/001.jpg" alt="vnsc威尼斯城官方网站 4"/>
        <div class="mask"></div>
    </div>
    <div class="bigBox">
        <img src="images/0001.jpg" alt="vnsc威尼斯城官方网站 5"/>
    </div>
</div>
<script src="toolkit.js"></script>
<script>
    //需求1:鼠标进入smallBox区域中,显示mask 和 bigBox,移除后隐藏。
    var box = document.getElementsByTagName("div")[0];
    var smallBox = box.children[0];
    var bigBox= box.children[1];
    var mask = smallBox.children[1];
    var bigImg= bigBox.children[0];
    smallBox.onmouseover = function(){
        show(mask);
        show(bigBox);
    }
    smallBox.onmouseout = function(){
        hide(mask);
        hide(bigBox);
    }
    //需求2:mask 跟随鼠标移动
    smallBox.onmousemove = function(event){
        //鼠标在网页中位置
        event = event || window.event;
        var pageX = event.pageX || event.clientX + scroll().left;
        var pageY = event.pageY || event.clientY + scroll().top;

        //盒子在网页中位置
        var boxX= box.offsetLeft;
        var boxY = box.offsetTop;

        //鼠标在盒子中的位置
        var sBoxX = pageX - boxX;
        var sBoxY = pageY- boxY;
        //鼠标在盒子中移动位置有界限
        if(sBoxX<0){
            sBoxX =0;
        }
        if(sBoxX>(smallBox.offsetWidth- mask.offsetWidth)){
            sBoxX=(smallBox.offsetWidth- mask.offsetWidth)
        }
        if(sBoxY<0){
            sBoxY =0;
        }
        if(sBoxY>(smallBox.offsetHeight- mask.offsetHeight)){
            sBoxY=(smallBox.offsetHeight- mask.offsetHeight)
        }
        //给mask位置赋值
        mask.style.left = sBoxX + "px";
        mask.style.top = sBoxY + "px";

        //需求3:mask同bigBox等比例移动
        //比例公式: smallBox/bigImg = mask/bigBox=sBox/bBox
        //bBox = bigBox*sBox/mask;
        var bBoxX = bigBox.offsetWidth*sBoxX/mask.offsetWidth;
        var bBoxY = bigBox.offsetWidth*sBoxY/mask.offsetHeight;

        bigImg.style.marginLeft = -bBoxX + "px";
        bigImg.style.marginTop = -bBoxY + "px";
    }
</script>
</body>
</html>
引入toolkit.js内容:

function scroll(){
    var scroll = {
        top: window.pageYOffset || document.documentElement.scrollTop,
        left: window.pageXOffset || document.documentElement.scrollLeft
    }
    return scroll;
}


function animate(ele,target){
    clearInterval(ele.timer);
    ele.timer = setInterval(function(){
        //1.获取步长
        var step = (target -ele.offsetLeft)/10;
        //2.二次处理步长
        step = step>0? Math.ceil(step):Math.floor(step);
        //3、
        ele.style.left = ele.offsetLeft+ step +"px";
        console.log(1);
        if(Math.abs(target -ele.offsetLeft)<=Math.abs(step)){
            clearInterval(ele.timer);
            ele.style.left = target + "px";
        }
    },20);
}


function client(){
    return {
        "width": window.innerWidth || document.documentElement.clientWidth,
        "height": window.innerWidth ||document.documentElement.clientWidth,
    }
}

function changeColor(){
    if(client().width>960){
        document.body.style.backgroundColor="blue";
    }else if(client().width>640){
        document.body.style.backgroundColor="red";
    }else{
        document.body.style.backgroundColor="orange";
    }
}

function getStyle(ele,attr){
    if(ele.window.getComputedStyle){
        return  ele.window.getComputedStyle(ele,null)[attr];
    }else{
        return  ele.currentStyle[attr];
    }
}

function show(ele){
    ele.style.display="block";
}

function hide(ele){
    ele.style.display="none";
}

html部分

下面我们来实现这样一个功能吧,原理很简单:

实现一个可以随鼠标移动的虚框

在另外一个块中对应显示虚框中的内容

canvas
绘制图片是根据原始图片的尺寸进行绘制,而不是根据利用属性或样式放大缩小后的图片,所以要乘以原始图片与现在图片的比例。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <title>放大镜效果</title> 
 <link rel="stylesheet" href="magnifier.css"> 
</head> 
<body> 
 <div id="wrapper"> 
 <!--小图--> 
  <div id="img_min"> 
  <!--图片--> 
  <img src="test.jpg" alt="min"> 
  <!--跟随鼠标的白块--> 
  <p id="mousebg"></p> 
  </div> 
  <!--大图--> 
  <div id="img_max"><img id="img2_img" src="test.jpg" alt="max"></div> 
 </div> 
 <script type="text/javascript" src="magnifier.js"></script> 
</body> 
</html> 

实现思路:

虚框用css中的透明度实现filter:alpha(opacity:20); opacity:0.2;

鼠标移动到小图上面时:虚框出现,大图对应出现

css部分

细节注意的地方:

1:虚框的定位:保持鼠标位于虚框的中心,如何处理鼠标中心距离四边距离小于虚框半径(或者方形的边长的一半)的情况?

2:保持大图中显示的内容是虚框选中的内容(保持大小图的比例问题)

代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>js_study</title>
    <meta  content="text/html;charset=utf-8" http-equiv="Content-Type">
    <script src="js_study.js" type="text/javascript" charset="utf-8"></script>
<style>
    #div1 { width:280px; height:200px; position:relative; margin:30px auto 0px;}
    #div1 img{width:280px; height:200px;}
    #div1 span { width:100px; height:100px; background:blue; left:0px;top:0px; position:absolute; display:none; filter:alpha(opacity:20); opacity:0.2;}
    .show { width:100%; height:100%; background:blue; position:absolute; z-index:10px; filter:alpha(opacity:10); opacity:0.1; left:0px; top:0px; }
    #div2 {width:400px; height:400px; position:relative; display:none; overflow:hidden; margin:0px auto 0px;}
    #img1 { position:absolute;}
</style>
</head>
<body style="margin 0px; text-align: center" onload="init();" >
        <div id="div1">
            <img src="./num/2.jpg">

            <div class="show"></div>
        </div>
        <div id="div2" style="display: none;">
            <img id="img1" src="./num/2.jpg" style="left: -610px; top: -149.21311475409834px;">
        </div>
</body>
</html>

 

//放大镜效果
var moveme = false;
function init () {
    var d1 = document.getElementById('div1');
    var the_float = d1.getElementsByTagName('div')[0];
    var the_span  = d1.getElementsByTagName('span')[0];
    var the_img   = document.getElementById('img1');
    the_float.onmouseover = function  () {
        the_span.style.display = 'block';
        the_img.parentNode.style.display = 'block';
    }
    the_float.onmouseout  = function  () {
        the_span.style.display = 'none';
        the_img.parentNode.style.display = 'none';
    }
    the_float.onmousemove = function  (ev) {
        var oEvent = ev||window.event;
        var x = oEvent.clientX - d1.offsetLeft - the_span.offsetWidth/2;//鼠标横坐标-父块距离浏览器窗口左距离-虚框的半
        var y = oEvent.clientY - d1.offsetTop - the_span.offsetHeight/2;
        //小图区域
        if(x<0) x=0;//左边界
        else if(x>the_float.offsetWidth - the_span.offsetWidth)//右边界
            x = the_float.offsetWidth - the_span.offsetWidth;
        if(y<0) y= 0;//上边界
        else if(y>the_float.offsetHeight - the_span.offsetHeight)//下边界
            y = the_float.offsetHeight -the_span.offsetHeight;
        the_span.style.left  = x+"px";
        the_span.style.top   = y+"px";
        //大图对应区域
        var percentX = x/(the_float.offsetWidth - the_span.offsetWidth);//计算比例
        var percentY = y/(the_float.offsetHeight - the_span.offsetHeight);
        var iParent = the_img.parentNode;
        //保持大小图之间的比例关系
        the_img.style.width = parseFloat(the_float.offsetWidth)/parseFloat(the_span.offsetWidth)*parseFloat(iParent.offsetWidth)+"px";
        the_img.style.left = -percentX*(the_img.offsetWidth - iParent.offsetWidth)+"px";
        the_img.style.top  = -percentY*(the_img.offsetHeight - iParent.offsetHeight)+"px";
    }
}

 

*{ 
 margin: 0; 
 padding: 0; 
} 
div{ 
 position: relative; 
} 
div>div{ 
 width: 300px; 
 height: 300px; 
 float: left; 
 margin: 100px; 
 overflow: hidden; 
} 
#img_min>img{ 
 /*display: block;*/ 
 width: 300px; 
} 
#img_max{ 
 display: none; 

} 
#img_max>img{ 
 position: absolute; 
 top: 0; 
 left: 0; 
 display: block; 
 width: 1500px; 
} 
#mousebg{ 
 display: none; 
 position: absolute; 
 width: 60px; 
 height: 60px; 
 background-color: rgba(255,255,255,.7); 
 top: 0; 
 left: 0; 
} 

最重要的javascript部分

window.onload = function () { 
 var img1 = document.getElementById('img_min');//小图盒子 
 var img2 = document.getElementById('img_max');//大图盒子 
 var img2_img = document.getElementById('img2_img');//大图图片 
 var wrap = document.getElementById('wrapper'); 
 var mousebg = document.getElementById('mousebg');//鼠标白块 
 var mul = 5; 
 //当某一个模块dispaly:none的时候不能使用offsetWidth获取它的宽高 
 img1.onmouseover = function () { 
  //鼠标进入 
  img2.style.display = 'block'; 
  mousebg.style.display = 'block'; 

 } 
 img1.onmouseout = function () { 
  //鼠标离开 
  img2.style.display = 'none'; 
  mousebg.style.display = 'none'; 
 } 
 img1.onmousemove = function (event) { 
  var _event = event||window.event;//兼容性处理 
  var mouseX = _event.clientX - wrap.offsetLeft - img1.offsetLeft; 
  //计算鼠标相对与小图的位置 
  var mouseY = _event.clientY - wrap.offsetTop - img1.offsetTop; 

  //特殊情况处理,分别靠近四条边的时候 
  if(mouseX<mousebg.offsetWidth/2){ 
   mouseX = mousebg.offsetWidth/2; 
  } 
  if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
   mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
  } 
  if(mouseY<mousebg.offsetHeight/2){ 
   mouseY = mousebg.offsetHeight/2; 
  } 
  if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
   mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
  } 
  //计算大图的显示范围 
  img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
  img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 
  //使鼠标在白块的中间 
  mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; 
  mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px"; 

 } 
} 

如果你看完代码和注释已经理解了,用李云龙的一句话说:“哎呀,你小子tnd还真是个天才”。那么下面的解析部分你快速的浏览完就OK了。

解析部分:

html和css部分都是简单的布局代码,不再讲解,js部分代码也比较简单,我们直接讲解鼠标移动事件部分的代码。
首先用一张图来解释一下获取鼠标相对与小图位置的原理:

vnsc威尼斯城官方网站 6

可以看到通过代码中的运算,我们所获取的值就是鼠标相对于img1左上角的值。
理解了这一步之后,其实可以说我们的工作已经完成了一半了。
然后,我们先跳过特殊情况的处理,直接进行右边图片定位的基本运算。
因为有用到offsetWidth、offsetHeight、style.width、style.height属性,其中style.width、style.height和offsetWidth、offsetHeight的范围是相同的,其他不同我会在另一篇博客中详细描述。我们先用一张图了解下这几个属性,同时和上面的几个属性进行对比(图片来自互联网,侵删)

vnsc威尼斯城官方网站 7

然后我们讲解代码:

右边大图框中的图片使用style.left定位在大图框中的位置,负号是因为我们鼠标的运动方向刚好是和我们大图框中的图片运动的方向相反,mul则是根据大图和小图的尺寸计算出来的比例,-mul*mouseX计算出来的其实就是图片在大图框中的相对位置,但是此时你会发现你鼠标所在的位置在右边是在图框的左上角的,所以我们要加上一个
img2.offsetWidth/2
来让图片居中显示。同样我们在纵坐标进行相同的处理就好了。

//计算大图的显示范围 
  img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
  img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 

下面我们就要进行特殊情况的处理了,做到上一步的时候你会发现,在鼠标移动到边缘的时候,鼠标那个小白块有时候会跑出图片的范围,所以我们就要进行处理将它限制在图片的范围内,因为鼠标是在白色透明块的中间,所以我们就是将鼠标限制在距离图片边框上下左右二分之一白块长/宽的位置即可。

//特殊情况处理,分别靠近四条边的时候 
  if(mouseX<mousebg.offsetWidth/2){ 
   mouseX = mousebg.offsetWidth/2; 
  } 
  if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
   mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
  } 
  if(mouseY<mousebg.offsetHeight/2){ 
   mouseY = mousebg.offsetHeight/2; 
  } 
  if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
   mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
  } 

当距离左边小于二分之一宽的时候,我们就让mouseX等于二分之一宽,这样白块就不会继续移动,其他三个方向同理。
做完这一步,我们的效果也就全部完成了。
ps:抽象的地方可以通过画图来帮助理解。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • 基于jQuery仿淘宝产品图片放大镜特效
  • 基于jQuery实现放大镜效果
  • jquery实现图片放大镜功能
  • 基于jQuery仿淘宝产品图片放大镜代码分享
  • js放大镜放大图片效果
  • JavaScript图片放大镜效果代码[代码比较简单]
  • 奇妙的Javascript图片放大镜
  • JavaScript
    图片放大镜(可拖放、缩放效果)
  • 原生js写的放大镜效果
  • 电子商务网站上的常用的js放大镜效果

相关文章