美文网首页程序员
简单的鼠标移动元素近大远小效果

简单的鼠标移动元素近大远小效果

作者: _南宫逸轩 | 来源:发表于2019-10-08 09:42 被阅读0次
效果: 近大远小.gif

前置知识:CSS position,js map函数

实现原理:

视觉原理:远处的物体移动慢,近处的物体移动快
实现原理:在鼠标移动的时候,在原 div 的原有位置上+鼠标移动的距离和z-index的乘积

Q:为什么要乘z-index?
A:在初始div的时候要给每个都设置z-index,越大(离你越近)的物体z-index越高or大

步骤:

①获取每个div
②获取每个div当前的left和top
③鼠标移动时给每个元素加上鼠标移动距离*z-index;

代码实现:

〇HTML代码:

<div style="width:50px;height:50px;left:210px;top:50px;position: absolute;z-index: 1;background: blueviolet"></div>
<div style="width:100px;height:100px;left:50px;top:130px;position: absolute;z-index: 2;background: rgb(223, 66, 139)"></div>
<div style="width:150px;height:150px;left:300px;top:150px;position: absolute;z-index: 3;background: rgb(65, 163, 139)"></div>
<div style="width:200px;height:200px;left:50px;top:400px;position: absolute;z-index: 4;background: rgb(226, 197, 35)"></div>

①获取每个div:

 let aDiv=document.getElementsByTagName('div');

②获取每个div当前的left和top:

let oldPos=Array.from(aDiv).map(div=>{
                return {
                    left:div.offsetLeft,
                    top:div.offsetTop
                }
            });

③鼠标移动时给每个元素加上鼠标移动距离*z-index;

document.onmousemove=function(ev){
                let event=ev||window.event;
                Array.from(aDiv).forEach((div,index)=>{ 
                    div.style.left=oldPos[index].left+event.clientX*div.style.zIndex/100+'px'; //除100是为了div移动的不要太快
                    div.style.top=oldPos[index].top+event.clientY*div.style.zIndex/100+'px';//同理
                })
            }

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        window.onload=function(){
            let aDiv=document.getElementsByTagName('div');
            let oldPos=Array.from(aDiv).map(div=>{
                return {
                    left:div.offsetLeft,
                    top:div.offsetTop
                }
            });

            document.onmousemove=function(ev){
                let event=ev||window.event;
                Array.from(aDiv).forEach((div,index)=>{      
                    div.style.left=oldPos[index].left+event.clientX*div.style.zIndex/100+'px';                   
                    div.style.top=oldPos[index].top+event.clientY*div.style.zIndex/100+'px';
                })
            }
        }
    </script>
</head>
<body>
    <div style="width:50px;height:50px;left:210px;top:50px;position: absolute;z-index: 1;background: blueviolet"></div>
    <div style="width:100px;height:100px;left:50px;top:130px;position: absolute;z-index: 2;background: rgb(223, 66, 139)"></div>
    <div style="width:150px;height:150px;left:300px;top:150px;position: absolute;z-index: 3;background: rgb(65, 163, 139)"></div>
    <div style="width:200px;height:200px;left:50px;top:400px;position: absolute;z-index: 4;background: rgb(226, 197, 35)"></div>
</body>
</html>

相关文章

  • 简单的鼠标移动元素近大远小效果

    前置知识:CSS position,js map函数 实现原理: 视觉原理:远处的物体移动慢,近处的物体移动快 实...

  • iOS绕X轴旋转

    没有近大远小的效果 实现近大远小效果

  • CSS3 - 3D位移

    使用3D位移时,需给要表现出3D效果元素的父元素增加透视效果样式,实现近大远小: 3D移动 参数说明:x:设置元素...

  • 透视关系

    平面:电脑屏幕、手机屏幕等都是平面的 立体:鼠标、水杯、电脑等都是立体的 近大远小,近实...

  • 前端(动画)

    鼠标移动前 效果: 鼠标移动后 效果:

  • perspective 视距

    视距的原则是:进大远小 当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。 透...

  • 拖拽,碰撞检测

    1. 拖拽 1.1 拖拽原理 鼠标拖拽效果的实现,就是在鼠标摁下和移动的时候,修改元素的定位值的效果。 1.1.1...

  • “近大远小”

    今天晚上上网络美术课画的 我们学校门口的一段马路

  • 近大远小

    保持距离和界限,是最好的相处模式。 太近了,缺点放大,优点也会放大,决定点在于三观吻合度。 远了,关系变淡的,永远...

  • 自由绘画群(7月19日–26日)

    (近大远小) 小满那天说到近大远小,那我正好也说说吧[呲牙][呲牙]近大远小是素描里总结出来的一种规律,为了画地写...

网友评论

    本文标题:简单的鼠标移动元素近大远小效果

    本文链接:https://www.haomeiwen.com/subject/kpzkyctx.html