快捷搜索:  汽车  科技

15个提高javascript开发的技巧(手把手教你7个有趣的JavaScript)

15个提高javascript开发的技巧(手把手教你7个有趣的JavaScript)《一文让你彻底搞懂移动前端和Web 前端区别在哪里》《手把手教你前端代码如何做错误上报「JS篇」》<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>简单计算器</title> <style type="text/css">

15个提高javascript开发的技巧(手把手教你7个有趣的JavaScript)(1)

前言

JavaScript是最好的语言之一,尤其是在前端开发中。在本文中,您将找到7个为初学者提供免费源代码的最佳javascript项目。

手把手教你7个有趣的JavaScript 项目-上「附源码」

接下来小编继续。

6.创建JavaScript简单计算器codepen

15个提高javascript开发的技巧(手把手教你7个有趣的JavaScript)(2)

您已经学习了HTML和CSS以及javascript的基础知识,并且想要创建一些东西来评估自己的技能,构建一个简单的js计算器可以使您的技能更上一层楼。

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>简单计算器</title> <style type="text/css"> body { width: 500px; margin: 4% auto; font-family: 'Source Sans Pro' sans-serif; letter-spacing: 5px; font-size: 1.8rem; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; } .calculator { padding: 20px; -webkit-box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); border-radius: 1px; } .input { border: 1px solid #ddd; border-radius: 1px; height: 60px; padding-right: 15px; padding-top: 10px; text-align: right; margin-right: 6px; font-size: 2.5rem; overflow-x: auto; transition: all .2s ease-in-out; } .input:hover { border: 1px solid #bbb; -webkit-box-shadow: inset 0px 1px 4px 0px rgba(0 0 0 0.2); box-shadow: inset 0px 1px 4px 0px rgba(0 0 0 0.2); } .buttons {} .operators {} .operators div { display: inline-block; border: 1px solid #bbb; border-radius: 1px; width: 80px; text-align: center; padding: 10px; margin: 20px 4px 10px 0; cursor: pointer; background-color: #ddd; transition: border-color .2s ease-in-out background-color .2s box-shadow .2s; } .operators div:hover { background-color: #ddd; -webkit-box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); border-color: #aaa; } .operators div:active { font-weight: bold; } .leftPanel { display: inline-block; } .numbers div { display: inline-block; border: 1px solid #ddd; border-radius: 1px; width: 80px; text-align: center; padding: 10px; margin: 10px 4px 10px 0; cursor: pointer; background-color: #f9f9f9; transition: border-color .2s ease-in-out background-color .2s box-shadow .2s; } .numbers div:hover { background-color: #f1f1f1; -webkit-box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); border-color: #bbb; } .numbers div:active { font-weight: bold; } div.equal { display: inline-block; border: 1px solid #3079ED; border-radius: 1px; width: 17%; text-align: center; padding: 127px 10px; margin: 10px 6px 10px 0; vertical-align: top; cursor: pointer; color: #FFF; background-color: #4d90fe; transition: all .2s ease-in-out; } div.equal:hover { background-color: #307CF9; -webkit-box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); box-shadow: 0px 1px 4px 0px rgba(0 0 0 0.2); border-color: #1857BB; } div.equal:active { font-weight: bold; } </style> </head> <body> <div class="calculator"> <div class="input" id="input"></div> <div class="buttons"> <div class="operators"> <div> </div> <div>-</div> <div>×</div> <div>÷</div> </div> <div class="leftPanel"> <div class="numbers"> <div>7</div> <div>8</div> <div>9</div> </div> <div class="numbers"> <div>4</div> <div>5</div> <div>6</div> </div> <div class="numbers"> <div>1</div> <div>2</div> <div>3</div> </div> <div class="numbers"> <div>0</div> <div>.</div> <div id="clear">C</div> </div> </div> <div class="equal" id="result">=</div> </div> </div> <script type="text/javascript"> "use strict"; var input = document.getElementById('input') // input/output button number = document.querySelectorAll('.numbers div') // number buttons operator = document.querySelectorAll('.operators div') // operator buttons result = document.getElementById('result') // equal button clear = document.getElementById('clear') // clear button resultDisplayed = false; // flag to keep an eye on what output is displayed // adding click handlers to number buttons for (var i = 0; i < number.length; i ) { number[i].addEventListener("click" function(e) { // storing current input string and its last character in variables - used later var currentString = input.innerHTML; var lastChar = currentString[currentString.length - 1]; // if result is not diplayed just keep adding if (resultDisplayed === false) { input.innerHTML = e.target.innerHTML; } else if (resultDisplayed === true && lastChar === " " || lastChar === "-" || lastChar === "×" || lastChar === "÷") { // if result is currently displayed and user pressed an operator // we need to keep on adding to the string for next operation resultDisplayed = false; input.innerHTML = e.target.innerHTML; } else { // if result is currently displayed and user pressed a number // we need clear the input string and add the new input to start the new opration resultDisplayed = false; input.innerHTML = ""; input.innerHTML = e.target.innerHTML; } }); } // adding click handlers to number buttons for (var i = 0; i < operator.length; i ) { operator[i].addEventListener("click" function(e) { // storing current input string and its last character in variables - used later var currentString = input.innerHTML; var lastChar = currentString[currentString.length - 1]; // if last character entered is an operator replace it with the currently pressed one if (lastChar === " " || lastChar === "-" || lastChar === "×" || lastChar === "÷") { var newString = currentString.substring(0 currentString.length - 1) e.target.innerHTML; input.innerHTML = newString; } else if (currentString.length == 0) { // if first key pressed is an opearator don't do anything console.log("enter a number first"); } else { // else just add the operator pressed to the input input.innerHTML = e.target.innerHTML; } }); } // on click of 'equal' button result.addEventListener("click" function() { // this is the string that we will be processing eg. -10 26 33-56*34/23 var inputString = input.innerHTML; // forming an array of numbers. eg for above string it will be: numbers = ["10" "26" "33" "56" "34" "23"] var numbers = inputString.split(/\ |\-|\×|\÷/g); // forming an array of operators. for above string it will be: operators = [" " " " "-" "*" "/"] // first we replace all the numbers and dot with empty string and then split var operators = inputString.replace(/[0-9]|\./g "").split(""); console.log(inputString); console.log(operators); console.log(numbers); console.log("----------------------------"); // now we are looPIng through the array and doing one operation at a time. // first divide then multiply then subtraction and then addition // as we move we are alterning the original numbers and operators array // the final element remaining in the array will be the output var divide = operators.indexOf("÷"); while (divide != -1) { numbers.splice(divide 2 numbers[divide] / numbers[divide 1]); operators.splice(divide 1); divide = operators.indexOf("÷"); } var multiply = operators.indexOf("×"); while (multiply != -1) { numbers.splice(multiply 2 numbers[multiply] * numbers[multiply 1]); operators.splice(multiply 1); multiply = operators.indexOf("×"); } var subtract = operators.indexOf("-"); while (subtract != -1) { numbers.splice(subtract 2 numbers[subtract] - numbers[subtract 1]); operators.splice(subtract 1); subtract = operators.indexOf("-"); } var add = operators.indexOf(" "); while (add != -1) { // using parseFloat is necessary otherwise it will result in string concatenation :) numbers.splice(add 2 parseFloat(numbers[add]) parseFloat(numbers[add 1])); operators.splice(add 1); add = operators.indexOf(" "); } input.innerHTML = numbers[0]; // displaying the output resultDisplayed = true; // turning flag if result is displayed }); // clearing the input on press of clear clear.addEventListener("click" function() { input.innerHTML = ""; }) </script> </body> </html>7.使用JavaScript制作腌制里克游戏

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>腌制里克游戏</title> <style type="text/css"> $menuHeight: 65px 10px; @mixin transition { transition-property: background-color opacity; transition-duration: 0.2s; transition-timing-function: ease-in-out; } html body { width: 100vw; height: 100vh; position: fixed; padding: 0; margin: 0; top: 0; bottom: 0; left: 0; right: 0; } #mazeContainer { transition-property: opacity; transition-duration: 1s; transition-timing-function: linear; top: $menuHeight; opacity: 0; display: inline-block; background-color: rgba(0 0 0 0.30); margin: auto; #mazecanvas { margin: 0; display: block; border: solid 1px black; } } input select { @include transition; cursor: pointer; background-color: rgba(0 0 0 0.30); height: 45px; width: 150px; padding: 10px; border: none; border-radius: 5px; color: white; display: inline-block; font-size: 15px; text-align: center; text-decoration: none; appearance: none; &:hover { background-color: rgba(0 0 0 0.70); } &:active { background-color: black; } &:focus { outline: none; } } .custom-select { display: inline-block; select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url('data:image/png;base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAh0lEQVQ4T93TMQrCUAzG8V9x8QziiYSuXdzFC7h4AcELOPQAdXYovZCHEATlgQV5GFTe1ozJlz/kS1IpjKqw3wQBVyy JI0y1GTe7DCBbMAckeNIQKk/BanALBB 16LtnDELoMcsM/BESDlz2heDR3WePwKSLo5eoxz3z6NNcFD vu3ij14Aqz/DxGbKB7CAAAAAElFTkSuQmCC'); background-repeat: no-repeat; background-position: 125px center; } } #Message-Container { visibility: hidden; color: white; display: block; width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; bottom: 0; right: 0; background-color: rgba(0 0 0 0.30); z-index: 1; #message { width: 300px; height: 300px; position: fixed; top: 50%; left: 50%; margin-left: -150px; margin-top: -150px; } } #page { font-family: "Segoe UI" Arial sans-serif; text-align: center; height: auto; width: auto; margin: auto; #menu { margin: auto; padding: 10px; height: 65px; box-sizing: border-box; h1 { margin: 0; margin-bottom: 10px; font-weight: 600; font-size: 3.2rem; } } #view { position: absolute; top:65px; bottom: 0; left: 0; right: 0; width: 100%; height: auto; } } .border { border: 1px black solid; border-radius: 5px; } #gradient { z-index: -1; position: fixed; top: 0; bottom: 0; width: 100vw; height: 100vh; color: #fff; background: linear-gradient(-45deg #EE7752 #E73C7E #23A6D5 #23D5AB); background-size: 400% 400%; animation: Gradient 15s ease infinite; } @keyframes Gradient { 0% { background-position: 0% 50% } 50% { background-position: 100% 50% } 100% { background-position: 0% 50% } } /* Extra small devices (phones 600px and down) */ @media only screen and (max-width: 400px) { input select{ width: 120px; } } </style> <head> <meta charset="utf-8"> <body> <div id="gradient"></div> <div id="page"> <div id="Message-Container"> <div id="message"> <h1>Congratulations!</h1> <p>You are done.</p> <p id="moves"></p> <input id="okBtn" type="button" onclick="toggleVisablity('Message-Container')" value="Cool!" /> </div> </div> <div id="menu"> <div class="custom-select"> <select id="diffSelect"> <option value="10">Easy</option> <option value="15">Medium</option> <option value="25">Hard</option> <option value="38">Extreme</option> </select> </div> <input id="startMazeBtn" type="button" onclick="makeMaze()" value="Start" /> </div> <div id="view"> <div id="mazeContainer"> <canvas id="mazeCanvas" class="border" height="1100" width="1100"></canvas> </div> </div> </div> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.touchswipe/1.6.18/jquery.touchSwipe.min.js"></script> <script type="text/javascript"> function rand(max) { return Math.floor(Math.random() * max); } function shuffle(a) { for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i 1)); [a[i] a[j]] = [a[j] a[i]]; } return a; } function changeBrightness(factor sprite) { var virtCanvas = document.createElement("canvas"); virtCanvas.width = 500; virtCanvas.height = 500; var context = virtCanvas.getContext("2d"); context.drawImage(sprite 0 0 500 500); var imgData = context.getImageData(0 0 500 500); for (let i = 0; i < imgData.data.length; i = 4) { imgData.data[i] = imgData.data[i] * factor; imgData.data[i 1] = imgData.data[i 1] * factor; imgData.data[i 2] = imgData.data[i 2] * factor; } context.putImageData(imgData 0 0); var spriteOutput = new Image(); spriteOutput.src = virtCanvas.toDataURL(); virtCanvas.remove(); return spriteOutput; } function displayVictoryMess(moves) { document.getElementById("moves").innerHTML = "You Moved " moves " Steps."; toggleVisablity("Message-Container"); } function toggleVisablity(id) { if (document.getElementById(id).style.visibility == "visible") { document.getElementById(id).style.visibility = "hidden"; } else { document.getElementById(id).style.visibility = "visible"; } } function Maze(Width Height) { var mazeMap; var width = Width; var height = Height; var startCoord endCoord; var dirs = ["n" "s" "e" "w"]; var modDir = { n: { y: -1 x: 0 o: "s" } s: { y: 1 x: 0 o: "n" } e: { y: 0 x: 1 o: "w" } w: { y: 0 x: -1 o: "e" } }; this.map = function() { return mazeMap; }; this.startCoord = function() { return startCoord; }; this.endCoord = function() { return endCoord; }; function genMap() { mazeMap = new Array(height); for (y = 0; y < height; y ) { mazeMap[y] = new Array(width); for (x = 0; x < width; x) { mazeMap[y][x] = { n: false s: false e: false w: false visited: false priorPos: null }; } } } function defineMaze() { var isComp = false; var move = false; var cellsVisited = 1; var numLoops = 0; var maxLoops = 0; var pos = { x: 0 y: 0 }; var numCells = width * height; while (!isComp) { move = false; mazeMap[pos.x][pos.y].visited = true; if (numLoops >= maxLoops) { shuffle(dirs); maxLoops = Math.round(rand(height / 8)); numLoops = 0; } numLoops ; for (index = 0; index < dirs.length; index ) { var direction = dirs[index]; var nx = pos.x modDir[direction].x; var ny = pos.y modDir[direction].y; if (nx >= 0 && nx < width && ny >= 0 && ny < height) { //Check if the tile is already visited if (!mazeMap[nx][ny].visited) { //Carve through walls from this tile to next mazeMap[pos.x][pos.y][direction] = true; mazeMap[nx][ny][modDir[direction].o] = true; //Set Currentcell as next cells Prior visited mazeMap[nx][ny].priorPos = pos; //Update Cell position to newly visited location pos = { x: nx y: ny }; cellsVisited ; //Recursively call this method on the next tile move = true; break; } } } if (!move) { // If it failed to find a direction // move the current position back to the prior cell and Recall the method. pos = mazeMap[pos.x][pos.y].priorPos; } if (numCells == cellsVisited) { isComp = true; } } } function defineStartEnd() { switch (rand(4)) { case 0: startCoord = { x: 0 y: 0 }; endCoord = { x: height - 1 y: width - 1 }; break; case 1: startCoord = { x: 0 y: width - 1 }; endCoord = { x: height - 1 y: 0 }; break; case 2: startCoord = { x: height - 1 y: 0 }; endCoord = { x: 0 y: width - 1 }; break; case 3: startCoord = { x: height - 1 y: width - 1 }; endCoord = { x: 0 y: 0 }; break; } } genMap(); defineStartEnd(); defineMaze(); } function DrawMaze(Maze ctx cellsize endSprite = null) { var map = Maze.map(); var cellSize = cellsize; var drawEndMethod; ctx.lineWidth = cellSize / 40; this.redrawMaze = function(size) { cellSize = size; ctx.lineWidth = cellSize / 50; drawMap(); drawEndMethod(); }; function drawCell(xCord yCord cell) { var x = xCord * cellSize; var y = yCord * cellSize; if (cell.n == false) { ctx.beginPath(); ctx.moveTo(x y); ctx.lineTo(x cellSize y); ctx.stroke(); } if (cell.s === false) { ctx.beginPath(); ctx.moveTo(x y cellSize); ctx.lineTo(x cellSize y cellSize); ctx.stroke(); } if (cell.e === false) { ctx.beginPath(); ctx.moveTo(x cellSize y); ctx.lineTo(x cellSize y cellSize); ctx.stroke(); } if (cell.w === false) { ctx.beginPath(); ctx.moveTo(x y); ctx.lineTo(x y cellSize); ctx.stroke(); } } function drawMap() { for (x = 0; x < map.length; x ) { for (y = 0; y < map[x].length; y ) { drawCell(x y map[x][y]); } } } function drawEndFlag() { var coord = Maze.endCoord(); var gridSize = 4; var fraction = cellSize / gridSize - 2; var colorSwap = true; for (let y = 0; y < gridSize; y ) { if (gridSize % 2 == 0) { colorSwap = !colorSwap; } for (let x = 0; x < gridSize; x ) { ctx.beginPath(); ctx.rect( coord.x * cellSize x * fraction 4.5 coord.y * cellSize y * fraction 4.5 fraction fraction ); if (colorSwap) { ctx.fillStyle = "rgba(0 0 0 0.8)"; } else { ctx.fillStyle = "rgba(255 255 255 0.8)"; } ctx.fill(); colorSwap = !colorSwap; } } } function drawEndSprite() { var offsetLeft = cellSize / 50; var offsetRight = cellSize / 25; var coord = Maze.endCoord(); ctx.drawImage( endSprite 2 2 endSprite.width endSprite.height coord.x * cellSize offsetLeft coord.y * cellSize offsetLeft cellSize - offsetRight cellSize - offsetRight ); } function clear() { var canvasSize = cellSize * map.length; ctx.clearRect(0 0 canvasSize canvasSize); } if (endSprite != null) { drawEndMethod = drawEndSprite; } else { drawEndMethod = drawEndFlag; } clear(); drawMap(); drawEndMethod(); } function Player(maze c _cellsize onComplete sprite = null) { var ctx = c.getContext("2d"); var drawSprite; var moves = 0; drawSprite = drawSpriteCircle; if (sprite != null) { drawSprite = drawSpriteImg; } var player = this; var map = maze.map(); var cellCoords = { x: maze.startCoord().x y: maze.startCoord().y }; var cellSize = _cellsize; var halfCellSize = cellSize / 2; this.redrawPlayer = function(_cellsize) { cellSize = _cellsize; drawSpriteImg(cellCoords); }; function drawSpriteCircle(coord) { ctx.beginPath(); ctx.fillStyle = "yellow"; ctx.arc( (coord.x 1) * cellSize - halfCellSize (coord.y 1) * cellSize - halfCellSize halfCellSize - 2 0 2 * Math.PI ); ctx.fill(); if (coord.x === maze.endCoord().x && coord.y === maze.endCoord().y) { onComplete(moves); player.unbindKeyDown(); } } function drawSpriteImg(coord) { var offsetLeft = cellSize / 50; var offsetRight = cellSize / 25; ctx.drawImage( sprite 0 0 sprite.width sprite.height coord.x * cellSize offsetLeft coord.y * cellSize offsetLeft cellSize - offsetRight cellSize - offsetRight ); if (coord.x === maze.endCoord().x && coord.y === maze.endCoord().y) { onComplete(moves); player.unbindKeyDown(); } } function removeSprite(coord) { var offsetLeft = cellSize / 50; var offsetRight = cellSize / 25; ctx.clearRect( coord.x * cellSize offsetLeft coord.y * cellSize offsetLeft cellSize - offsetRight cellSize - offsetRight ); } function check(e) { var cell = map[cellCoords.x][cellCoords.y]; moves ; switch (e.keyCode) { case 65: case 37: // west if (cell.w == true) { removeSprite(cellCoords); cellCoords = { x: cellCoords.x - 1 y: cellCoords.y }; drawSprite(cellCoords); } break; case 87: case 38: // north if (cell.n == true) { removeSprite(cellCoords); cellCoords = { x: cellCoords.x y: cellCoords.y - 1 }; drawSprite(cellCoords); } break; case 68: case 39: // east if (cell.e == true) { removeSprite(cellCoords); cellCoords = { x: cellCoords.x 1 y: cellCoords.y }; drawSprite(cellCoords); } break; case 83: case 40: // south if (cell.s == true) { removeSprite(cellCoords); cellCoords = { x: cellCoords.x y: cellCoords.y 1 }; drawSprite(cellCoords); } break; } } this.bindKeyDown = function() { window.addEventListener("keydown" check false); $("#view").swipe({ swipe: function( event direction distance duration fingerCount fingerData ) { console.log(direction); switch (direction) { case "up": check({ keyCode: 38 }); break; case "down": check({ keyCode: 40 }); break; case "left": check({ keyCode: 37 }); break; case "right": check({ keyCode: 39 }); break; } } threshold: 0 }); }; this.unbindKeyDown = function() { window.removeEventListener("keydown" check false); $("#view").swipe("destroy"); }; drawSprite(maze.startCoord()); this.bindKeyDown(); } var mazeCanvas = document.getElementById("mazeCanvas"); var ctx = mazeCanvas.getContext("2d"); var sprite; var finishSprite; var maze draw player; var cellSize; var difficulty; // sprite.src = 'media/sprite.png'; window.onload = function() { let viewWidth = $("#view").width(); let viewHeight = $("#view").height(); if (viewHeight < viewWidth) { ctx.canvas.width = viewHeight - viewHeight / 100; ctx.canvas.height = viewHeight - viewHeight / 100; } else { ctx.canvas.width = viewWidth - viewWidth / 100; ctx.canvas.height = viewWidth - viewWidth / 100; } //Load and edit sprites var completeOne = false; var completeTwo = false; var isComplete = () => { if(completeOne === true && completeTwo === true) { console.log("Runs"); setTimeout(function(){ makeMaze(); } 500); } }; sprite = new Image(); sprite.src = "https://image.ibb.co/dr1HZy/Pf_RWr3_X_Imgur.png" "?" new Date().getTime(); sprite.setAttribute("crossOrigin" " "); sprite.onload = function() { sprite = changeBrightness(1.2 sprite); completeOne = true; console.log(completeOne); isComplete(); }; finishSprite = new Image(); finishSprite.src = "https://image.ibb.co/b9wqnJ/i_Q7m_U25_Imgur.png" "?" new Date().getTime(); finishSprite.setAttribute("crossOrigin" " "); finishSprite.onload = function() { finishSprite = changeBrightness(1.1 finishSprite); completeTwo = true; console.log(completeTwo); isComplete(); }; }; window.onresize = function() { let viewWidth = $("#view").width(); let viewHeight = $("#view").height(); if (viewHeight < viewWidth) { ctx.canvas.width = viewHeight - viewHeight / 100; ctx.canvas.height = viewHeight - viewHeight / 100; } else { ctx.canvas.width = viewWidth - viewWidth / 100; ctx.canvas.height = viewWidth - viewWidth / 100; } cellSize = mazeCanvas.width / difficulty; if (player != null) { draw.redrawMaze(cellSize); player.redrawPlayer(cellSize); } }; function makeMaze() { //document.getElementById("mazeCanvas").classList.add("border"); if (player != undefined) { player.unbindKeyDown(); player = null; } var e = document.getElementById("diffSelect"); difficulty = e.options[e.selectedIndex].value; cellSize = mazeCanvas.width / difficulty; maze = new Maze(difficulty difficulty); draw = new DrawMaze(maze ctx cellSize finishSprite); player = new Player(maze mazeCanvas cellSize displayVictoryMess sprite); if (document.getElementById("mazeContainer").style.opacity < "100") { document.getElementById("mazeContainer").style.opacity = "100"; } } </script> </body> </html>

本篇完结

推荐JavaScript经典实例学习资料文章

《手把手教你7个有趣的JavaScript 项目-上「附源码」》

《JavaScript 使用 mediaDevices API 访问摄像头自拍》

《手把手教你前端代码如何做错误上报「JS篇」》

《一文让你彻底搞懂移动前端和Web 前端区别在哪里》

《63个JavaScript 正则大礼包「值得收藏」》

《提高你的 JavaScript 技能10 个问答题》

《JavaScript图表库的5个首选》

《一文彻底搞懂JavaScript 中Object.freeze与Object.seal的用法》

《可视化的 JS:动态图演示 - 事件循环 Event Loop的过程》

《教你如何用动态规划和贪心算法实现前端瀑布流布局「实践」》

《可视化的 js:动态图演示 Promises & Async/Await 的过程》

《原生JS封装拖动验证滑块你会吗?「实践」》

《如何实现高性能的在线 PDF 预览》

《细说使用字体库加密数据-仿58同城》

《Node.js要完了吗?》

《Pug 3.0.0正式发布,不再支持 Node.js 6/8》

《纯JS手写轮播图(代码逻辑清晰,通俗易懂)》

《JavaScript 20 年 中文版之创立标准》

《值得收藏的前端常用60余种工具方法「JS篇」》

《箭头函数和常规函数之间的 5 个区别》

《通过发布/订阅的设计模式搞懂 Node.js 核心模块 Events》

《「前端篇」不再为正则烦恼》

《「速围」Node.js V14.3.0 发布支持顶级 Await 和 REPL 增强功能》

《深入细品浏览器原理「流程图」》

《JavaScript 已进入第三个时代,未来将何去何从?》

《前端上传前预览文件 image、text、json、video、audio「实践」》

《深入细品 EventLoop 和浏览器渲染、帧动画、空闲回调的关系》

《推荐13个有用的JavaScript数组技巧「值得收藏」》

《前端必备基础知识:window.location 详解》

《不要再依赖CommonJS了》

《犀牛书作者:最该忘记的JavaScript特性》

《36个工作中常用的JavaScript函数片段「值得收藏」》

《Node H5 实现大文件分片上传、断点续传》

《一文了解文件上传全过程(1.8w字深度解析)「前端进阶必备」》

《【实践总结】关于小程序挣脱枷锁实现批量上传》

《手把手教你前端的各种文件上传攻略和大文件断点续传》

《字节跳动面试官:请你实现一个大文件上传和断点续传》

《谈谈前端关于文件上传下载那些事【实践】》

《手把手教你如何编写一个前端图片压缩、方向纠正、预览、上传插件》

《最全的 JavaScript 模块化方案和工具》

《「前端进阶」JS中的内存管理》

《JavaScript正则深入以及10个非常有意思的正则实战》

《前端面试者经常忽视的一道JavaScript 面试题》

《一行JS代码实现一个简单的模板字符串替换「实践」》

《JS代码是如何被压缩的「前端高级进阶」》

《前端开发规范:命名规范、html规范、css规范、js规范》

《【规范篇】前端团队代码规范最佳实践》

《100个原生JavaScript代码片段知识点详细汇总【实践】》

《关于前端174道 JavaScript知识点汇总(一)》

《关于前端174道 JavaScript知识点汇总(二)》

《关于前端174道 JavaScript知识点汇总(三)》

《几个非常有意思的javascript知识点总结【实践】》

《都2020年了,你还不会JavaScript 装饰器?》

《JavaScript实现图片合成下载》

《70个JavaScript知识点详细总结(上)【实践】》

《70个JavaScript知识点详细总结(下)【实践】》

《开源了一个 JavaScript 版敏感词过滤库》

《送你 43 道 JavaScript 面试题》

《3个很棒的小众JavaScript库,你值得拥有》

《手把手教你深入巩固JavaScript知识体系【思维导图】》

《推荐7个很棒的JavaScript产品步骤引导库》

《Echa哥教你彻底弄懂 JavaScript 执行机制》

《一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧》

《深入解析高频项目中运用到的知识点汇总【JS篇】》

《JavaScript 工具函数大全【新】》

《从JavaScript中看设计模式(总结)》

《身份证号码的正则表达式及验证详解(JavaScript,Regex)》

《浏览器中实现JavaScript计时器的4种创新方式》

《Three.js 动效方案》

《手把手教你常用的59个JS类方法》

《127个常用的JS代码片段,每段代码花30秒就能看懂-【上】》

《深入浅出讲解 js 深拷贝 vs 浅拷贝》

《手把手教你JS开发H5游戏【消灭星星】》

《深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】》

《手把手教你全方位解读JS中this真正含义【实践】》

《书到用时方恨少,一大波JS开发工具函数来了》

《干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)》

《手把手教你JS 异步编程六种方案【实践】》

《让你减少加班的15条高效JS技巧知识点汇总【实践】》

《手把手教你JS开发H5游戏【黄金矿工】》

《手把手教你JS实现监控浏览器上下左右滚动》

《JS 经典实例知识点整理汇总【实践】》

《2.6万字JS干货分享,带你领略前端魅力【基础篇】》

《2.6万字JS干货分享,带你领略前端魅力【实践篇】》

《简单几步让你的 JS 写得更漂亮》

《恭喜你获得治疗JS this的详细药方》

《谈谈前端关于文件上传下载那些事【实践】》

《面试中教你绕过关于 JavaScript 作用域的 5 个坑》

《Jquery插件(常用的插件库)》

《【JS】如何防止重复发送ajax请求》

《JavaScript Canvas实现自定义画板》

《Continuation 在 JS 中的应用「前端篇」》

猜您喜欢: