01 июня 2022

πŸ—“οΈ JavaScript ΠΈ HTML: Π΄Π΅Π»Π°Π΅ΠΌ простой ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π·Π° 5 ΠΌΠΈΠ½ΡƒΡ‚

Π‘ΠΎΠ»Π΅Π΅ 7 Π»Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² IT-сфСрС. БистСмноС администрированиС, frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, написаниС скриптов Π½Π° Python.
БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ способов использования JS для вСбмастСра. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ калСндаря для Π²Π΅Π±-страницы. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ создадим Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTML, CSS ΠΈ JavaScript.
πŸ—“οΈ JavaScript ΠΈ HTML: Π΄Π΅Π»Π°Π΅ΠΌ простой ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π·Π° 5 ΠΌΠΈΠ½ΡƒΡ‚

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌΡΡ с цСлями

Для вСбмастСра Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся составлСниС Π’Π— для любой Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Π°ΠΆΠ΅ Ссли Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ планируСтся Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° собствСнном сайтС, pet-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ просто Π»Π°Π±Π΅, стоит ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Ρ†Π΅Π»ΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ этот Π²ΠΈΠ΄ΠΆΠ΅Ρ‚. Π’ зависимости ΠΎΡ‚ Ρ†Π΅Π»Π΅ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. ΠšΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ расписаниС ΠΈΠ»ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ событиях Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ дСнь ΠΈΠ»ΠΈ Π΄Π°Ρ‚Ρƒ. Помимо этого, ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π²Ρ‹Π±ΠΎΡ€Π° Π΄Π°Ρ‚Ρ‹ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ событий ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Π˜Ρ‚Π°ΠΊ, наш Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚:

  • ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅ΡΡΡ‡Π½ΡƒΡŽ сСтку для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ мСсяца;
  • ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ;
  • ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ мСсяца;
  • ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ мСсяцу;

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» довольно простой, Π½ΠΎ достаточный для дСмонстрации создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½Π° JavaScript для Π²Π΅Π±-страниц. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ функциями Π² ΠΊΠΎΠ΄Π΅ JS.

ΠšΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π½Π° JavaScript, HTML ΠΈ CSS
ΠšΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π½Π° JavaScript, HTML ΠΈ CSS

Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ калСндаря Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ написан ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° JavaScript, CSS ΠΈ HTML. Из Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Font Awesome CSS для клавиш Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΈΡ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° собствСнныС.

Бсылка Π½Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² Codepen https://codepen.io/sergejkravchen2/pen/abVqxGv

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° HTML

Π’ HTML Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Reset CSS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ HTML-элСмСнтов Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Font Awesome CSS для Π·Π½Π°Ρ‡ΠΊΠΎΠ², Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ссылки CDN Π² Ρ‚Π΅Π³ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° вашСй Π²Π΅Π±-страницы.

            <!-- Reset CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
    <!-- Font Awesome CSS  -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" rel="stylesheet" />  
    <!-- Calendar Style CSS -->
<link rel="stylesheet" href="scr/styles.css">

    

Нам Π½ΡƒΠΆΠ΅Π½ элСмСнт div, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ динамичСски. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ элСмСнт div с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса calendar-wrapper, размСститС ΠΊΠ½ΠΎΠΏΠΊΠΈ смСны мСсяца Β«ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ/ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉΒ» ΠΈ элСмСнт div с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ divCal.

        <div class="calendar-wrapper">
    <button id="btnPrev" type="button">ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ</button>
    <button id="btnNext" type="button">Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ</button>
<div id="divCal"></div>
</div>

    

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» .js, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

         <script src="js/index.js"></script>
    

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ HTML-структуру Π² любом мСстС вашСй Π²Π΅Π±-страницы/прилоТСния, Π³Π΄Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ калСндаря.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°Β»

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ стилСй CSS

ПослС создания ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π² HTML ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚ калСндаря. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ класс calendar-wrapper ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΈΠ½Ρƒ, поля, отступы ΠΈ свойства Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ собствСнный Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ.

        .calendar-wrapper {
  width: 360px;
  margin: 3em auto;
  padding: 2em;
  border: 1px solid #dcdcff;
  border-radius: 5px;
  background: #fff;
}
    

