| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2861 人关注过本帖
标题:这是一个Javascript实现放大镜效果的工程,求大神讲解一下?
只看楼主 加入收藏
袁振诺
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-12-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
这是一个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实现放大镜效果的工程,求大神讲解一下?
搜索更多相关主题的帖子: style move div var document 
2018-12-15 10:52
深秋2015
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:413
专家分:1544
注 册:2015-10-13
收藏
得分:20 
熟能生巧

从此以后我都不敢抬头看
仿佛我的天空失去了颜色
2018-12-15 13:47
袁振诺
Rank: 1
等 级:新手上路
帖 子:8
专家分: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
帖 子:122
专家分:135
注 册: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.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
俺是你大爷
Rank: 2
等 级:论坛游民
帖 子:57
专家分:35
注 册:2019-3-12
收藏
得分:0 
关键在于js部分,
 move.style.left = disX + 'px'; px是像素单位
    move.style.top = disY + 'px';
#代表id,看html部分
<div id="move"></div>
style属性,解释时改变它的css样式。


        <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>

这是被改变的部分,即先通过getelementby方法获取标签,再通过判断等一系列操作改变相关参数最终实现图片放大功能。都是通过JS实现的。
像上面,用Jquery操作也行。
2019-04-17 16:48
快速回复:这是一个Javascript实现放大镜效果的工程,求大神讲解一下?
数据加载中...
 
   



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

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