рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдкрд╛рдареНрдпрдХреНрд░рдо "рдлреБрд▓рд╕реНрдЯреИрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░" рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ , рд╣рдорд╛рд░реЗ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЯрдЪ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рдо, рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЬ рдЗрд╕рдХрд╛ рдЕрдВрддрд┐рдо рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рднрд╛рдЧ
рдпрд╣рд╛рдБ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИредрд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рд╣рдо рджреЗрд╢реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреЗрд╢реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рддрд░реНрдХ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдВрдЯрд░ рдХреБрдВрдЬреА рджрдмрд╛рдХрд░, рдмреАрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдкрд╣рд▓рд╛ рд╕реНрддрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рдЯрдЪ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдзреНрдпрдпрди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЗ, рдХреЗ, рдПрдл, рдбреА)ред рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рдордХрд╛рдЬреА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрдп рд╣реИрдВред

рдЖрдЗрдП рдЯреАрдУрдЖрд░ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
тАЬрдЧреЗрдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрдирд╡рд╛рдЗрдЯ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХреА рдУрд░ рдПрдирд┐рдореЗрдЯреЗрдб рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╣реА рдмрдЯрди рджрдмрд╛рдХрд░, рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЧреЗрдо рд╕рд┐рдЧреНрдирд▓ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдЧреЗрдо рд╕рд┐рдЧреНрдирд▓ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рддреАрдХ рд╣реИрдВ, рддреАрд╕рд░реЗ рд╕реНрддрд░ рдореЗрдВ рдмреЛрдирд╕ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреАрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ (рдмрд▓реНрдХрд┐ рд╣рд╛рд╕реНрдп) рдХреЗ рд▓рд┐рдП рд╣реИрдВред рд╕реНрддрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдВрдбреЛ рд╣реИ рдЬрд┐рд╕реЗ localStorage
рд╕реЗ рд▓рд┐рдЦрд╛ рдФрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдВрдбреЛ рдкреНрд▓реЗрдпрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЧреЗрдо рд╕рддреНрд░ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдордп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рд╕рдлрд▓ рд╕рдВрдХреНрд░рдордг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдиреБрдХрд╕рд╛рди рдХреА рдЖрд╡рд╛рдЬ рдмрдЬрд╛рдИ рдЬрд╛рддреА рд╣реИ - рдПрдХ рдкреНрд░рдореБрдЦ рд░рд╛рдЧред "рдареАрдХ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ TK рд╣реИ, рдЪрд▓реЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдорд╛рд░реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
webpack
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд▓реЗрдЖрдЙрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВред рдореИрдВ
head
рдХреА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╡рд╣рд╛рдВ рдмрджрд▓ рдЧрдИ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо
dist/code.js
рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд
dist/code.js
рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛
dist/code.js
ред
рдкреГрд╖реНрда рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝реА рдЬреЛ рдЕрднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╣рдо
table
рдореЗрдВ рдЧреЗрдо рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ:
<body class="has-background-black-bis"> <div class="modal"> <div class="modal-background has-background-link"></div> <div class="modal-content has-background-white"> <h3 class="is-size-4"> </h3> <table class="table"> <thead> <tr> <th> </th> <th> </th> </tr> </thead> <tbody> <tr class="target_error"> </tr> </tbody> </table> <div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div>
рдмреЗрд╢рдХ, рдЗрд╕ рддрдереНрдп рдкрд░ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рд╕рд╣реА рд╣реЛрдЧреА, рд╕реНрдкрд╛ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╢рд╛рд░реАрд░рд┐рдХ рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ - рдЪреМрдЦрдЯреЗ (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдпрд╣ рд╕рдм рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреА рдкреАрдврд╝реА рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЖрдЗрдП рд╣рдорд╛рд░реЗ html рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ:
<section class="hero is-primary is-large"> <div class="hero-head container"> <h1 class="label is-size-4 has-text-white promo"> 3000</h1> <h3 class="label is-size-4 has-text-danger has-text-centered name-level"></h3> <div class="error-panel is-hidden"> <progress id="prog" class="progress is-danger" value="0" max="20"> </progress> </div> </div> <div class="hero-body has-background-black-bis main-board"> <div id="columns"> <h3 class="label is-size-2 has-text-white has-text-centered begin anim-elem">Press Enter to Start</h3> <div class="buttons columns is-half is-centered"> </div> </div> </div> </section> </body>
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕реЗ рдХреЗрд╡рд▓ рддреАрди рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИрдВ: рдЕрдм рдЙрд╕ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬреЗрдПрд╕ рд╕реЗ рднрд░ рджреЗрдВрдЧреЗ, рддреНрд░реБрдЯрд┐ рдкреИрдирд▓ рд╢реБрд░реВ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо рд╣реА рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдмрд╕ JS рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рд╕реАрдПрд╕рдПрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЛ рдореИрдВ
Bulma
рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЙрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
Bulma
:
body{ max-height:40vh !important; } .promo{ margin-top: 1rem; }
рдареАрдХ рд╣реИ рдЬреЗ рдПрд╕ рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡реЗрдмрдкреИрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд┐рдЦрд╛ рд╣реИред
webpack
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдЬреЛ рд╣реИ, рд╡рд╣ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдореБрдЦреНрдп
index.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдПрдХ рдЫреЛрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
const path = require("path"); module.exports = { entry: './js/index.js', output: { filename: 'code.js', path: path.resolve(__dirname, 'dist'), }, watch: true, }
рдорд╣рд╛рди, рдФрд░ рдЕрдм рд╣рдо рдЬреЗрдПрд╕ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
anime.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдХреА рдорд╛рддреНрд░рд╛ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ 10 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рдПрдирд┐рдореЗрд╢рди рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреВрд░реЗ
anime.es.js
рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ред
anime.es.js
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдлрд╝рд╛рдЗрд▓ рдкреАрдврд╝реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ - рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП:
export default function getRandomInt(max) { return Math.floor(Math.random() * Math.floor(max)); }
рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
showResult
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреВрд░реЗ рдЧреЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рд▓рдЧрд╛ рдерд╛ред рдпрд╣ рдПрдХ рд╕реБрдВрджрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ
localStorage
рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦреА рдЬрд╛рдПрдЧреА рдФрд░ рдмрд╕ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рджреВрд╕рд░рд╛ - рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдЬрд┐рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ
localStorage
рд╕реЗ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреАрдЬрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рдЯреЗрдмрд▓ рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдо рд╢рдмреНрдж, рдЕрдзрд┐рдХ рдХреЛрдб:
export default function showResult(target_El, content){ localStorage.setItem(+new Date, content); (function drawOnLoad() { let temp_arr = []; for (let i = 0; i < localStorage.length; i++) { temp_arr.push(+localStorage.key(i)); } temp_arr.sort(); for(let i = 0; i< temp_arr.length; i++){ let item_time = new Date(temp_arr[i]); target_El.insertAdjacentHTML('afterend', `<th>${item_time.getDate()} / ${item_time.getMonth()} ${item_time.getHours()} : ${item_time.getMinutes()} </th> <th> ${localStorage.getItem(String(temp_arr[i]))}</th> `); } })(); }
рдорд╣рд╛рди, рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдо рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╣рдо рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:
import anime from "./anime.es"; import getRandomInt from "./random"; import showResult from "./showResult";
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рд╛рдкреНрдд рд╣реБрдПред рдЪрд▓рд┐рдП рд╢реБрд░реВ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдЖрдордВрддреНрд░рд┐рдд рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХрд╛ рдПрдХ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ:
anime({ targets: ".anim-elem", translateX: [-50, 50], easing: "linear", direction: "alternate", duration: 1000, loop: true });
рд╕реБрдкрд░! рдЕрдВрдд рдореЗрдВ, рдЖрд╡реЗрджрди рд╣реАред рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ
json
рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЦреЗрд▓ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдВрдЧреЗрд░рд┐рдпрди, рд░реВрд╕реА рдпрд╛ рд╕рд░рд▓реАрдХреГрдд рдЪреАрдиреА рдореЗрдВ - рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд░реНрдгреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реЗрдЯ рдХреЗ рд╕рд╛рде (рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╡рд┐рдХрд╕рд┐рдд)ред
fetch
рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЦреБрдж рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдореИрдВрдиреЗ JSON рдХреЛ
gist.github
(
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
function get_data() { fetch(
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╛рдардХ рдкрд╣рд▓реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ
read_data
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдп рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдмрд╛рдХреА рдХреЛрдб рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗ:
var number_of_level = 0; // 0 var error_sound = new Audio("sounds/error_sound.wav"); var fail_sound = new Audio("sounds/fail_sound.wav"); // var press_sound = new Audio("sounds/press_sound.wav"); var succes_sound = new Audio("sounds/succes_sound.wav"); // .
рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдореБрдлреНрдд рдмреИрдВрдХреЛрдВ рдореЗрдВ 8-рдмрд┐рдЯ рдзреНрд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рдЖрдЗрдП рдЕрдм рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдореБрдЭреЗ DOM рдЯреНрд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВ:
let modal = document.querySelector(".modal");
рдЗрд╕рдХреЗ рдмрд╛рдж рдЧреЗрдо рдХрд╛ рд╕реНрдЯрд╛рд░реНрдЯ рдлрдВрдХреНрд╢рди рдЖрддрд╛ рд╣реИред рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдиреЗ рдЙрд╕реЗ рднреА рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ - рдЕрдм рд╣рдорд╛рд░рд╛ рддреНрд░реБрдЯрд┐ рдкреИрдирд▓ рдХреЗрд╡рд▓ рдЧреЗрдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдПрдХ рдХреНрд▓рд┐рдХ рд╕рд╛рдЙрдВрдб рдмрдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдордВрддреНрд░рдг рд╢рд┐рд▓рд╛рд▓реЗрдЦ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЫрд┐рдкрддрд╛ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рд╣рдордиреЗ рдкреГрд╖реНрда рдкрд░ рдЕрджреГрд╢реНрдп рддрддреНрд╡ рдХрд╛ рдПрдиреАрдореЗрд╢рди рдЦреЗрд▓рд╛ рд╣реЛрдЧрд╛) , рдФрд░ рдлрд┐рд░ рдореБрдЦреНрдп рдЦреЗрд▓ рд╕рдорд╛рд░реЛрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
function StartGame(e) { if (e.key == "Enter") { error_panel.classList.remove("is-hidden");
рдареАрдХ рд╣реИ, рдЕрдЧрд▓реЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдбреНрд░рд╛рдЗрдВрдЧ рдЖрддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рднреА рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддреЗ рд╣реИрдВ:
function drawBoard(info) { let str_arr = info.level_info[number_of_level].symbols; // - , webpack, .... name_level.innerHTML = info.level_info[number_of_level].name_level; let col_arr = info.symbol_colors; for (let i = 0; i < 20; i++) { // 20 let rand = getRandomInt(str_arr.length); buttons.insertAdjacentHTML( "afterbegin", `<button class='game-button button is-large ${col_arr[rand]}' id='${str_arr[rand]}'> ${str_arr[rand]}</button>` ); } }
рдЕрдЧрд▓рд╛, рд╣рдо JSON рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдЧреЗрдо рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЕрднреА рднреА рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рд╣реИ:
function mainGame() { drawBoard(information); document.addEventListener("keydown", press);
рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди
press
рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдиреБрдХрд╕рд╛рди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреАрддрддреЗ рд╣реИрдВред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХреАрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╣рд╛рд░ рдЧрдпрд╛, рдФрд░ рд╡рд╣ рдзреБрди рдмрдЬрд╛рдПрдВ рдЬреЛ "рдлрд┐рдпрд╛рд╕реНрдХреЛ" рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╕реНрддрд░ рдХрд╛ рдПрдХ рд╕рдлрд▓ рдЕрдВрдд рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЪрд░
count_right
рдЙрди рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ (20)ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм
elements_arr
рдХреА
elements_arr
рд╕рд░рдгреА 0 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕рднреА рддреАрди рд╕реНрддрд░реЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдмреЛрд░реНрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
var errors_count = 0; var count_right = 0; function press(e) { let elements_arr = document.querySelectorAll(".game-button"); // if (e.key == elements_arr[0].id) { // querySelector, elements_arr[0].remove(); count_right++; // press_sound.play(); } else { errors_count++; // error_sound.play(); progress.value = errors_count; // if (errors_count > 20) { // , fail_sound.play(); // name_level.innerHTML = ' !'; setTimeout(() => { window.location.reload(); // }, 2500); } } if (count_right == 20) { count_right = 0; number_of_level++; if (number_of_level == 3) { // 3 modal.classList.add("is-active"); // showResult(target_error, errors_count); modal_close.onclick = async function() { modal.classList.remove("is-active"); window.location.reload(); //, , }; } succes_sound.play(); mainGame(); } } } // ,
рдпрд╣ рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реИред рдпрджрд┐ рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ
рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЦреЗрд▓рдирд╛ рдФрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рдпрд╣рд╛рдВ рд╕реНрд╡рд╛рдЧрдд
рд╣реИ ред рдХреГрдкрдпрд╛ рд╕рднреА рдХреАрдбрд╝реЗ рдФрд░ рдкреНрд░рд╢реНрди рдпрд╛ рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдпрд╛ рддреБрд░рдВрдд рдЧрд┐рддреБрдм рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ
issues
рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдХреБрдЫ рдордЬрд╝реЗрджрд╛рд░ рдПрдирд┐рдореЗрд╢рди рд╣реИрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕рдВрдЧреАрдд (рдпрд╛ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд╛рд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрджреНрд░рдг рдХрд░рддреЗ рд╕рдордп рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд╛рдЬрд╝реЗрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЖрдк рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рдЧрддрд┐ рдореЛрдб рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рддрд╛рдХрд┐ рдЖрдк рд╕рдордп рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдЯреАрдХрддрд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХреЗрдВред рдореИрдВ рд╕реНрддрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреАрдмреЛрд░реНрдб рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рдЧрд╛ рд╕рдХреЗ рдФрд░ рддреИрдпрд╛рд░ рд╣реЛ рд╕рдХреЗред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ (рд╕рд╛рде рд╣реА рд░рд┐рдПрдХреНрдЯ рдпрд╛ рд╡реАрдпреВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрд╡рд╛рдж), рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣реИрдмрд░реЛрд╡рд╕реНрдХ рд▓реЛрдЧ рднреА рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!
рдЦреИрд░, рд╣рдо
рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рд╕рднреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!