前端实现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>
效果图如下:
实现原理:
当我们将鼠标移动到中间的黑线以上时,图片保持不变,为之前设置好的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
推荐阅读