Ѐункция калСндаря Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Ρ‚Ρ‹, располоТСнныС Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚ калСндаря, Π²Ρ‹Π±Ρ€Π°Π² элСмСнт Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ стили ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² соотвСтствии с вашими потрСбностями.

        table {
  clear: both;
  width: 100%;
  border: 1px solid #dcdcff;
  border-radius: 3px;
  border-collapse: collapse;
  color: #444;
}
td {
  height: 48px;
  text-align: center;
  vertical-align: middle;
  border-right: 1px solid #dcdcff;
  border-top: 1px solid #dcdcff;
  width: 14.28571429%;
}
thead td {
  border: none;
  color: #28283b;
  text-transform: uppercase;
  font-size: 1.5em;
}
    

Класс not-current для элСмСнта td ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Ρ‚Ρ‹ Π² ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π΅. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ эти Π΄Π°Ρ‚Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство видимости CSS со «скрытым» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

        td.not-current {
  color: #c0c0c0;
}
    

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ today класс ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ стили CSS.

        td.today {
  font-weight: 700;
  color: #28283b;
  font-size: 1.5em;
}
    

Π’ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡ΠΎΠΊ Font Awesome Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π­Ρ‚ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π²Ρ‹Π±Ρ€Π°Π² ΠΈΡ… ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ собствСнный Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ Π·Π½Π°Ρ‡ΠΎΠΊ для этих ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² соотвСтствии с вашими потрСбностями.

        #btnPrev {
  float: left;
  margin-bottom: 20px;
}
#btnPrev:before {
  content: '\f104';
  font-family: FontAwesome;
  padding-right: 4px;
}
#btnNext {
  float: right;
  margin-bottom: 20px;
}
#btnNext:after {
  content: '\f105';
  font-family: FontAwesome;
  padding-left: 4px;
}
#btnPrev,
#btnNext {
  background: transparent;
  border: none;
  outline: none;
  font-size: 1em;
  color: #c0c0c0;
  cursor: pointer;
  font-family: sans-serif;
  text-transform: uppercase;
  transition: all 0.3s ease;
}
    

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ навСдСния для ΠΊΠ½ΠΎΠΏΠΎΠΊ Β«ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ/прСдыдущая».

        #btnPrev:hover,
#btnNext:hover {
  color: #28283b;
  font-weight: bold;
}
    

ДобавляСм JavaScript

