zoukankan      html  css  js  c++  java
  • js实现放大镜的效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>放大镜</title>
    <style>
    *{
    margin:0px;
    padding:0px;
    }
    #box{
    430px;
    height:430px;
    margin:100px;
    margin-left:17%;
    position:relative;//这里使用相对定位,好让其他的元素能依靠这个元素定位
    }
    #move{
    background-color:green;
    220px;
    height:220px;
    position:absolute;
    left:0px;
    top:0px;
    display:none;//先让他隐藏,用js使其显示
    }
    #bimg{
    430px;
    height:430px;
    overflow:hidden;
    position:absolute;
    top:0px;
    left:450px;
    display:none;//先让他隐藏,用js使其显示
    }
    #bimg img{
    800px;
    height:800px;
    position:absolute;
    top:0px;
    left:0px;
    }
    </style>
    </head>
    <body onload="bigimg()">
    <div id="box">
    <img src="img/4.jpg" alt="#">
    <div id="move"></div>
    <div id="bimg">
    <img id="b_bimg" src="img/4.jpg" alt="#">
    </div>
    </div>
    <script>
    function bigimg(){
    var bbox = document.getElementById("box");
    var bmove = document.getElementById("move");
    var bbimg = document.getElementById("bimg");
    var b_bimg = document.getElementById("b_bimg");
    bbox.onmouseover = function(){//鼠标移动到box上显示大图片和选框
    bbimg.style.display = "block";
    bmove.style.display="block";
    }
    bbox.onmouseout = function(){//鼠标移开box不显示大图片和选框
    bbimg.style.display = "none";
    bmove.style.display="none";
    }
    bbox.onmousemove = function(e){//获取鼠标位置
    var x = e.clientX;//鼠标相对于视口的位置
    var y = e.clientY;
    var t = bbox.offsetTop;//box相对于视口的位置
    var l = bbox.offsetLeft;
    var _left = x - l - bmove.offsetWidth/2;//计算move的位置
    var _top = y - t -bmove.offsetHeight/2;
    if(_top<=0)//滑到box的最顶部
    _top = 0;
    else if(_top>=bbox.offsetHeight-bmove.offsetHeight)//滑到box的最底部
    _top = bbox.offsetHeight-bmove.offsetHeight ;
    if(_left<=0)//滑到box的最左边
    _left=0;
    else if(_left>=bbox.offsetWidth-bmove.offsetWidth)//滑到box的最右边
    _left=bbox.offsetWidth-bmove.offsetWidth ;
    bmove.style.top = _top +"px";//设置move的位置
    bmove.style.left = _left + "px";
    var w = _left/(bbox.offsetWidth-bmove.offsetWidth);//计算移动的比例
    var h = _top/(bbox.offsetHeight-bmove.offsetHeight);
    var b_bimg_top = (b_bimg.offsetHeight-bbimg.offsetHeight)*h;//计算大图的位置
    var b_bimg_left = (b_bimg.offsetWidth-bbimg.offsetWidth)*w;
    b_bimg.style.top = -b_bimg_top + "px";//设置大图的位置信息
    b_bimg.style.left = -b_bimg_left + "px";
    }

    }
    </script>
    </body>
    </html>

    黑色箭头:

    1
    2
    var x = e.clientX;//鼠标相对于视口的位置
    var y = e.clientY;

    红色箭头:

    1
    2
    var t = bbox.offsetTop;//box相对于视口的位置
    var l = bbox.offsetLeft;

    橙色箭头:

    1
    2
    var _left = x - l - bmove.offsetWidth/2;//计算move的位置
    var _top = y - t -bmove.offsetHeight/2;

    2、bimg块的计算

    利用move块在可移动范围内的比例来设置大图的位置

    move块的移动范围:

    1
    bbox.offsetWidth-bmove.offsetWidth

    move块现在的坐标占可移动范围的比例:

    1
    2
    var w = _left/(bbox.offsetWidth-bmove.offsetWidth);//计算移动的比例
    var h = _top/(bbox.offsetHeight-bmove.offsetHeight);

    bimg的移动范围:

    1
    b_bimg.offsetHeight-bbimg.offsetHeight

    bimg的位置:

    1
    2
    var b_bimg_top = (b_bimg.offsetHeight-bbimg.offsetHeight)*h;//计算大图的位置
    var b_bimg_left = (b_bimg.offsetWidth-bbimg.offsetWidth)*w;
  • 相关阅读:
    PAT 1006 Sign In and Sign Out
    PAT 1004. Counting Leaves
    JavaEE开发环境安装
    NoSql数据库探讨
    maven的配置
    VMWARE 下使用 32位 Ubuntu Linux ,不能给它分配超过3.5G 内存?
    XCODE 4.3 WITH NO GCC?
    在苹果虚拟机上跑 ROR —— Ruby on Rails On Vmware OSX 10.7.3
    推荐一首让人疯狂的好歌《Pumped Up Kicks》。好吧,顺便测下博客园可以写点无关技术的帖子吗?
    RUBY元编程学习之”编写你的第一种领域专属语言“
  • 原文地址:https://www.cnblogs.com/qypt2015/p/6984614.html
Copyright © 2011-2022 走看看