导读
本篇文章主要以小项目的方式展开,其中给出的代码中均包含详细地注释,大家可以参照理解。下面4个小项目中均包含有 HTML、CSS、JavaScript 等相关知识,可以拿来练手,系统提升一下自己的前端开发能力。
废话少说,下面直接奉上👇
小项目一:猜数字游戏
效果展示:
源码展示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>猜数字游戏</title> <!-- 引入jquery,这里导入的是在线JQuery地址,也可以选择本地地址进行导入 --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script> </head> <!-- html界面框架 --> <body> <!-- 由于存在输入框,为了对齐美观,采用外嵌表格方式 --> <div> <h2 align="center">猜数字游戏(1-10)</h2> <table align="center"> <tr> <td>请输入你猜的数字:</td> <!-- 点击事件:猜 --> <td><input type="text" name="in" style="width: 50px;" /> <button type="button" onclick="checkResult()">猜</button></td> </tr> <tr> <td>已猜次数:</td> <td align="center"><span id="times">0</span></td> </tr> <tr> <td>结果:</td> <!-- 结果显示的地方 --> <td><span id="result"></span></td> </tr> <tr> <!-- 点击事件:重开 --> <td colspan="2" align="center"><button type="button" onclick="reset()" style="width: 150px;">重开</button></td> <td></td> </tr> </table> </div> <!-- Js操作代码部分--> <script type="text/javascript"> // 生成 1 - 10 之间的随机数 var randomNum = Math.floor(Math.random()*10)+1; // 使用 jQuery 获取元素 var result = jQuery("#result"); var inputContent = jQuery("input"); var count = jQuery("#times"); function checkResult(){ // 修改猜的次数 var times = parseInt(jQuery("#times").text()) + 1; jQuery("#times").html(times); // 比对结果 var guessNum = jQuery("input[name='in']").val(); if(guessNum > randomNum) { // 写入结果 result.html("猜大了!"); // 结果样式 result.css("color","red"); // 为方便下次输入,聚焦输入框 inputContent.focus(); } else if (guessNum < randomNum) { // 写入结果 result.html("猜小了!"); // 结果样式 result.css("color","blue"); // 为方便下次输入,聚焦输入框 inputContent.focus(); } else { // 结果样式 result.html("猜对了!"); // 结果样式 result.css("color","green"); } } function reset(){ // 重新生成随机数 randomNum = Math.floor(Math.random()*10)+1; // 结果置空 result.html(""); // 次数置0 count.html("0"); // 输入框清空 inputContent.val(""); // 重新聚焦输入框 inputContent.focus(); } </script> </body> </html>
小项目二:表白墙
效果展示:
源码展示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>表白墙</title> <!-- 引入jquery,这里导入的是在线JQuery地址,也可以选择本地地址进行导入 --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script> <style type="text/css"> /* 全局边距设为0 */ * { margin: 0; padding: 0; } /* 设置input输入框样式 */ input{ height: 30px; width: 250px; } /* 设置单元格样式 */ td{ height: 40px; } /* 设置按钮样式 */ button{ width: 325px; height: 40px; background-color: #f9a100; outline-color: red; border: none; color: white; } /* 设置消息样式 */ #message{ width: 1000px; height: 650px; margin: 0 auto; } </style> </head> <body> <h1 align="center">表白墙</h1> <table align="center"> <tr> <td align="center" colspan="2" style="font-size: 13px;">输入后点击提交,会将信息显示在表格中</td> <td></td> </tr> <tr> <td>谁:</td> <td><input type="text" id="from" /></td> </tr> <tr> <td>对谁:</td> <td><input type="text" id="to"/></td> </tr> <tr> <td>说什么:</td> <td><input type="text" id="what"/></td> </tr> <tr> <!-- 点击事件:提交 --> <td align="center" colspan="2"><button type="button" onclick="submit()">提交</button></td> <td></td> </tr> </table> <div id="message"> <h2 align="center">留言板</h2> <hr/> </div> <!-- Js操作代码 --> <script type="text/javascript"> function submit(){ // 获取DOM元素 var megFrom = jQuery("#from"); var megTo = jQuery("#to"); var meg = jQuery("#what"); // 输入判空 if (megFrom.val().trim() == "" || megTo.val().trim() == "" || meg.val().trim() == "") { alert("信息不全,请重新输入!"); megFrom.val(""); megTo.val(""); meg.val(""); megFrom.focus(); return; } // 构造html消息字符串 var finalMeg ="<p>"+ megFrom.val()+"对"+megTo.val()+"说:"+meg.val()+"<p/>"; console.log(megFrom.val()+","+megTo.val()+","+meg.val()); // 信息发送 jQuery(finalMeg).appendTo("#message"); // 清理输入框内容 megFrom.val(""); megTo.val(""); meg.val(""); // 重新聚焦 megFrom.focus(); } </script> </body> </html>
小项目三:待办事项
效果展示:
源码展示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>待办事项</title> <!-- 引入jquery,这里导入的是在线JQuery地址,也可以选择本地地址进行导入 --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script> <style type="text/css"> /* 全局边距设为0 */ *{ margin: 0; padding: 0; } /* 设置整体容器样式 */ #container_1{ top:20px; position: relative; margin: 0 auto; /* border: 1px solid red; */ width: 1000px; height: 900px; } /* 设置新建任务容器样式*/ #container_1_1{ position: absolute; width: 800px; height: 55px; /* border: blue solid 1px; */ right: 110px; top: 20px; } /* 设置新建任务按钮样式*/ #container_1_1 button{ position: absolute; width: 200px; height: 55px; color: white; font-size: 20px; border: none; background-color: #f9a100; right: 0px; } /* 设置新建任务输入框样式*/ #container_1_1 input{ width: 596px; height: 51px; } /* 设置中部分割条样式*/ #container_1_2{ position: absolute; display: flex; width: 800px; height: 50px; right: 110px; top: 110px; align-items: center; } /* 设置中部分隔条子容器样式*/ #container_1_2 div{ color: white; background-color: black; font-size: 20px; font-family: "微软雅黑"; text-align: center; width: 400px; height: 50px; line-height: 50px; } /* 设置任务样式*/ #task{ position: absolute; right: 110px; top: 180px; width: 800px; height: 700px; /* border: 1px red solid; */ display: flex; } /* 设置未完成任务样式*/ #undo{ position: relative; margin: 10px; border: 1px #d3d3d3 solid; width: 380px; height: 680px; } /* 设置已完成任务样式*/ #done{ position: relative; margin: 10px; border: 1px #d3d3d3 solid; width: 380px; height: 680px; } /* 设置任务项样式*/ #undo p,#done p{ /* height: 20px; */ margin: 15px; } /* 设置任务项删除按钮样式*/ #undo button,#done button{ position: absolute; right: 45px; width: 50px; } </style> </head> <body> <div id="container_1"> <div id="container_1_1"> <input type="text" id = "input"/> <!-- 点击事件:新建任务 --> <button type="button" onclick="createTask()"><b>新建任务</b></button> </div> <div id="container_1_2"> <div> <b>未完成</b> </div> <div> <b>已完成</b> </div> </div> <div id="task"> <div id="undo"> </div> <div id="done"> </div> </div> </div> <!-- Js操作代码 --> <script type="text/javascript"> // 添加任务事件功能 function createTask(){ // 获取新任务 var newTask = jQuery("#input"); // 输入判断 if(newTask.val().trim() == ""){ alert("输入无效,请重新输入!"); newTask.val(""); // 重新聚焦输入框 newTask.focus(); return; } // 构造html任务字符串 var strTask = "<p><input type='checkbox' οnclick='transfer()'/> "+newTask.val()+"<button type='button' οnclick='del()'>删除</button></p>"; // 添加任务 jQuery(strTask).appendTo("#undo"); // 清空输入框 newTask.val(""); // 重新聚焦输入框 newTask.focus(); } // checkbox 注册点击事件功能 function transfer() { // 找到触发事件 var row = event.target; // 找到触发事件的父节点 var parent = row.parentNode; // 注意! 是先触发 checked 为 true, 然后再调用 onclick 函数 // 选择任务框 if (row.checked) { var target = "#done"; } else { var target = "#undo"; } // 将任务添加到相应的任务框内 jQuery(parent).appendTo(target); // 重新聚焦输入框 jQuery("#input").focus(); } // 删除事件功能 function del(){ // 找到触发事件 // 当前需要删除结点 var row = event.target.parentNode; // 它的父亲节点 var parent = row.parentNode; // 删除结点 parent.removeChild(row); // 重新聚焦输入框 jQuery("#input").focus(); } </script> </body> </html>
小项目四:网页版三子棋
效果展示:
源码展示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>三子棋游戏</title> <!-- 引入jquery,这里导入的是在线JQuery地址,也可以选择本地地址进行导入 --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script> <style type="text/css"> /* 全局边距设为0 */ *{ margin: 0px; padding: 0px; } /* 设置棋盘整体样式 */ #container{ width: 606px; height: 608px; border: black solid 2px; margin: 80px auto; display: flex; flex-wrap: wrap; align-items: center; box-sizing: content-box; } /* 设置棋格样式 */ #container div{ width: 200px; height: 200px; border: 1px black solid; text-align: center; font-size: 80px; line-height: 200px; } /* 设置头部提示信息样式 */ #head{ text-align: center; width: 240px; height: 30px; color: #FF0000; margin:50px auto; } /* 设置底部按钮位置 */ #bottom{ margin: 0px auto; width: 200px; height: 80px; } /* 设置重新开始按钮样式 */ .res{ background-color: #F9A100; font-size: 20px; width: 200px; height: 50px; color: white; } </style> </head> <body> <div id="head"> ATTENTION:默认 "√" 先下棋 </div> <div id="container"> <!-- 为棋格添加点击事件:用来下棋 --> <div id="11" onclick="change()"> </div> <div id="12" onclick="change()"> </div> <div id="13" onclick="change()"> </div> <div id="21" onclick="change()"> </div> <div id="22" onclick="change()"> </div> <div id="23" onclick="change()"> </div> <div id="31" onclick="change()"> </div> <div id="32" onclick="change()"> </div> <div id="33" onclick="change()"> </div> </div> <div id="bottom"> <!-- 点击事件:重开 --> <button type="button" onclick="reset()" class="res"><b>重新开始</b></button> </div> <!-- Js操作代码 --> <script type="text/javascript"> // 一局当中的下棋次数,下面用来分阵营和判断平局 var times = 1; // 一局当中的赢家 var win = ""; // 下棋、判断输赢功能 function change(){ // 获得触发事件的dom元素 var dom = event.target; // times为奇数代表“√”偶数代表“○”。实现交替下棋 if(times%2!=0) { dom.innerHTML="√"; } else { dom.innerHTML="○"; } // 统计下棋次数 times++; // 判断输赢 // 1.防止耍赖 if(win == "○" || win == "√"){ alert("胜负已分,请不要做无用的对抗!"); return; } var num = parseInt(dom.id); var row = Math.floor(num/10); var col = num%10; // 2.横向棋格 var row1 = jQuery("#"+"1"+col).text().trim(); var row2 = jQuery("#"+"2"+col).text().trim(); var row3 = jQuery("#"+"3"+col).text().trim(); // 3.纵向棋格 var col1 = jQuery("#"+row+"1").text().trim(); var col2 = jQuery("#"+row+"2").text().trim(); var col3 = jQuery("#"+row+"3").text().trim(); // 4.对角线棋格 var x1 = jQuery("#11").text().trim(); var x2 = jQuery("#22").text().trim(); var x3 = jQuery("#33").text().trim(); var x4 = jQuery("#31").text().trim(); var x5 = jQuery("#13").text().trim(); if(row1 == row2 && row2 == row3 && row1!=""){ // 5.判断横向 if(row1 == "√") { win = "√"; alert("√ 方胜利!"); } else { win = "○"; alert("○ 方胜利!"); } return; } else if(col1 == col2 && col2 == col3 && col1!="") { // 6.判断纵向 if(col1 == "√") { win = "√"; alert("√ 方胜利!"); } else { win = "○"; alert("○ 方胜利!"); } return; } else if(x1 == x2 && x2 == x3 && x1!="") { // 7.判断左对角线 if(x1 == "√") { win = "√"; alert("√ 方胜利!"); } else { win = "○"; alert("○ 方胜利!"); } return; } else if(x4 == x2 && x2 == x5 && x2!=""){ // 7.判断右对角线 if(x2 == "√") { win = "√"; alert("√ 方胜利!"); } else { win = "○"; alert("○ 方胜利!"); } return; } // 8.判断平局 if(times == 10) { alert("平局!"); return; } } // 重置棋盘功能 function reset(){ // 初始化全局变量 win = ""; times = 1; // 棋盘置空 for(var i = 1;i <= 3;i ++) { var id1 = "#"+i+"1"; var id2 = "#"+i+"2"; var id3 = "#"+i+"3"; jQuery(id1).text(""); jQuery(id2).text(""); jQuery(id3).text(""); } } </script> </body> </html>