javascript实现图片放大镜效果

经常会看到这样一种效果,当我们把鼠标放到我们浏览的商品图片上时,会出现类似放大镜一样的一定区域的放大效果,方便消费者观察商品。今天我对这一技术,进行简单实现,实现图片放大镜效果。
我在代码中进行了代码编写的思路的说明和详细的代码注释,方便读者,请看代码:

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        *{margin:0px; padding:0px;}
        .small-box {
            width:300px;
            height:300px;
            margin-left:100px;
            margin-top:100px;
            border:1px #ccc solid;
            cursor:move;
            float:left;
            position:relative;
        }
        .small-box img {
            width:300px;
            height:300px;
        }
        .tool {
            width:150px;
            height:150px;
            background-color:gold;
            opacity:0.6;
            filter:alpha(opacity=60);
            position:absolute;
            left:0px;
            top:0px;
            display:none;
        }
        .tool.active {
            display:block;
        }
        .big-box {
            width:300px;
            height:300px;
            border:1px #ccc solid;
            overflow:hidden;
            float:left;
            margin-top:100px;
            position:relative;
            display:none;
        }
        .big-box.active {
            display:block;
        }
        .big-box img {
            width:600px;
            height:600px;
            position:absolute;
        }
    </style>
</head>
<body>
<div class="small-box" id="smallBox">
    <img src="zhangmingrui.jpg"/>
    <div class="tool" id="tool"></div>
</div>
<div class="big-box" id="bigBox">
    <img src="zhangmingrui.jpg" id="bigImg" />
</div>
<script>
    /*
     第一步:当页面加载完后,获取所要操作的节点对象。
     第二步:为smallBox添加一个鼠标浮动事件
     当鼠标浮动到smallBox可视区域的时候,显示出小黄盒子tool
     和右边的大盒子(小黄盒子的放大版)bigBox
     添加active

     为smallBox添加一个鼠标离开事件
     隐藏小黄盒子和右边的大盒子
     去掉active

     第三步:为smallBox添加一个鼠标移动事件
     小黄盒子tool要跟着鼠标的坐标移动
     右边的大盒子里的图片也跟着指定的比例移动
     */
    var smallBox = document.getElementById("smallBox");//小盒子
    var tool = document.getElementById("tool");//小盒子中的黄色区域
    var bigBox = document.getElementById("bigBox");//大盒子
    var bigImg = document.getElementById("bigImg");//放大的图片
    //鼠标进入小盒子区域内,显示黄色区域和大盒子
    smallBox.onmouseenter = function(){
        tool.className = "tool active";
        bigBox.className = "big-box active";
    }
    //鼠标离开小盒子区域,不显示黄色区域和大盒子
    smallBox.onmouseleave = function(){
        tool.className = "tool";
        bigBox.className = "big-box";
    }
    //鼠标在小盒子内移动
    smallBox.onmousemove = function(e){
        var _e = window.event||e;//事件对象
        var x = _e.clientX-this.offsetLeft-tool.offsetWidth/2;//事件对象在小盒子内的横向偏移量
        var y = _e.clientY-this.offsetTop-tool.offsetHeight/2;//竖向偏移量
        if(x<0){
            x = 0;//当左偏移出小盒子时,设为0
        }
        if(y<0){
            y = 0;//当上偏移出小盒子时,设为0
        }
        if(x>this.offsetWidth-tool.offsetWidth){
            x = this.offsetWidth-tool.offsetWidth;//当右偏移出小盒子时,设为小盒子的宽度-黄色放大区域宽度
        }
        if(y>this.offsetHeight-tool.offsetHeight){
            y = this.offsetHeight-tool.offsetHeight;//当下偏移出小盒子时,设为小盒子的高度-黄色放大区域高度
        }
        tool.style.left = x + "px";//黄色放大区域距离小盒子左偏距
        tool.style.top = y + "px";//黄色放大区域距离小盒子上偏距
        bigImg.style.left = -x*2 + "px";//放大图片移动方向相反,偏移距离加倍
        bigImg.style.top = -y*2 + "px";
    }
</script>
</body>
</html>

转载自:小圣贤君

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值