| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 346 人关注过本帖
标题:这是一个Javascript实现放大镜效果的工程,求大神讲解一下?
只看楼主 加入收藏
袁振诺
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-12-14
结帖率:0
  已结贴   问题点数:20  回复次数:3   
这是一个Javascript实现放大镜效果的工程,求大神讲解一下?
程序代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>jscsnd 项目</title>
        
        <style type="text/css">
            *{
    margin:0;
    padding:0;
}
.wrap{
    width: 600px;
    height: 360px;
    margin:100px;
}
#small,#big{
    width: 298px;
    height: 358px;
    border:1px solid #ccc;
    float:left;
}
#small{
    text-align:center;
    position: relative;
}
#small img{
    width: 285px;
    height:346px;
    margin-top:6px;
}
#move{
    width: 150px;
    height: 150px;
    /*background:rgba(255,255,255,.5);*/
    background:#fff;
    opacity:.5;
    filter:alpha(opacity=50);
    position: absolute;
    top: 0;
    left: 0;
    cursor:move;
    display:none;
}
#big{
    position:relative;
    overflow:hidden;
    display:block;
}
#big img{
    position:absolute;
    top:0;
    left:0;
}

        </style>
    </head>
    <body style="height: 2000px;">

        
        <div class="wrap" id="wrap">
    <div id="small">
        <img src="./display.jpg" alt="">
        <div id="move"></div>
    </div>
    <div id="big">
        <img src="./display.jpg" alt="">
    </div>
</div>

        <script type="text/javascript">
            //1.
var oWrap = document.getElementById('wrap');
var smallDiv = document.getElementById('small');
var move = document.getElementById('move');
var bigDiv = document.getElementById('big');

//2.

  smallDiv.onmousemove = function (ev) {
    var oEvent = ev || event;//获取坐标
    var iScrollTop = document.documentElement.scrollTop || document.body.scrollTop;//滚动条移动到顶部的距离
    var iScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  
    //oEvent.clientX是从中间的点到x边界的距离
    var disX = oEvent.clientX + iScrollLeft - move.offsetWidth / 2 - oWrap.offsetLeft;
    var disY = oEvent.clientY + iScrollTop - move.offsetHeight / 2 - oWrap.offsetTop;

//  console.log(oWrap.offsetLeft)
    if (disX < 0) {
        disX = 0;
    } else if (disX > smallDiv.offsetWidth - move.offsetWidth) {
        disX = smallDiv.offsetWidth - move.offsetWidth;
    };
    if (disY < 0) {
        disY = 0;
    } else if (disY > smallDiv.offsetHeight - move.offsetHeight) {
        disY = smallDiv.offsetHeight - move.offsetHeight;
    };
    move.style.left = disX + 'px';
    move.style.top = disY + 'px';
    /*算出move块在X轴的移动距离与总的移动距离的比例*/
    var _pageX = disX / (smallDiv.offsetWidth - move.offsetWidth);
        console.log(_pageX)   /*这是一个0~1之间的数*/
    /*算出move块在Y轴的移动距离与总的移动距离的比例*/
    var _pageY = disY / (smallDiv.offsetHeight - move.offsetHeight);
    /*求出大图片在X轴的移动距离*/
    var mX = _pageX * (bigDiv.children[0].offsetWidth - bigDiv.offsetWidth);
    /*求出大图片在Y轴的移动距离*/
    var mY = _pageY * (bigDiv.children[0].offsetHeight - bigDiv.offsetHeight);
    bigDiv.children[0].style.left = -mX + 'px';
    bigDiv.children[0].style.top = -mY + 'px';
};

//3.
smallDiv.onmouseover = function(ev) {
    bigDiv.style.display = 'block';
    move.style.display = 'block';
    smallDiv.onmousemove(); //兼容IE
};
smallDiv.onmouseout = function() {
    bigDiv.style.display = 'none';
    move.style.display = 'none';
};

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



这是一个Javascript实现放大镜效果的工程,求大神讲解一下?
2018-12-15 10:52
深秋2015
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:317
专家分:1243
注 册:2015-10-13
  得分:20 
熟能生巧

从此以后我都不敢抬头看
仿佛我的天空失去了颜色
2018-12-15 13:47
袁振诺
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-12-14
  得分:0 
回复 2楼 深秋2015
    var disX = oEvent.clientX + iScrollLeft - move.offsetWidth / 2 - oWrap.offsetLeft;


这段代码我不太清楚!
2018-12-16 20:18
leeqihero
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:97
专家分:95
注 册:2016-3-24
  得分:0 
程序代码:
<script>
var $=function(a){return document.getElementById(a);};
Array.prototype.add=function(v){
    return [this[0]+v[0],this[1]+v[1]];
};
Array.prototype.dot=function(d){
    return [this[0]*d,this[1]*d];
};
Array.prototype.comb=function(v){
    return this[0].dot(v[0]).add(this[1].dot(v[1]));
};
Array.prototype.belong=function(m){
    return [this[0].in(m[0]),this[1].in(m[1])];
};
Number.prototype.in=function(v){
    var x=this*1;
    v.sort();
    return x<v[0]?v[0]:(x>v[1]?v[1]:x);
};
var oWrap = $('wrap');
var smallDiv = $('small');
var move = $('move');
var bigDiv = $('big');



smallDiv.onmousemove = function (ev){
    var oEvent = ev || event;//获取坐标
    var iScrollTop = document.documentElement.scrollTop || document.body.scrollTop;//滚动条移动到顶部的距离
    var iScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
    var iScroll=[iScrollTop,iScrollLeft];
    var Client=[oEvent.clientX,oEvent.clientY];
    var Move=[move.offsetWidth,move.offsetHeight];
    var OWrap=[oWrap.offsetLeft,move.offsetHeight];
    var dis=Client.add(iScroll).add(Move.dot(-.5)).add(OWrap.dot(-1));
    var W=smallDiv.offsetWidth - move.offsetWidth;
    var H=smallDiv.offsetHeight - move.offsetHeight;
    var bW=bigDiv.children[0].offsetWidth - bigDiv.offsetWidth;
    var bH=bigDiv.children[0].offsetHeight - bigDiv.offsetHeight;
  

    dis.belong([[0,W],[0,H]]);
    move.style.left = dis[0] + 'px';
    move.style.top = dis[1] + 'px';
    var mm=[[bW/W,0],[0,bH/H]].comb(dis);
    bigDiv.children[0].style.left = -mm[0] + 'px';
    bigDiv.children[0].style.top = -mm[1] + 'px';
};


smallDiv.onmouseover = function(ev) {
    bigDiv.style.display = 'block';
    move.style.display = 'block';
    smallDiv.onmousemove(); //兼容IE
};
smallDiv.onmouseout = function() {
    bigDiv.style.display = 'none';
    move.style.display = 'none';
};

</script>
2019-01-30 19:07







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.070235 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved