碰撞测试(附源码)

这里没有办法展示动态效果,具体动态效果请复制到浏览器并在浏览器控制台上查看具体效果:

CSS部分:

复制代码
 <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            position: absolute;
            top: 0;
            left: 0;
            border-radius: 50%
        }
        #div1 {
            width: 200px;
            height: 200px;
            background: green
        }
        #div2 {
            width: 100px;
            height: 100px;
            background: red
        }


    </style>
复制代码

HTML部分:

<body>
<div id="div1"></div>
<div id="div2"></div>
</body>

js部分:

复制代码
<script>
    const div1 = document.getElementById("div1");
    const div2 = document.getElementById("div2");

    function move(domElement) {
        domElement.onmousedown = function (e) {
            const mouseX = e.clientX,
                mouseY = e.clientY,
                oldLeft = domElement.offsetLeft,
                oldTop = domElement.offsetTop
            document.onmousemove = function (e) {
                const x = e.clientX,
                    y = e.clientY
                domElement.style.left = oldLeft + (x - mouseX) + 'px'
                domElement.style.top = oldTop + (y - mouseY) + 'px'
            }
            document.onmouseup = function () {
                document.onmousemove = null
            }
        }
    }

    move(div1)
    move(div2)
    setInterval(function () {
        const x = div1.offsetWidth / 2 + div1.offsetLeft  //div1的圆心left值
        const x2 = div2.offsetWidth / 2 + div2.offsetLeft  //div2的圆心left值
        const y = div1.offsetWidth / 2 + div1.offsetTop  //div1的圆心top值
        const y2 = div2.offsetWidth / 2 + div2.offsetTop  //div2的圆心top值
        const circleDistance = Math.pow(x - x2, 2) + Math.pow(y - y2, 2) //斜边的平方
        const r1AndR2 = Math.pow(div1.offsetWidth / 2 + div2.offsetWidth / 2, 2)

        if (circleDistance <= r1AndR2) {
            console.log('撞上了')
        }
    }, 30)
</script>
复制代码

 

posted @   冬天总要看海  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示