zoukankan      html  css  js  c++  java
  • JavaScript课程——Day13(2、碰撞检测)

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #box {
                width: 100px;
                height: 100px;
                background: red;
                position: absolute;
                z-index: 1;
            }
    
            #box2 {
                width: 300px;
                height: 200px;
                background: green;
                position: absolute;
                left: 500px;
                top: 300px;
            }
        </style>
    </head>
    
    <body>
        <div id="box"></div>
        <div id="box2"></div>
    
        <script>
            var box = document.getElementById('box');
            var box2 = document.getElementById('box2');
    
            // 一打开就求box2的四边距离
            var L2 = box2.offsetLeft;
            var T2 = box2.offsetTop;
            var R2 = box2.clientWidth + L2;
            var B2 = box2.clientHeight + T2;
            console.log(L2, T2, R2, B2);
    
            box.onmousedown = function (ev) {
                // 设置全局捕获,兼容IE8及以下
                if (box.setCapture) {
                    box.setCapture();
                }
                var ev = ev || event;
    
                // 可视区宽高
                var clientW = document.documentElement.clientWidth;
                var clientH = document.documentElement.clientHeight;
    
                // 盒子宽高
                var boxW = box.clientWidth;
                var boxH = box.clientHeight;
    
                // 鼠标到盒子的距离
                var disX = ev.clientX - box.offsetLeft;
                var disY = ev.clientY - box.offsetTop;
    
                // 拖动
                document.onmousemove = function (ev) {
                    var ev = ev || event;
                    var L = ev.clientX - disX; // 盒子到左边的距离
                    var T = ev.clientY - disY; // 盒子到顶部的距离
    
                    if (L < 0) {
                        L = 0;
                    } else if (L > clientW - boxW) {
                        L = clientW - boxW;
                    }
    
                    if (T < 0) {
                        t = 0;
                    } else if (T > clientH - boxH) {
                        T = clientH - boxH;
                    }
    
                    box.style.left = L + 'px';
                    box.style.top = T + 'px';
    
                    // 求拖动盒子的四边距离
                    var L1 = L;
                    var T1 = T;
                    var R1 = L1 + boxW;
                    var B1 = T1 + boxH;
    
                    // 判断box与box2是否碰撞
                    if (R1 < L2 || B1 < T2 || L1 > R2 || T1 > B2) { // 未碰撞,box2维持原色
                        box2.style.background = 'green';
                    } else { // 发生碰撞,box2变为黄色
                        box2.style.background = 'yellow';
                    }
                }
    
                // 抬起
                document.onmouseup = function () {
                    document.onmousemove = null;
                    document.onmouseup = null;
    
                    // 释放全局捕获,兼容IE8及以下
                    if (box.releaseCapture) {
                        box.releaseCapture();
                    }
                }
    
                return false; // 阻止浏览器默认行为
            }
        </script>
    </body>
    
    </html>
  • 相关阅读:
    算法笔记--二分图判定
    算法笔记--最小表示法
    Codeforces 525A
    Codeforces 140D
    Codeforces C
    Codeforces 665C
    Codeforces 604B
    Codeforces 285C
    The Fewest Coins POJ
    Triangular Pastures POJ
  • 原文地址:https://www.cnblogs.com/miaochaofan/p/14742735.html
Copyright © 2011-2022 走看看