getStaticProps 是否在服务器上运行?

时间:2021-07-08 17:41:38

标签: next.js

我试图了解天气构建时间是指页面呈现的时间或应用程序构建到 vercel url 的时间

1 个答案:

答案 0 :(得分:1)

<!DOCTYPE html> <html style="background-color: #000000"> <head> <title>Snake!</title> </head> <body> <script> (function() { ///////////////////////////////////////////////////////////// // Canvas & Context var canvas; var ctx; // Snake var snake; var snake_dir; var snake_next_dir; var snake_speed; // Food var food = { x: 0, y: 0 }; // Score var score; // Wall var wall; // HTML Elements var screen_snake; var screen_menu; var screen_setting; var screen_gameover; var button_newgame_menu; var button_newgame_setting; var button_newgame_gameover; var button_setting_menu; var button_setting_gameover; var ele_score; var speed_setting; var wall_setting; ///////////////////////////////////////////////////////////// var activeDot = function(x, y) { ctx.fillStyle = "LimeGreen"; ctx.fillRect(x * 10, y * 10, 10, 10); } ///////////////////////////////////////////////////////////// var changeDir = function(key) { if (key == 38 && snake_dir != 2) { snake_next_dir = 0; } else { if (key == 39 && snake_dir != 3) { snake_next_dir = 1; } else { if (key == 40 && snake_dir != 0) { snake_next_dir = 2; } else { if (key == 37 && snake_dir != 1) { snake_next_dir = 3; } } } } } ///////////////////////////////////////////////////////////// var addFood = function() { food.x = Math.floor(Math.random() * ((canvas.width / 10) - 1)); food.y = Math.floor(Math.random() * ((canvas.height / 10) - 1)); for (var i = 0; i < snake.length; i++) { if (checkBlock(food.x, food.y, snake[i].x, snake[i].y)) { addFood(); } } } ///////////////////////////////////////////////////////////// var checkBlock = function(x, y, _x, _y) { return (x == _x && y == _y) ? true : false; } ///////////////////////////////////////////////////////////// var altScore = function(score_val) { ele_score.innerHTML = String(score_val); } ///////////////////////////////////////////////////////////// var mainLoop = function() { var _x = snake[0].x; var _y = snake[0].y; snake_dir = snake_next_dir; // 0 - Up, 1 - Right, 2 - Down, 3 - Left switch (snake_dir) { case 0: _y--; break; case 1: _x++; break; case 2: _y++; break; case 3: _x--; break; } snake.pop(); snake.unshift({ x: _x, y: _y }); // -------------------- // Wall if (wall == 1) { // On if (snake[0].x < 0 || snake[0].x == canvas.width / 10 || snake[0].y < 0 || snake[0].y == canvas.height / 10) { showScreen(3); return; } } else { // Off for (var j = 0, x = snake.length; j < x; j++) { if (snake[j].x < 0) { snake[j].x = snake[j].x + (canvas.width / 10); } if (snake[j].x == canvas.width / 10) { snake[j].x = snake[j].x - (canvas.width / 10); } if (snake[j].y < 0) { snake[j].y = snake[j].y + (canvas.height / 10); } if (snake[j].y == canvas.height / 10) { snake[j].y = snake[j].y - (canvas.height / 10); } } } // -------------------- // Autophagy death for (var i = 1; i < snake.length; i++) { if (snake[0].x == snake[i].x && snake[0].y == snake[i].y) { showScreen(3); return; } } // -------------------- // Eat Food if (checkBlock(snake[0].x, snake[0].y, food.x, food.y)) { snake[snake.length] = { x: snake[0].x, y: snake[0].y }; score += 1; altScore(score); addFood(); activeDot(food.x, food.y); } // -------------------- ctx.beginPath(); ctx.fillStyle = "#000000"; ctx.fillRect(0, 0, canvas.width, canvas.height); // -------------------- for (var i = 0; i < snake.length; i++) { activeDot(snake[i].x, snake[i].y); } // -------------------- activeDot(food.x, food.y); // Debug //document.getElementById("debug").innerHTML = snake_dir + " " + snake_next_dir + " " + snake[0].x + " " + snake[0].y; setTimeout(mainLoop, snake_speed); } ///////////////////////////////////////////////////////////// var newGame = function() { showScreen(0); screen_snake.focus(); snake = []; for (var i = 4; i >= 0; i--) { snake.push({ x: i, y: 15 }); } snake_next_dir = 1; score = 0; altScore(score); addFood(); canvas.onkeydown = function(evt) { evt = evt || window.event; changeDir(evt.keyCode); } mainLoop(); } ///////////////////////////////////////////////////////////// // Change the snake speed... // 150 = slow // 100 = normal // 50 = fast var setSnakeSpeed = function(speed_value) { snake_speed = speed_value; } ///////////////////////////////////////////////////////////// var setWall = function(wall_value) { wall = wall_value; if (wall == 0) { screen_snake.style.borderColor = "#606060"; } if (wall == 1) { screen_snake.style.borderColor = "#FFFFFF"; } } ///////////////////////////////////////////////////////////// // 0 for the game // 1 for the main menu // 2 for the settings screen // 3 for the game over screen var showScreen = function(screen_opt) { switch (screen_opt) { case 0: screen_snake.style.display = "block"; screen_menu.style.display = "none"; screen_setting.style.display = "none"; screen_gameover.style.display = "none"; break; case 1: screen_snake.style.display = "none"; screen_menu.style.display = "block"; screen_setting.style.display = "none"; screen_gameover.style.display = "none"; break; case 2: screen_snake.style.display = "none"; screen_menu.style.display = "none"; screen_setting.style.display = "block"; screen_gameover.style.display = "none"; break; case 3: screen_snake.style.display = "none"; screen_menu.style.display = "none"; screen_setting.style.display = "none"; screen_gameover.style.display = "block"; break; } } ///////////////////////////////////////////////////////////// window.onload = function() { canvas = document.getElementById("snake"); ctx = canvas.getContext("2d"); // Screens screen_snake = document.getElementById("snake"); screen_menu = document.getElementById("menu"); screen_gameover = document.getElementById("gameover"); screen_setting = document.getElementById("setting"); // Buttons button_newgame_menu = document.getElementById("newgame_menu"); button_newgame_setting = document.getElementById("newgame_setting"); button_newgame_gameover = document.getElementById("newgame_gameover"); button_setting_menu = document.getElementById("setting_menu"); button_setting_gameover = document.getElementById("setting_gameover"); // etc ele_score = document.getElementById("score_value"); speed_setting = document.getElementsByName("speed"); wall_setting = document.getElementsByName("wall"); // -------------------- button_newgame_menu.onclick = function() { newGame(); }; button_newgame_gameover.onclick = function() { newGame(); }; button_newgame_setting.onclick = function() { newGame(); }; button_setting_menu.onclick = function() { showScreen(2); }; button_setting_gameover.onclick = function() { showScreen(2) }; setSnakeSpeed(150); setWall(1); showScreen("menu"); // -------------------- // Settings // speed for (var i = 0; i < speed_setting.length; i++) { speed_setting[i].addEventListener("click", function() { for (var i = 0; i < speed_setting.length; i++) { if (speed_setting[i].checked) { setSnakeSpeed(speed_setting[i].value); } } }); } // wall for (var i = 0; i < wall_setting.length; i++) { wall_setting[i].addEventListener("click", function() { for (var i = 0; i < wall_setting.length; i++) { if (wall_setting[i].checked) { setWall(wall_setting[i].value); } } }); } document.onkeydown = function(evt) { if (screen_gameover.style.display == "block") { evt = evt || window.event; if (evt.keyCode == 32) { newGame(); } } } } })(); </script> <style> ::selection { color: #FFFFFF; background: transparent; } ::-moz-selection { color: #FFFFFF; background: transparent; } * { margin: 0; padding: 0; font-family: "VT323"; } body { background-color: #000000; } .wrap { margin-left: auto; margin-right: auto; } header { width: 340px; font-size: 0; } canvas { display: none; border-style: solid; border-width: 10px; border-color: #FFFFFF; } canvas:focus { outline: none; } /* Top Styles */ h1 { display: inline-block; width: 100px; font-size: 32px; color: #FFFFFF; } .score { display: inline-block; width: 240px; font-size: 20px; color: #FFFFFF; text-align: right; } .score_value { font-size: inherit; } /* All screens style */ #gameover a, #setting a, #menu a { display: block; } #gameover a, #setting a:hover, #menu a:hover { cursor: pointer; } #gameover a:hover::before, #setting a:hover::before, #menu a:hover::before { content: ">"; margin-right: 10px; } /* Menu Screen Style */ #menu { display: block; width: 340px; padding-top: 95px; padding-bottom: 95px; font-size: 40px; margin-left: auto; margin-right: auto; text-align: center; color: #FFF; } #menu h2 { -webkit-animation: logo-ani 1000ms linear infinite; animation: logo-ani 1000ms linear infinite; margin-bottom: 30px; } #menu a { font-size: 30px; } @-webkit-keyframes logo-ani { 50% { -webkit-transform: scale(1.3, 1.3); } 100% { -webkit-transform: scale(1.0, 1.0); } } @keyframes logo-ani { 50% { transform: scale(1.3, 1.3); } 100% { transform: scale(1.0, 1.0); } } /* Game Over Screen Style */ #gameover { display: none; width: 340px; padding-top: 95px; padding-bottom: 95px; margin-left: auto; margin-right: auto; text-align: center; font-size: 30px; color: #FFF; } #gameover p { margin-top: 25px; font-size: 20px; } /* Settings Screen Style */ #setting { display: none; width: 340px; margin-left: auto; margin-right: auto; padding-top: 85px; padding-bottom: 85px; font-size: 30px; color: #FFF; text-align: center; } #setting h2 { margin-bottom: 15px; } #setting p { margin-top: 10px; } #setting input { display: none; } #setting label { cursor: pointer; } #setting input:checked+label { background-color: #FFF; color: #000; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <link href="https://fonts.googleapis.com/css2?family=VT323&display=swap" rel="stylesheet"> <header class="wrap"> <h1>Snake</h1> <p class="score">Score: <span id="score_value">0</span></p> </header> <canvas class="wrap" id="snake" width="600" height="600" tabindex="1"></canvas> <!-- Game Over Screen --> <div id="gameover"> <h2>Game Over</h2> <p>press <span style="background-color: #FFFFFF; color: #000000">space</span> to begin a</p> <a id="newgame_gameover">new game</a> <a id="setting_gameover">settings</a> </div> <!-- Setting screen --> <div id="setting"> <h2>Settings</h2> <a id="newgame_setting">new game</a> <p>Speed: <input id="speed1" type="radio" name="speed" value="120" checked/> <label for="speed1">Slow</label> <input id="speed2" type="radio" name="speed" value="75" /> <label for="speed2">Normal</label> <input id="speed3" type="radio" name="speed" value="35" /> <label for="speed3">Fast</label> </p> <p>Wall: <input id="wallon" type="radio" name="wall" value="1" checked/> <label for="wallon">On</label> <input id="walloff" type="radio" name="wall" value="0" /> <label for="walloff">Off</label> </p> </div> <!-- Main Menu Screen --> <div id="menu"> <h2>Snake</h2> <a id="newgame_menu">new game</a> <a id="setting_menu">settings</a> </div> </body> </html> 在构建时运行,除非您为 getStaticProps 使用 revalidate 标志或为 getStaticProps 使用 fallback 标志(在这种情况下,页面将被生成应要求)。