其他分享
首页 > 其他分享> > 始终飞向鼠标的纸飞机

始终飞向鼠标的纸飞机

作者:互联网

实现思路:

鼠标移动事件( onmousemove )是鼠标在页面上进行移动时触发事件处理程序,可以在该事件中用document对象实时读取鼠标在页面中的位置;

纸飞机当前的坐标,是距离最近的距具有参照物元素距离减内容区域的二分之一;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 100vh;
            background: linear-gradient(2000deg, #005bea, #00c6fb);
        }

        #plane {
            color: #fff;
            font-size: 70px;
            position: absolute;
            justify-content: center;
            align-items: center;
        }
    </style>
</head>
<body>
<div id="plane">
    <i class="fa fa-paper-plane" aria-hidden="true"></i>
</div>
</body>
</html>
<script>
    let plane = document.getElementById('plane')
    let deg = 0,
        ex = 0,
        ey = 0,
        vx = 0,
        vy = 0,
        count = 0
    // addEventListener(事件监听方法),该方法将时间处理程序附加到指定元素
    window.addEventListener("mousemove", (e) => {
        // 属性名 飞机的x坐标 距离最近的具有参照物的元素左边的距离 内容区域的宽/2
        ex = e.x - plane.offsetLeft - plane.clientWidth / 2
        // 属性名 飞机的y坐标 距离最近的具有参照物的元素上边的距离 内容区域的高/2
        ey = e.y - plane.offsetTop - plane.clientHeight / 2

        // Math.atan()是用于返回一个数
        deg = 360 * Math.atan(ey / ex) / (2 * Math.PI) + 45
        if (ex < 0) {
            deg += 180
        }
        count = 0
    })

    function draw() {
        plane.style.transform = 'rotate(' + deg + 'deg)'
        if (count < 100) {
            vx += ex / 100
            vy += ey / 100
        }
        plane.style.left = vx + 'px'
        plane.style.top = vy + 'px'
        count++
    }

    setInterval(draw, 1)
</script>

 

标签:count,鼠标,始终,plane,ey,ex,纸飞机,deg
来源: https://www.cnblogs.com/0416HF/p/16381640.html