На этом этапС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ JavaScript калСндаря Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ‚Π΅Π³Π° body.

        var Cal = function(divId) {
  //БохраняСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ div
  this.divId = divId;
  // Π”Π½ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ с понСдСльника
  this.DaysOfWeek = [
    'Пн',
    'Π’Ρ‚',
    'Π‘Ρ€',
    'Π§Ρ‚Π²',
    'ΠŸΡ‚Π½',
    'Π‘ΡƒΠ±',
    'Вск'
  ];
  // ΠœΠ΅ΡΡΡ†Ρ‹ начиная с января
  this.Months =['Π―Π½Π²Π°Ρ€ΡŒ', 'Π€Π΅Π²Ρ€Π°Π»ΡŒ', 'ΠœΠ°Ρ€Ρ‚', 'ΠΠΏΡ€Π΅Π»ΡŒ', 'Май', 'Июнь', 'Июль', 'Август', 'Π‘Π΅Π½Ρ‚ΡΠ±Ρ€ΡŒ', 'ΠžΠΊΡ‚ΡΠ±Ρ€ΡŒ', 'ΠΠΎΡΠ±Ρ€ΡŒ', 'Π”Π΅ΠΊΠ°Π±Ρ€ΡŒ'];
  //УстанавливаСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ мСсяц, Π³ΠΎΠ΄
  var d = new Date();
  this.currMonth = d.getMonth();
  this.currYear = d.getFullYear();
  this.currDay = d.getDate();
};
// ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ мСсяцу
Cal.prototype.nextMonth = function() {
  if ( this.currMonth == 11 ) {
    this.currMonth = 0;
    this.currYear = this.currYear + 1;
  }
  else {
    this.currMonth = this.currMonth + 1;
  }
  this.showcurr();
};
// ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ мСсяцу
Cal.prototype.previousMonth = function() {
  if ( this.currMonth == 0 ) {
    this.currMonth = 11;
    this.currYear = this.currYear - 1;
  }
  else {
    this.currMonth = this.currMonth - 1;
  }
  this.showcurr();
};
// ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ мСсяц
Cal.prototype.showcurr = function() {
  this.showMonth(this.currYear, this.currMonth);
};
// ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ мСсяц (Π³ΠΎΠ΄, мСсяц)
Cal.prototype.showMonth = function(y, m) {
  var d = new Date()
  // ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ дСнь Π½Π΅Π΄Π΅Π»ΠΈ Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ мСсяцС 
  , firstDayOfMonth = new Date(y, m, 7).getDay()
  // ПослСдний дСнь Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ мСсяца
  , lastDateOfMonth =  new Date(y, m+1, 0).getDate()
  // ПослСдний дСнь ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ мСсяца
  , lastDayOfLastMonth = m == 0 ? new Date(y-1, 11, 0).getDate() : new Date(y, m, 0).getDate();
  var html = '<table>';
  // Π—Π°ΠΏΠΈΡΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ мСсяца ΠΈ Π³ΠΎΠ΄Π°
  html += '<thead><tr>';
  html += '<td colspan="7">' + this.Months[m] + ' ' + y + '</td>';
  html += '</tr></thead>';
  // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ
  html += '<tr class="days">';
  for(var i=0; i < this.DaysOfWeek.length;i++) {
    html += '<td>' + this.DaysOfWeek[i] + '</td>';
  }
  html += '</tr>';
  // ЗаписываСм Π΄Π½ΠΈ
  var i=1;
  do {
    var dow = new Date(y, m, i).getDay();
    // ΠΠ°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку Π² понСдСльник
    if ( dow == 1 ) {
      html += '<tr>';
    }
    // Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ дСнь Π½Π΅Π΄Π΅Π»ΠΈ Π½Π΅ понСдСльник ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ послСдниС Π΄Π½ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ мСсяца
    else if ( i == 1 ) {
      html += '<tr>';
      var k = lastDayOfLastMonth - firstDayOfMonth+1;
      for(var j=0; j < firstDayOfMonth; j++) {
        html += '<td class="not-current">' + k + '</td>';
        k++;
      }
    }
    // ЗаписываСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ дСнь Π² Ρ†ΠΈΠΊΠ»
    var chk = new Date();
    var chkY = chk.getFullYear();
    var chkM = chk.getMonth();
    if (chkY == this.currYear && chkM == this.currMonth && i == this.currDay) {
      html += '<td class="today">' + i + '</td>';
    } else {
      html += '<td class="normal">' + i + '</td>';
    }
    // Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ строку Π² Π²ΠΎΡΠΊΡ€Π΅ΡΠ΅Π½ΡŒΠ΅
    if ( dow == 0 ) {
      html += '</tr>';
    }
    // Если послСдний дСнь мСсяца Π½Π΅ Π²ΠΎΡΠΊΡ€Π΅ΡΠ΅Π½ΡŒΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ мСсяца
    else if ( i == lastDateOfMonth ) {
      var k=1;
      for(dow; dow < 7; dow++) {
        html += '<td class="not-current">' + k + '</td>';
        k++;
      }
    }
    i++;
  }while(i <= lastDateOfMonth);
  // ΠšΠΎΠ½Π΅Ρ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
  html += '</table>';
  // ЗаписываСм HTML Π² div
  document.getElementById(this.divId).innerHTML = html;
};
// ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΠΊΠ½Π°
window.onload = function() {
  // ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ
  var c = new Cal("divCal");			
  c.showcurr();
  // ΠŸΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉΒ» ΠΈ Β«ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉΒ»
  getId('btnNext').onclick = function() {
    c.nextMonth();
  };
  getId('btnPrev').onclick = function() {
    c.previousMonth();
  };
}
// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΏΠΎ id
function getId(id) {
  return document.getElementById(id);
}
    

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄. НазначСниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция калСндаря.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Ну Π²ΠΎΡ‚ ΠΌΡ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ наш ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ. Π­Ρ‚ΠΎ довольно простой, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования JS Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ написан Π½Π° чистом JS. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Font Awesome CSS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ вСсь внСшний ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ повлияСт Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π». ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π½Π° усмотрСниС, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» калСндаря Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° вашС усмотрСниС.

Бсылка Π½Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² codepen https://codepen.io/sergejkravchen2/pen/abVqxGv

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ:

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠœΠ•Π ΠžΠŸΠ Π˜Π―Π’Π˜Π―

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•