30-Day Vanilla JS Coding Challenge

8th of January to 6th of February 2024

Day 1 - JavaScript Drum Kit

  • forEach()
  • play()
  • Day 2 - CSS + JS Clock

  • setInterval
  • seconds / mins / hour
  • Day 3 - Playing with CSS Variables and JS

  • handleUpdate
  • setProperty()
  • Day 4 - Array Cardio

  • Array.prototype.reduce()
  • Array.prototype.map()
  • Day 5 - Flex Panels Image Gallery

  • classList.toggle()
  • toggleActive() function
  • Day 6 - Ajax Type Ahead

  • fetch
  • map
  • innerHTML
  • Day 7 - Array Cardio Day 2

  • Array slicing
  • Array.prototype.findIndex()
  • Day 8 - Fun with HTML5 Canvas

  • offset
  • canva
  • Day 9 - 14 Must Know Dev Tools Tricks

  • Error Logging
  • console.
  • Day 10 - Hold Shift to Check Multiple Checkboxes

  • Shift Key Detection
  • lastChecked
  • Day 11 - Custom HTML5 Video Player

  • handleRangeUpdate
  • togglePlay`
  • Day 12 - Key Sequence Detection (KONAMI CODE)

  • secretCode
  • cornify_add()
  • Day 13 - Slide In on Scroll

  • debounce
  • window.scrollY
  • Day 14 - Object and Arrays - Reference VS Copy

  • slice()
  • JSON.parse(JSON.stringify())
  • Day 15 - LocalStorage and Event Delegation

  • preventDefault
  • local storage
  • Day 16 - CSS Text Shadow Mouse Move Effect

  • Math.round()
  • shadow(e)
  • Day 17 - Sorting Band Names without articles

  • replace()
  • join()
  • Day 18 - Tally String Times with Reduce

  • parseFloat()
  • Array.prototype.split()
  • Day 19 - Unreal Webcam Fun

  • getContext
  • getImageData
  • Day 20 - Native Speech Recognition

  • window.SpeechRecognition
  • words.appendChild(p)
  • Day 21 - Geolocation based Speedometer and Compass

  • data.coords.heading
  • navigator.geolocation.watchPosition
  • Day 22 - Follow Along Links

  • console.log(linkCoords)
  • highlight.style.transform
  • Day 23 - Speech Synthesis

  • populateVoices()
  • speechSynthesis.addEventListener
  • Day 24 - Sticky Nav

  • nav.offsetTop
  • fixNav()
  • Day 25 - Event Capture, Propagation, Bubbling and Once

  • addEventListener capture
  • addEventListener once
  • Day 26 - Stripe Follow Along Dropdown

  • getBoundingClientRect
  • classList.remove
  • Day 27 - Click and Drag to Scroll

  • classList.remove
  • mouseleave
  • Day 28 - Video Speed Controller UI

  • video.playbackRate
  • Math.round()
  • Day 29 - Countdown Clock

  • Date.now()
  • clearInterval(intervalID)
  • Math.round
  • Day 30 - Whack A Mole Game

  • Math.random()
  • setTimeout()
  • Virtual Bullet Journal

    Each day of the challenge, I update one of these squares to be "painted" whenever I finish a challenge.

    Day 1
    Day 2
    Day 3
    Day 4
    Day 5
    Day 6
    Day 7
    Day 8
    Day 9
    Day 10
    Day 11
    Day 12
    Day 13
    Day 14
    Day 15
    Day 16
    Day 17
    Day 18
    Day 19
    Day 20
    Day 21
    Day 22
    Day 23
    Day 24
    Day 25
    Day 26
    Day 27
    Day 28
    Day 29
    Day 30