6

    技术2022-07-14  93

    1.事件委托 1.1 概念

    当页面元素不存在的时候,而此时想先给未知的元素绑定事件,但是单纯的绑定事件又不能触发,那是因为未找到的绑定的对象,所以此时你需要将事件委托给其祖先元素。

    1.2 例子

    //css部分 <link rel="stylesheet" href="https://www.bootcss.com/p/buttons/css/buttons.css"> <style> .button { margin-right: 10px; } </style> //body内的内容 <body> <div class="container"> <button class="button button-primary button-pill button-small">ADD a Button</button> </div> <script src="./js/jquery.js"></script> <script> $(".container").on("click", "button", function () { let bt = $("<button/>").html("ADD a Button").addClass( "button button-primary button-pill button-small"); $(".container").append(bt) }) </script> </body>

    1.3 例子的运行结果

    初始图 点击添加后的结果 2.简易版飞机大战小游戏 2.1 css代码

    <style> .container { width: 500px; height: 80vh; margin: 10vh auto; background-color: black; position: relative; overflow: hidden; } .plane { width: 100px; height: 50px; /* background-color: red; */ position: absolute; left: calc(50% - 40px); bottom: 10px; } .bullet { width: 20px; height: 10px; background-color: red; position: absolute; z-index: 99; } .enemy { width: 80px; height: 50px; background: url(./1.png) 0 / 100% 100%; position: absolute; top: 0; } .score { position: absolute; color: red; top: 0px; left: 50%; transform: translateX(-50%); } .stop { font-size: 2px; font-weight: '楷体'; position: absolute; color: red; top: 25px; left: 60%; transform: translateX(-50%); } </style>

    2.2 html代码

    <h1 class="score">0</h1> <div class="stop"> 暂停 </div> <div class="container"> <img src="1.png" alt="" class="plane"> </div>

    2.3 jQuery代码

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>//引入jq <script> $(function () { $(window).keydown(function ({ keyCode }) { let { left: l, top: t } = $(".plane").position(); let maxleft = $(".container").innerWidth() - $(".plane").innerWidth(); let maxtop = $(".container").innerHeight() - $(".plane").innerHeight(); // console.log(keyCode); switch (keyCode) { case 87: t -= 10; break; case 65: l -= 10; break; case 83: t += 10; break; case 68: l += 10; break; case 74: shoot(); break; case 32: stop(); break; } t < 0 ? t = 0 : false; l < 0 ? l = 0 : false; t > maxtop ? t = maxtop : false; l > maxleft ? l = maxleft : false; $(".plane").css("top", t).css("left", l); }) let endtime = new Date(); // 射击 function shoot() { if (new Date() - endtime < 500) return false; else { $(".container").append($("<div/>").addClass("bullet").css({ top: $(".plane").position().top - 20, left: $(".plane").position().left + ($(".plane").innerWidth() / 2 - $( ".bullet").innerWidth() / 2), })); endtime = new Date(); } } let score = 0; let sign = true; function fun1() { $('.enemy').each(function () { let enemy = this if (calc(enemy, $('.plane').get(0)) || calc($('.plane').get(0), enemy)) { console.log('GG'); location.reload() } $('.bullet').each(function () { let bullet = this; if (calc(enemy, bullet) || calc(bullet, enemy)) { bullet.remove() enemy.remove() score += 10 $('.score').text(score) } // console.log($('.score').html()); }) }) } function fun2() { let enemy = $('<div/>').addClass('enemy') $('.container').append(enemy) enemy.css('left', Math.round(Math.random() * ($('.container').innerWidth() - enemy .innerWidth()))) } function fun3() { $('.enemy').each(function () { let enemy = $(this) let { top } = enemy.position(); // console.log(top); if (top > $('.container').innerHeight()) enemy.remove() else enemy.css('top', enemy.position().top + 20) }) } function fun4() { $(".bullet").each(function () { let bullet = $(this); let { top } = bullet.position(); if (top < 5) bullet.remove(); else bullet.css("top", bullet.position().top - 10); }) } // 检测撞击事件 let cash = setInterval(fun1, 50); // 创建大量敌人 let enem = setInterval(fun2, 2000); // 让敌人由上而下移动 let move_to_bottom = setInterval(fun3, 300); // 子弹 let move_to_top = setInterval(fun4, 100); // 暂停 function stop() { if (sign) { // console.log(sign); $(".stop").html("开始"); clearInterval(cash) clearInterval(enem) clearInterval(move_to_bottom) clearInterval(move_to_top) sign = false; } else { $(".stop").html("暂停"); // 检测撞击事件 cash = setInterval(fun1, 50); // 创建大量敌人 enem = setInterval(fun2, 2000); // 让敌人由上而下移动 move_to_bottom = setInterval(fun3, 300); // 子弹 move_to_top = setInterval(fun4, 100); sign = true; } } // 返回目标的值 function getLTRB(node) { return { l: node.offsetLeft, t: node.offsetTop, r: node.offsetLeft + node.offsetWidth, b: node.offsetTop + node.offsetHeight } } // 检测碰撞 function calc(a, b) { a = getLTRB(a) b = getLTRB(b) if (b.l > a.l && b.l < a.r && b.t > a.t && b.t < a.b) return true else if (b.l > a.l && b.l < a.r && b.b > a.t && b.b < a.b) return true else if (b.r > a.l && b.r < a.r && b.b > a.t && b.b < a.b) return true else if (b.r > a.l && b.r < a.r && b.t > a.t && b.t < a.b) return true else return false } }) </script>
    Processed: 0.009, SQL: 9