/javascript30

30 Javascript Projects - No Frameworks

Primary LanguageHTMLMIT LicenseMIT

Vanilla Javascript 30 Day Challenge - 30 Projects in 30 days

30 Days of Javascript Challenge - 30 JS Projects - Taught by wesbos

All projects have been implemented using vanilla HTML, CSS and Javascript - no frameworks.

PROJECT SHOWCASE

1. Javascript Drum Kit

  • Learning Points:
    • Attaching event listeners to specific keys
    • HTML audio

Javascript Drum Kit

2. Javascript and CSS Clock

  • Learning Points:
    • Javascript Datetimes
    • Rotational Mathematics
    • Animation Timing Functions

Javascript Clock

3. Changing CSS Variables with Javascript

  • Learning Points:
    • CSS Variables
    • Adding custom functions Sliders & Colour Pickers

Javascript and CSS Drum Kit

4. Array Cardio Day 1

  • Learning Points:
    • Popular array methods (forEach, map, filter, reduce, sort)

5. Flexbox Gallery

  • Learning Points:
    • Working with nested Flexbox Containers
    • Flex Basis with transitions

Flexbox Gallery

6. Type Ahead (Search Auto-Complete)

  • Learning Points:
    • Dynamic page updates
    • Implementing auto-completion search bars

Type Ahead

7. Array Cardio Day 2

  • Learning Points:
    • Other array methods (some, every, find, findIndex)

8. HTML Canvas

  • Learning Points:
    • HTML Canvas
    • Creating dynamic pens with Javascript

HTML Canvas

9. Must Know Dev Tools Tricks

  • Learning Points:
    • Several console logging tools (table, count, etc.)
    • Debugging in browser using breakpoints (by attribute or behaviours triggered via event listeners)

10. Shift Select

  • Learning Points:
    • Implementing shift select in forms

Shift Select

11. Custom Video Player

  • Learning Points:
    • Creating a video player from scratch
    • Adding custom video playing functions (full-screen, skips, playback speed, volume, etc)

Custom Video Player

12. Key Sequence Detection

  • Learning Points:
    • Using splice to limit array sizes while the items within shift

13. Slide and Scroll

  • Learning Points:
    • Working with page viewports
    • Image Animation & Transitions

Slide and Scroll

14. Objects and Arrays - Reference Vs Copy

  • Learning Points:
    • Differences between safe and unsafe object & array manipulations
    • Shallow and deep object copies
    • Several methods for copying arrays & objects

15. Utilising Local Browser Storage

  • Learning Points:
    • How to work with local storage for persistent states
    • Event Delegation
    • Preventing Default Behaviours in the browser

Local Storage

16. Mouse Move Text Shadow Effect

  • Learning Points:
    • Dynamic Page animation tracking mouse move
    • Dealing with mouse move behaviour over children elements

Mouse Move Text Effect 1 Mouse Move Text Effect 2

17. Sorting Band Names without articles/stopwords

  • Learning Points:
    • Writing custom sorting functions
    • Stripping strings with regular expressions

18. Tally String Times with Reduce

  • Learning Points:
    • Parsing and reducing time strings
    • Complex reduce functions

19. Unreal Webcam Fun

  • Learning Points:
    • Working with Media Devices to Access Webcam
    • Rendering Webcam to video elements via localMediaStream
    • Rendering webcam video to HTML Canvas
    • Applying filters to canvas webcam video (red filter, rbg split, green screen)
    • Implementing screencapturing and download functionality

Red Screen RGB Split Green Screen

20. Speech Recognition

  • Learning Points:
    • Working with microphone and built-in browser speech recognition software
    • Building a dictation app

Speech Recognition

21. Geolocation Based Speedometer and Compass

  • Learning Points:
    • Working with the iphone simulator in XCode
    • Capturing and displaying geolocation & compass and speedometer data

Geolocation Based Speedometer

22. Follow Along Links

  • Learning Points:
    • Identifying location of elements on the page using bounding rectangles
    • Resolving follow along operations via mathematical operations

Follow Along Links

23. Speech Synthesis

  • Learning Points:
    • Working with built-in browser speech synthesis and voice utterances
    • Method chaining on arrays (filter, map, find)
    • Passing callback functions with arguments to event listeners using the bind method

Speech Synthesis

24. Fixed Nav

  • Learning Points:
    • Fixed Positioning
    • Attaching classes to the parent elements which can then be used to toggle styles on child elements
    • Working with element offset heights and window.scrollY properties

Fixed Nav

25. Event Capture, Propogation, Bubbling and Once

  • Learning Points:
    • Differences between event capturing and bubbling when adding event listeners to elements
    • How to stop event listeners from bubbling events up
    • How to reverse the order of listening to events from bottom-up to top-down using the capture option.
    • How to un-bind event listeners from elements after an event is run once using once option.

Event Capture, Propogation, Bubbling and Once

26. Follow Along Nav

  • Learning Points:
    • Using event listeners to unhide/hide elements on the page
    • Handling hovers where area of hover should extend when new elements are shown (to prevent elements from being hidden immediately after)
    • Using bounding boxes and element offsets to resize and move background elements around - creating a follow along effect
    • Preventing brittle behaviours from occuring when using setTimeouts in event listeners (sometimes classes can be added and not removed in the same order that events have happened due to the usage of setTimeout in event listener callback functions)

Follow Along Nav

27. Drag and scroll

  • Learning Points:
    • Using event listeners to keep track of mouse states and position
    • Changing page content via mouse movement tracking and states

Drag and scroll

28. Video Playback Rate

  • Learning Points:
    • Adjusting playback rate using custom slider inputs

Video Playback Rate

29. Countdown Clock

  • Learning Points:
    • Drawbacks of using setIntervals globally
    • The need to reset setIntervals when they are called multiple times
    • Working with datetime objects to construct timers
    • Selecting elements from DOM using name properties and not query selectors

Countdown Clock

30. Whack a Mole

  • Learning Points:
    • Creating utility functions such as RandInt.
    • Recursive functions - If returning a repeated value - call yourself again.
    • Using SetIntervals to time the game
    • Preventing scores to add up if clicks are not genuine (not trusted).

Whack a Mole