欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端实现mac笔记本停靠栏效果

程序员文章站 2022-07-12 20:55:21
...

1.代码演示

代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html,body{
                height: 100%;
                overflow: hidden;
            }
            #wrap{
                position: absolute;
                bottom: 0;
                left: 0;
                width: 100%;
                text-align: center;
            }
            #wrap > img{
                width: 64px;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <img src="images/1.png"/>
            <img src="images/2.png"/>
            <img src="images/3.png"/>
            <img src="images/4.png"/>
            <img src="images/5.png"/>
        </div>
    </body>
    <script type="text/javascript">
        window.onload=function(){
            var r = 320;
            var imgNodes = document.querySelectorAll("#wrap > img");
            
            document.onmousemove=function(ev){
                ev =  ev||event;
                for(var i=0;i<imgNodes.length;i++){
                    var a = imgNodes[i].getBoundingClientRect().left + imgNodes[i].offsetWidth/2 - ev.clientX;
                    var b = imgNodes[i].getBoundingClientRect().top + imgNodes[i].offsetHeight/2 - ev.clientY;
                    var c = Math.sqrt(a*a+b*b);
                    
                    
                    if(c>=r){
                        c=r;
                    }
                    imgNodes[i].style.width =128 - c*0.2 +"px";
                }
            }
        }
        
        
    </script>
</html>

效果图如下:

前端实现mac笔记本停靠栏效果

 

实现原理:

前端实现mac笔记本停靠栏效果

 

当我们将鼠标移动到中间的黑线以上时,图片保持不变,为之前设置好的64px。当移动到黑线以下时,以图片为圆心画圆,越接近圆心,图片的大小越大。

这里我们利用getBoundingClientRect、offsetWidth、clientX的属性特征,求得鼠标点到圆心的距离,然后添加一个鼠标移动事件,让每一张图片都随着鼠标的接近改变图片的大小。

想让黑线上移或下移,就控制r的大小,改变width的算法参数。

2.相关知识点

1)getBoundingClientRect

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect

2)clientX、clientY

属性 描述
clientX 返回当事件被触发时,鼠标指针的水平坐标。
clientY 返回当事件被触发时,鼠标指针的垂直坐标。

3)offsetWidth、offsetHeight

https://blog.csdn.net/qq_20438233/article/details/46708847