From 4e3128e6d0c50f8f33c34dfe7b5a8cf5ab27a924 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sat, 10 Dec 2016 15:24:11 -0800 Subject: [PATCH 01/15] Completed exercise 01 --- 01 - JavaScript Drum Kit/index.html | 38 +++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/01 - JavaScript Drum Kit/index.html b/01 - JavaScript Drum Kit/index.html index 246639f990..ca05ce2b70 100644 --- a/01 - JavaScript Drum Kit/index.html +++ b/01 - JavaScript Drum Kit/index.html @@ -59,23 +59,31 @@ From dd3058bfc4e40f2a59f81e39bf8101ab34f79483 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sun, 11 Dec 2016 15:45:14 -0800 Subject: [PATCH 02/15] Completed exercise 02 --- 02 - JS + CSS Clock/index.html | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/02 - JS + CSS Clock/index.html b/02 - JS + CSS Clock/index.html index 1c777557da..0d5f5b9736 100644 --- a/02 - JS + CSS Clock/index.html +++ b/02 - JS + CSS Clock/index.html @@ -61,36 +61,36 @@ background:black; position: absolute; top:50%; - transform-origin: 100%; + transform-origin:right; /*same as transform-origin:100%. Use values over 100% to transfrom about a point off the object*/ transform: rotate(90deg); transition: all 0.05s; - transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1); + transition-timing-function: cubic-bezier(0, 2.7, 0.58, 1); } - - + From 2afb628d2bf9097db02389affc76ef73419f17d8 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Mon, 12 Dec 2016 19:09:59 -0800 Subject: [PATCH 03/15] Half done --- 03 - CSS Variables/index.html | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 03 - CSS Variables/index.html diff --git a/03 - CSS Variables/index.html b/03 - CSS Variables/index.html new file mode 100644 index 0000000000..d2cc360843 --- /dev/null +++ b/03 - CSS Variables/index.html @@ -0,0 +1,86 @@ + + + + + Scoped CSS Variables and JS + + +

Update CSS Variables with JS

+ +
+ + + + + + + + +
+ + + + + + + + + From 7b44e9099d9042eecc2661d25d555ab83093bc32 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Mon, 12 Dec 2016 19:26:45 -0800 Subject: [PATCH 04/15] Completed exercise 03 --- 03 - CSS Variables/index.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/03 - CSS Variables/index.html b/03 - CSS Variables/index.html index d2cc360843..c9957f1881 100644 --- a/03 - CSS Variables/index.html +++ b/03 - CSS Variables/index.html @@ -13,6 +13,7 @@

Update CSS Variables with JS

+ @@ -75,10 +76,12 @@

Update CSS Variables with JS

const inputs = document.querySelectorAll(".controls input"); function handleUpdate() { - console.log(this.value); + const suffix = this.dataset.sizing || ''; + document.documentElement.style.setProperty(`--${this.name}`, this.value + suffix) } - inputs.forEach (input => input.addEventListener('change', handleUpdate)); + inputs.forEach (input => input.addEventListener('change', handleUpdate)); /*updates when you let go*/ + inputs.forEach (input => input.addEventListener('mousemove', handleUpdate)); /*changes when moved*/ From 7619c73ccc18d1b20b77bf5403de7c9668117c9b Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Wed, 14 Dec 2016 13:04:22 -0800 Subject: [PATCH 05/15] Completed exercise 04 --- 04 - Array Cardio Day 1/index.html | 115 +++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 04 - Array Cardio Day 1/index.html diff --git a/04 - Array Cardio Day 1/index.html b/04 - Array Cardio Day 1/index.html new file mode 100644 index 0000000000..f8052f419b --- /dev/null +++ b/04 - Array Cardio Day 1/index.html @@ -0,0 +1,115 @@ + + + + + Array Cardio 💪 + + + + + From 6408a9ade32d2b9f3a435981593c30cd06478bda Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Wed, 14 Dec 2016 13:45:45 -0800 Subject: [PATCH 06/15] Completed exercise 05 --- 05 - Flex Panel Gallery/index.html | 158 +++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 05 - Flex Panel Gallery/index.html diff --git a/05 - Flex Panel Gallery/index.html b/05 - Flex Panel Gallery/index.html new file mode 100644 index 0000000000..a224b0ae15 --- /dev/null +++ b/05 - Flex Panel Gallery/index.html @@ -0,0 +1,158 @@ + + + + + Flex Panels 💪 + + + + + + +
+
+

Hey

+

Let's

+

Dance

+
+
+

Give

+

Take

+

Receive

+
+
+

Experience

+

It

+

Today

+
+
+

Give

+

All

+

You can

+
+
+

Life

+

In

+

Motion

+
+
+ + + + + + + From 54691f636398cf3f0130029d0daa77c9e93173c0 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sat, 17 Dec 2016 16:53:01 -0800 Subject: [PATCH 07/15] Finished exercise 06 --- 06 - Type Ahead/index.html | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 06 - Type Ahead/index.html diff --git a/06 - Type Ahead/index.html b/06 - Type Ahead/index.html new file mode 100644 index 0000000000..1a17ca4b85 --- /dev/null +++ b/06 - Type Ahead/index.html @@ -0,0 +1,65 @@ + + + + + Type Ahead 👀 + + + + +
+ +
    +
  • Filter for a city
  • +
  • or a state
  • +
+
+ + + From 77441c99017513e5b1f50469121c47362ff9f927 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sat, 17 Dec 2016 16:54:14 -0800 Subject: [PATCH 08/15] Completed exercise 06 --- 06 - Type Ahead/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/06 - Type Ahead/index.html b/06 - Type Ahead/index.html index 1a17ca4b85..56954a3c2c 100644 --- a/06 - Type Ahead/index.html +++ b/06 - Type Ahead/index.html @@ -62,4 +62,4 @@ - + \ No newline at end of file From d883f1255a86aee068cd956db7d053c3eb990071 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sat, 17 Dec 2016 16:57:50 -0800 Subject: [PATCH 09/15] Made start of 07 a true start --- 07 - Array Cardio Day 2/index-START.html | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/07 - Array Cardio Day 2/index-START.html b/07 - Array Cardio Day 2/index-START.html index bdf6c44415..8b161f1359 100644 --- a/07 - Array Cardio Day 2/index-START.html +++ b/07 - Array Cardio Day 2/index-START.html @@ -30,37 +30,18 @@ // if(currentYear - person.year >= 19) { // return true; // } - // }); + // });console.log({isAdult}); - const isAdult = people.some(person => ((new Date()).getFullYear()) - person.year >= 19); - - console.log({isAdult}); // Array.prototype.every() // is everyone 19? - const allAdults = people.every(person => ((new Date()).getFullYear()) - person.year >= 19); - console.log({allAdults}); - // Array.prototype.find() // Find is like filter, but instead returns just the one you are looking for // find the comment with the ID of 823423 - - const comment = comments.find(comment => comment.id === 823423); - - console.log(comment); - // Array.prototype.findIndex() // Find the comment with this ID // delete the comment with the ID of 823423 - const index = comments.findIndex(comment => comment.id === 823423); - console.log(index); - - // comments.splice(index, 1); - const newComments = [ - ...comments.slice(0, index), - ...comments.slice(index + 1) - ]; From 6a9778715907b30cb7431f29830d43772e896f62 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sat, 17 Dec 2016 17:14:53 -0800 Subject: [PATCH 10/15] Completed exercise 07 --- 07 - Array Cardio Day 2/index-START.html | 6 -- 07 - Array Cardio Day 2/index.html | 84 ++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 07 - Array Cardio Day 2/index.html diff --git a/07 - Array Cardio Day 2/index-START.html b/07 - Array Cardio Day 2/index-START.html index 8b161f1359..1c3953d811 100644 --- a/07 - Array Cardio Day 2/index-START.html +++ b/07 - Array Cardio Day 2/index-START.html @@ -25,12 +25,6 @@ // Some and Every Checks // Array.prototype.some() // is at least one person 19? - // const isAdult = people.some(function(person) { - // const currentYear = (new Date()).getFullYear(); - // if(currentYear - person.year >= 19) { - // return true; - // } - // });console.log({isAdult}); // Array.prototype.every() // is everyone 19? diff --git a/07 - Array Cardio Day 2/index.html b/07 - Array Cardio Day 2/index.html new file mode 100644 index 0000000000..2c8a57bea1 --- /dev/null +++ b/07 - Array Cardio Day 2/index.html @@ -0,0 +1,84 @@ + + + + + Document + + + + + From a968d3fcd1dfc10df2353ae47f3b4e6277337d01 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sun, 18 Dec 2016 20:50:42 -0800 Subject: [PATCH 11/15] Completed exercise 08 --- 08 - Fun with HTML5 Canvas/index.html | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 08 - Fun with HTML5 Canvas/index.html diff --git a/08 - Fun with HTML5 Canvas/index.html b/08 - Fun with HTML5 Canvas/index.html new file mode 100644 index 0000000000..8b1d3379ad --- /dev/null +++ b/08 - Fun with HTML5 Canvas/index.html @@ -0,0 +1,77 @@ + + + + + HTML5 Canvas + + + + + + + + + From d9e29cbfdde8436e4f684778a927ef1ecbb7726a Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Sun, 18 Dec 2016 21:13:37 -0800 Subject: [PATCH 12/15] Completed exercise 09 --- 09 - Dev Tools Domination/index.html | 85 ++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 09 - Dev Tools Domination/index.html diff --git a/09 - Dev Tools Domination/index.html b/09 - Dev Tools Domination/index.html new file mode 100644 index 0000000000..82ec6f2c5b --- /dev/null +++ b/09 - Dev Tools Domination/index.html @@ -0,0 +1,85 @@ + + + + + Console Tricks! + + + +

×BREAK×DOWN×

+ + + + From 27eb70d1503dda290afd19f59f5b4c7f1ff34530 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Mon, 19 Dec 2016 18:15:47 -0800 Subject: [PATCH 13/15] Completed exercise 10 --- .../index.html | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 10 - Hold Shift and Check Checkboxes/index.html diff --git a/10 - Hold Shift and Check Checkboxes/index.html b/10 - Hold Shift and Check Checkboxes/index.html new file mode 100644 index 0000000000..27e32e926b --- /dev/null +++ b/10 - Hold Shift and Check Checkboxes/index.html @@ -0,0 +1,137 @@ + + + + + Document + + + + +
+
+ +

This is an inbox layout.

+
+
+ +

Check one item

+
+
+ +

Hold down your Shift key

+
+
+ +

Check a lower item

+
+
+ +

Everything inbetween should also be set to checked

+
+
+ +

Try do it with out any libraries

+
+
+ +

Just regular JavaScript

+
+
+ +

Good Luck!

+
+
+ +

Don't forget to tweet your result!

+
+
+ + + + From 6c2af157ef9d2141200c649bcf10cf1576b2d4ff Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Thu, 2 Feb 2017 11:03:33 -0800 Subject: [PATCH 14/15] Completed exercises 11 through --- 11 - Custom Video Player/scripts-START.js | 0 11 - Custom Video Player/scripts.js | 59 +++++ 11 - Custom Video Player/style.css | 2 +- 12 - Key Sequence Detection/index.html | 25 ++ 13 - Slide in on Scroll/index-START.html | 22 +- 13 - Slide in on Scroll/index.html | 140 ++++++++++ .../index.html | 101 +++++++ 15 - LocalStorage/index-START.html | 3 - 15 - LocalStorage/index.html | 79 ++++++ 16 - Mouse Move Shadow/index.html | 67 +++++ 17 - Sort Without Articles/index.html | 59 +++++ 18 - Adding Up Times with Reduce/index.html | 207 +++++++++++++++ 19 - Webcam Fun/index.html | 4 +- 19 - Webcam Fun/scripts-START.js | 5 + 19 - Webcam Fun/scripts.js | 95 +++++++ 20 - Speech Detection/index.html | 84 ++++++ 21 - Geolocation/index-START.html | 11 - 21 - Geolocation/index.html | 74 ++++++ 22 - Follow Along Link Highlighter/index.html | 50 ++++ 23 - Speech Synthesis/index.html | 75 ++++++ 24 - Sticky Nav/index-START.html | 15 +- 24 - Sticky Nav/index.html | 74 ++++++ 24 - Sticky Nav/style-START.css | 13 - 24 - Sticky Nav/style.css | 99 +++++++ .../index-START.html | 1 - .../index.html | 60 +++++ 26 - Stripe Follow Along Nav/index.html | 246 ++++++++++++++++++ 27 - Click and Drag/index.html | 72 +++++ 28 - Video Speed Controller/index.html | 36 +++ 29 - Countown Timer/index.html | 2 +- 29 - Countown Timer/scripts.js | 53 ++++ 30 - Whack A Mole/index.html | 87 +++++++ 32 files changed, 1853 insertions(+), 67 deletions(-) create mode 100644 11 - Custom Video Player/scripts-START.js create mode 100644 12 - Key Sequence Detection/index.html create mode 100644 13 - Slide in on Scroll/index.html create mode 100644 14 - JavaScript References VS Copying/index.html create mode 100644 15 - LocalStorage/index.html create mode 100644 16 - Mouse Move Shadow/index.html create mode 100644 17 - Sort Without Articles/index.html create mode 100644 18 - Adding Up Times with Reduce/index.html create mode 100644 19 - Webcam Fun/scripts-START.js create mode 100644 20 - Speech Detection/index.html create mode 100644 21 - Geolocation/index.html create mode 100644 22 - Follow Along Link Highlighter/index.html create mode 100644 23 - Speech Synthesis/index.html create mode 100644 24 - Sticky Nav/index.html create mode 100644 24 - Sticky Nav/style.css create mode 100644 25 - Event Capture, Propagation, Bubbling and Once/index.html create mode 100644 26 - Stripe Follow Along Nav/index.html create mode 100644 27 - Click and Drag/index.html create mode 100644 28 - Video Speed Controller/index.html create mode 100644 29 - Countown Timer/scripts.js create mode 100644 30 - Whack A Mole/index.html diff --git a/11 - Custom Video Player/scripts-START.js b/11 - Custom Video Player/scripts-START.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/11 - Custom Video Player/scripts.js b/11 - Custom Video Player/scripts.js index e69de29bb2..aa95032c7b 100644 --- a/11 - Custom Video Player/scripts.js +++ b/11 - Custom Video Player/scripts.js @@ -0,0 +1,59 @@ +// Get our elements +const player = document.querySelector('.player'); +const video = player.querySelector('.viewer'); +const progress = player.querySelector('.progress'); +const progressBar = player.querySelector('.progress__filled'); +const toggle = player.querySelector('.toggle'); +const skipButtons = player.querySelectorAll('[data-skip]'); +const ranges = player.querySelectorAll('.player__slider'); + +//Build functions + +function togglePlay () { + const method = video.paused ? 'play' : 'pause'; + video[method](); +} + +function updateButton() { + const icon = this.paused ? '►' : '❚❚'; + toggle.textContent = icon; +} + +function skip() { + console.log(this.dataset.skip) + video.currentTime += Number(this.dataset.skip); +} + +function handleRangeUpdate() { + video[this.name] = this.value; +} + +function handleProgress() { + const percent = (video.currentTime/video.duration) * 100; + progressBar.style.flexBasis = `${percent}%`; +} + +function scrub(e) { + const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration; + video.currentTime = scrubTime; +} + + +//Hook up events listeners + +video.addEventListener('click', togglePlay); +video.addEventListener('play', updateButton); +video.addEventListener('pause', updateButton); +video.addEventListener('timeupdate', handleProgress); + +toggle.addEventListener('click', togglePlay); + +skipButtons.forEach(button => button.addEventListener('click', skip)); +ranges.forEach(range => range.addEventListener('change',handleRangeUpdate)); +ranges.forEach(range => range.addEventListener('mousemove',handleRangeUpdate)); + +let mousedown = false; +progress.addEventListener('click', scrub); +progress.addEventListener('mousemove', (e) => mousedown && scrub(e)); // take advantage of short circuiting logic +progress.addEventListener('mousedown', () => mousedown = true); +progress.addEventListener('mouseup', () => mousedown = false); \ No newline at end of file diff --git a/11 - Custom Video Player/style.css b/11 - Custom Video Player/style.css index c07581c1c0..b6253af905 100644 --- a/11 - Custom Video Player/style.css +++ b/11 - Custom Video Player/style.css @@ -89,7 +89,7 @@ body { width:50%; background:#ffc600; flex:0; - flex-basis:50%; + flex-basis:0%; } /* unholy css to style input type="range" */ diff --git a/12 - Key Sequence Detection/index.html b/12 - Key Sequence Detection/index.html new file mode 100644 index 0000000000..3018ce047d --- /dev/null +++ b/12 - Key Sequence Detection/index.html @@ -0,0 +1,25 @@ + + + + + Key Detection + + + + + + diff --git a/13 - Slide in on Scroll/index-START.html b/13 - Slide in on Scroll/index-START.html index 12591bad30..ea5c0389fb 100644 --- a/13 - Slide in on Scroll/index-START.html +++ b/13 - Slide in on Scroll/index-START.html @@ -56,27 +56,7 @@

Slide in on Scroll

timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; - } - - const sliderImages = document.querySelectorAll('.slide-in'); - - function checkSlide(e) { - sliderImages.forEach(sliderImage => { - // half way through the image - const slideInAt = (window.scrollY + window.innerHeight) - sliderImage.height / 2; - // bottom of the image - const imageBottom = sliderImage.offsetTop + sliderImage.height; - const isHalfShown = slideInAt > sliderImage.offsetTop; - const isNotScrolledPast = window.scrollY < imageBottom; - if (isHalfShown && isNotScrolledPast) { - sliderImage.classList.add('active'); - } else { - sliderImage.classList.remove('active'); - } - }); - } - - window.addEventListener('scroll', debounce(checkSlide)); + }; diff --git a/13 - Slide in on Scroll/index.html b/13 - Slide in on Scroll/index.html new file mode 100644 index 0000000000..d1c2ab2655 --- /dev/null +++ b/13 - Slide in on Scroll/index.html @@ -0,0 +1,140 @@ + + + + + Document + + + +
+ +

Slide in on Scroll

+ +

Consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariaturlores sunt esse magni, ut, dignissimos.

+

Lorem ipsum cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Adipisicing elit. Tempore tempora rerum..

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

+ + + +

at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis

+ + +

laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+ + + + +
+ + + + + + + diff --git a/14 - JavaScript References VS Copying/index.html b/14 - JavaScript References VS Copying/index.html new file mode 100644 index 0000000000..85df704224 --- /dev/null +++ b/14 - JavaScript References VS Copying/index.html @@ -0,0 +1,101 @@ + + + + + JS Reference VS Copy + + + + + + + diff --git a/15 - LocalStorage/index-START.html b/15 - LocalStorage/index-START.html index d444f1d68b..2578206388 100644 --- a/15 - LocalStorage/index-START.html +++ b/15 - LocalStorage/index-START.html @@ -26,9 +26,6 @@

LOCAL TAPAS

diff --git a/15 - LocalStorage/index.html b/15 - LocalStorage/index.html new file mode 100644 index 0000000000..50c83cd742 --- /dev/null +++ b/15 - LocalStorage/index.html @@ -0,0 +1,79 @@ + + + + + LocalStorage + + + + + + + +
+

LOCAL TAPAS

+

+
    +
  • Loading Tapas...
  • +
+
+ + +
+
+ + + + + + + diff --git a/16 - Mouse Move Shadow/index.html b/16 - Mouse Move Shadow/index.html new file mode 100644 index 0000000000..93c0b42e42 --- /dev/null +++ b/16 - Mouse Move Shadow/index.html @@ -0,0 +1,67 @@ + + + + + Mouse Shadow + + + +
+

🔥WOAH!

+
+ + + + + + diff --git a/17 - Sort Without Articles/index.html b/17 - Sort Without Articles/index.html new file mode 100644 index 0000000000..ab56207aed --- /dev/null +++ b/17 - Sort Without Articles/index.html @@ -0,0 +1,59 @@ + + + + + Sort Without Articles + + + + + +
    + + + + + diff --git a/18 - Adding Up Times with Reduce/index.html b/18 - Adding Up Times with Reduce/index.html new file mode 100644 index 0000000000..06fb4ff0b5 --- /dev/null +++ b/18 - Adding Up Times with Reduce/index.html @@ -0,0 +1,207 @@ + + + + + Videos + + +
      +
    • + Video 1 +
    • +
    • + Video 2 +
    • +
    • + Video 3 +
    • +
    • + Video 4 +
    • +
    • + Video 5 +
    • +
    • + Video 6 +
    • +
    • + Video 7 +
    • +
    • + Video 8 +
    • +
    • + Video 9 +
    • +
    • + Video 10 +
    • +
    • + Video 11 +
    • +
    • + Video 12 +
    • +
    • + Video 13 +
    • +
    • + Video 14 +
    • +
    • + Video 15 +
    • +
    • + Video 16 +
    • +
    • + Video 17 +
    • +
    • + Video 18 +
    • +
    • + Video 19 +
    • +
    • + Video 20 +
    • +
    • + Video 21 +
    • +
    • + Video 22 +
    • +
    • + Video 23 +
    • +
    • + Video 24 +
    • +
    • + Video 25 +
    • +
    • + Video 26 +
    • +
    • + Video 27 +
    • +
    • + Video 28 +
    • +
    • + Video 29 +
    • +
    • + Video 30 +
    • +
    • + Video 31 +
    • +
    • + Video 32 +
    • +
    • + Video 33 +
    • +
    • + Video 34 +
    • +
    • + Video 35 +
    • +
    • + Video 36 +
    • +
    • + Video 37 +
    • +
    • + Video 38 +
    • +
    • + Video 39 +
    • +
    • + Video 40 +
    • +
    • + Video 41 +
    • +
    • + Video 42 +
    • +
    • + Video 43 +
    • +
    • + Video 44 +
    • +
    • + Video 45 +
    • +
    • + Video 46 +
    • +
    • + Video 47 +
    • +
    • + Video 48 +
    • +
    • + Video 49 +
    • +
    • + Video 50 +
    • +
    • + Video 51 +
    • +
    • + Video 52 +
    • +
    • + Video 53 +
    • +
    • + Video 54 +
    • +
    • + Video 55 +
    • +
    • + Video 56 +
    • +
    • + Video 57 +
    • +
    • + Video 58 +
    • + + + + diff --git a/19 - Webcam Fun/index.html b/19 - Webcam Fun/index.html index d4ffc4dc2a..a2c66ca55a 100755 --- a/19 - Webcam Fun/index.html +++ b/19 - Webcam Fun/index.html @@ -10,7 +10,7 @@
      - +
      diff --git a/19 - Webcam Fun/scripts-START.js b/19 - Webcam Fun/scripts-START.js new file mode 100644 index 0000000000..00355f5a9c --- /dev/null +++ b/19 - Webcam Fun/scripts-START.js @@ -0,0 +1,5 @@ +const video = document.querySelector('.player'); +const canvas = document.querySelector('.photo'); +const ctx = canvas.getContext('2d'); +const strip = document.querySelector('.strip'); +const snap = document.querySelector('.snap'); diff --git a/19 - Webcam Fun/scripts.js b/19 - Webcam Fun/scripts.js index 00355f5a9c..9c024681ea 100644 --- a/19 - Webcam Fun/scripts.js +++ b/19 - Webcam Fun/scripts.js @@ -3,3 +3,98 @@ const canvas = document.querySelector('.photo'); const ctx = canvas.getContext('2d'); const strip = document.querySelector('.strip'); const snap = document.querySelector('.snap'); + +function getVideo() { + navigator.mediaDevices.getUserMedia({video:true, audio:false}) + .then(localMediaStream => { + console.log(localMediaStream); + video.src = window.URL.createObjectURL(localMediaStream); + video.play(); + }) + .catch(err => { + console.error(`OH NOO!`, err); + }); + } + +function paintToCanvas() { + const width = video.videoWidth; + const height = video.videoHeight; + canvas.width = width; + canvas.height = height; + + return setInterval(() => { + ctx.drawImage(video, 0, 0, width, height); + //take the pixels out + let pixels = ctx.getImageData(0,0,width,height); //enormous array, structured as R - G - B - alpha + //apply filter(s) + //pixels = redEffect(pixels); + //pixels = rgbSplit(pixels); + //ctx.globalAlpha = 0.1; + pixels = greenScreen(pixels); + //put pixels back + ctx.putImageData(pixels, 0, 0); + }, 16); +} + +function takePhoto() { + //play the shutter sound + snap.currentTime = 0; + snap.play(); + + //take data out of canavs + const data = canvas.toDataURL('image/jpeg'); + const link = document.createElement('a'); + link.href = data; + link.setAttribute('download', 'handsome'); + link.innerHTML = `BADA55`; + strip.insertBefore(link, strip.firstChild); +} + +function redEffect(pixels) { + for (let i=0; i < pixels.data.length; i += 4) { + pixels.data[i + 0] = pixels.data[i + 0] + 100; //red + pixels.data[i + 1] = pixels.data[i + 1] - 50; //green + pixels.data[i + 2] = pixels.data[i + 2] * 0.5; //blue + } + return pixels; +} + +function rgbSplit(pixels) { + for (let i=0; i < pixels.data.length; i += 4) { + pixels.data[i - 150] = pixels.data[i + 0]; //red + pixels.data[i + 800] = pixels.data[i + 1]; //green + pixels.data[i - 800] = pixels.data[i + 2]; //blue + } + return pixels; +} + +function greenScreen(pixels) { + const levels = {}; + + document.querySelectorAll('.rgb input').forEach((input) => { + levels[input.name] = input.value; + }); + + for (i = 0; i < pixels.data.length; i = i + 4) { + red = pixels.data[i + 0]; + green = pixels.data[i + 1]; + blue = pixels.data[i + 2]; + alpha = pixels.data[i + 3]; + + if (red >= levels.rmin + && green >= levels.gmin + && blue >= levels.bmin + && red <= levels.rmax + && green <= levels.gmax + && blue <= levels.bmax) { + // take it out! + pixels.data[i + 3] = 0; + } + } + + return pixels; +} + + getVideo(); + + video.addEventListener('canplay', paintToCanvas); \ No newline at end of file diff --git a/20 - Speech Detection/index.html b/20 - Speech Detection/index.html new file mode 100644 index 0000000000..b320dea2d6 --- /dev/null +++ b/20 - Speech Detection/index.html @@ -0,0 +1,84 @@ + + + + + Speech Detection + + + +
      +
      + + + + + + + + diff --git a/21 - Geolocation/index-START.html b/21 - Geolocation/index-START.html index d794c144ba..858277ab0d 100644 --- a/21 - Geolocation/index-START.html +++ b/21 - Geolocation/index-START.html @@ -57,17 +57,6 @@

      /*Compass: https://thenounproject.com/search/?q=compass&i=592352*/ diff --git a/21 - Geolocation/index.html b/21 - Geolocation/index.html new file mode 100644 index 0000000000..cb01345497 --- /dev/null +++ b/21 - Geolocation/index.html @@ -0,0 +1,74 @@ + + + + + Document + + + + + + +

      + 0 + KM/H +

      + + + + + diff --git a/22 - Follow Along Link Highlighter/index.html b/22 - Follow Along Link Highlighter/index.html new file mode 100644 index 0000000000..45c89687df --- /dev/null +++ b/22 - Follow Along Link Highlighter/index.html @@ -0,0 +1,50 @@ + + + + + 👀👀👀Follow Along Nav + + + + + + +
      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est explicabo unde natus necessitatibus esse obcaecati distinctio, aut itaque, qui vitae!

      +

      Aspernatur sapiente quae sint soluta modi, atque praesentium laborum pariatur earum quaerat cupiditate consequuntur facilis ullam dignissimos, aperiam quam veniam.

      +

      Cum ipsam quod, incidunt sit ex tempore placeat maxime corrupti possimus veritatis ipsum fugit recusandae est doloremque? Hic, quibusdam, nulla.

      +

      Esse quibusdam, ad, ducimus cupiditate nulla, quae magni odit totam ut consequatur eveniet sunt quam provident sapiente dicta neque quod.

      +

      Aliquam dicta sequi culpa fugiat consequuntur pariatur optio ad minima, maxime odio, distinctio magni impedit tempore enim repellendus repudiandae quas!

      +
      + + + + + diff --git a/23 - Speech Synthesis/index.html b/23 - Speech Synthesis/index.html new file mode 100644 index 0000000000..08ea0abc85 --- /dev/null +++ b/23 - Speech Synthesis/index.html @@ -0,0 +1,75 @@ + + + + + Speech Synthesis + + + + + +
      + +

      The Voiceinator 5000

      + + + + + + + + + + + + + +
      + + + + + diff --git a/24 - Sticky Nav/index-START.html b/24 - Sticky Nav/index-START.html index 4982537eea..e7bc67e9a5 100644 --- a/24 - Sticky Nav/index-START.html +++ b/24 - Sticky Nav/index-START.html @@ -54,20 +54,7 @@

      A story about getting lost.

      diff --git a/24 - Sticky Nav/index.html b/24 - Sticky Nav/index.html new file mode 100644 index 0000000000..125e63bdfb --- /dev/null +++ b/24 - Sticky Nav/index.html @@ -0,0 +1,74 @@ + + + + + Sticky Nav + + + + +
      +

      A story about getting lost.

      +
      + + + +
      + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

      + + + +

      at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      +
      + + + + + diff --git a/24 - Sticky Nav/style-START.css b/24 - Sticky Nav/style-START.css index 19961112b4..c6d59a31b3 100644 --- a/24 - Sticky Nav/style-START.css +++ b/24 - Sticky Nav/style-START.css @@ -23,10 +23,6 @@ body { transition: transform 0.5s; } -.fixed-nav .site-wrap { - transform: scale(1); -} - header { text-align: center; height:50vh; @@ -52,11 +48,6 @@ nav { z-index: 1; } -.fixed-nav nav { - position: fixed; - box-shadow: 0 5px rgba(0,0,0,0.1) -} - nav ul { margin: 0; padding:0; @@ -81,10 +72,6 @@ li.logo { font-size: 30px; } -.fixed-nav li.logo { - max-width:500px; -} - li.logo a { color:black; } diff --git a/24 - Sticky Nav/style.css b/24 - Sticky Nav/style.css new file mode 100644 index 0000000000..19961112b4 --- /dev/null +++ b/24 - Sticky Nav/style.css @@ -0,0 +1,99 @@ +html { + box-sizing: border-box; + background:#eeeeee; + font-family:'helvetica neue'; + font-size: 20px; + font-weight: 200; +} +body { + margin: 0; +} +*, *:before, *:after { + box-sizing: inherit; +} + +.site-wrap { + max-width: 700px; + margin: 70px auto; + background:white; + padding:40px; + text-align: justify; + box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.05); + transform: scale(0.98); + transition: transform 0.5s; +} + +.fixed-nav .site-wrap { + transform: scale(1); +} + +header { + text-align: center; + height:50vh; + background:url(http://wes.io/iEgP/wow-so-deep.jpg) bottom center no-repeat; + background-size:cover; + display:flex; + align-items:center; + justify-content: center; +} + +h1 { + color:white; + font-size: 7vw; + text-shadow: 3px 4px 0 rgba(0,0,0,0.2) +} + +nav { + background:black; + top:0; + width: 100%; + transition:all 0.5s; + position: relative; + z-index: 1; +} + +.fixed-nav nav { + position: fixed; + box-shadow: 0 5px rgba(0,0,0,0.1) +} + +nav ul { + margin: 0; + padding:0; + list-style: none; + display:flex; +} + +nav li { + flex:1; + text-align: center; + display: flex; + justify-content: center; + align-items: center; +} + +li.logo { + max-width:0; + overflow: hidden; + background: white; + transition: all .5s; + font-weight: 600; + font-size: 30px; +} + +.fixed-nav li.logo { + max-width:500px; +} + +li.logo a { + color:black; +} + +nav a { + text-decoration: none; + padding:20px; + display: inline-block; + color:white; + transition:all 0.2s; + text-transform: uppercase; +} diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index-START.html b/25 - Event Capture, Propagation, Bubbling and Once/index-START.html index 98f5e070c4..166235b3fe 100644 --- a/25 - Event Capture, Propagation, Bubbling and Once/index-START.html +++ b/25 - Event Capture, Propagation, Bubbling and Once/index-START.html @@ -37,7 +37,6 @@ } - diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index.html b/25 - Event Capture, Propagation, Bubbling and Once/index.html new file mode 100644 index 0000000000..2740bc4d5d --- /dev/null +++ b/25 - Event Capture, Propagation, Bubbling and Once/index.html @@ -0,0 +1,60 @@ + + + + + Understanding JavaScript's Capture + + + +
      +
      +
      +
      +
      +
      + + + + + + diff --git a/26 - Stripe Follow Along Nav/index.html b/26 - Stripe Follow Along Nav/index.html new file mode 100644 index 0000000000..a8fadf9a0c --- /dev/null +++ b/26 - Stripe Follow Along Nav/index.html @@ -0,0 +1,246 @@ + + + + + Follow Along Nav + + +

      Cool

      + + + + + + + + diff --git a/27 - Click and Drag/index.html b/27 - Click and Drag/index.html new file mode 100644 index 0000000000..b856951d51 --- /dev/null +++ b/27 - Click and Drag/index.html @@ -0,0 +1,72 @@ + + + + + Click and Drag + + + +
      +
      01
      +
      02
      +
      03
      +
      04
      +
      05
      +
      06
      +
      07
      +
      08
      +
      09
      +
      10
      +
      11
      +
      12
      +
      13
      +
      14
      +
      15
      +
      16
      +
      17
      +
      18
      +
      19
      +
      20
      +
      21
      +
      22
      +
      23
      +
      24
      +
      25
      +
      + + + + + diff --git a/28 - Video Speed Controller/index.html b/28 - Video Speed Controller/index.html new file mode 100644 index 0000000000..bb2bd2be18 --- /dev/null +++ b/28 - Video Speed Controller/index.html @@ -0,0 +1,36 @@ + + + + + Video Speed Scrubber + + + + +
      + +
      +
      +
      +
      + + + + diff --git a/29 - Countown Timer/index.html b/29 - Countown Timer/index.html index d54f447dd9..95a0f895a2 100644 --- a/29 - Countown Timer/index.html +++ b/29 - Countown Timer/index.html @@ -24,6 +24,6 @@

      - + diff --git a/29 - Countown Timer/scripts.js b/29 - Countown Timer/scripts.js new file mode 100644 index 0000000000..19c0678ca8 --- /dev/null +++ b/29 - Countown Timer/scripts.js @@ -0,0 +1,53 @@ +let countdown; +const timerDisplay = document.querySelector('.display__time-left'); +const endTime = document.querySelector('.display__end-time'); +const buttons = document.querySelectorAll(`[data-time]`); + +function timer(seconds) { + //clear existing timers + clearInterval(countdown); + + const now = Date.now(); //.now is a new method to date + const then = now + seconds*1000; //covnert to ms + displayTimeLeft(seconds); + displayEndTime(then); + + countdown = setInterval(() => { + const secondsLeft = Math.round((then - Date.now())/1000); + //check if timer should stop + if (secondsLeft < 0) { + clearInterval(countdown); + return; + } + //display it + displayTimeLeft(secondsLeft); + }, 1000); +} + +function displayTimeLeft(seconds) { + const minutes = Math.floor(seconds/60); + const remainderSeconds = seconds % 60; + const display = `${minutes}:${remainderSeconds < 10 ? '0' : ''}${remainderSeconds}`; + document.title = display; + timerDisplay.textContent = display; +} + +function displayEndTime(timestamp) { + const end = new Date(timestamp); + const hour = end.getHours(); + const minutes = end.getMinutes(); + endTime.textContent = `Be back at ${hour > 12 ? hour - 12 : hour}:${minutes < 10 ? '0' : ''}${minutes}`; +} + +function startTimer() { + const seconds = parseInt(this.dataset.time); + timer(seconds); +} + +buttons.forEach(button => button.addEventListener('click',startTimer)); +document.customForm.addEventListener('submit', function(e) { + e.preventDefault(); //prevent page from reloading on submit + const mins = this.minutes.value; + timer(mins * 60); + this.reset(); //clear the input box on submission +}); \ No newline at end of file diff --git a/30 - Whack A Mole/index.html b/30 - Whack A Mole/index.html new file mode 100644 index 0000000000..6b9e0ea80b --- /dev/null +++ b/30 - Whack A Mole/index.html @@ -0,0 +1,87 @@ + + + + + Whack A Mole! + + + + + +

      Whack-a-mole! 0

      + + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + From 6041a541a5e4e11723eff91fdb378739a3c3a943 Mon Sep 17 00:00:00 2001 From: Chuck Kosman Date: Thu, 2 Feb 2017 11:03:33 -0800 Subject: [PATCH 15/15] Completed exercises 11 through 30 --- 11 - Custom Video Player/scripts-START.js | 0 11 - Custom Video Player/scripts.js | 59 +++++ 11 - Custom Video Player/style.css | 2 +- 12 - Key Sequence Detection/index.html | 25 ++ 13 - Slide in on Scroll/index-START.html | 22 +- 13 - Slide in on Scroll/index.html | 140 ++++++++++ .../index.html | 101 +++++++ 15 - LocalStorage/index-START.html | 3 - 15 - LocalStorage/index.html | 79 ++++++ 16 - Mouse Move Shadow/index.html | 67 +++++ 17 - Sort Without Articles/index.html | 59 +++++ 18 - Adding Up Times with Reduce/index.html | 207 +++++++++++++++ 19 - Webcam Fun/index.html | 4 +- 19 - Webcam Fun/scripts-START.js | 5 + 19 - Webcam Fun/scripts.js | 95 +++++++ 20 - Speech Detection/index.html | 84 ++++++ 21 - Geolocation/index-START.html | 11 - 21 - Geolocation/index.html | 74 ++++++ 22 - Follow Along Link Highlighter/index.html | 50 ++++ 23 - Speech Synthesis/index.html | 75 ++++++ 24 - Sticky Nav/index-START.html | 15 +- 24 - Sticky Nav/index.html | 74 ++++++ 24 - Sticky Nav/style-START.css | 13 - 24 - Sticky Nav/style.css | 99 +++++++ .../index-START.html | 1 - .../index.html | 60 +++++ 26 - Stripe Follow Along Nav/index.html | 246 ++++++++++++++++++ 27 - Click and Drag/index.html | 72 +++++ 28 - Video Speed Controller/index.html | 36 +++ 29 - Countown Timer/index.html | 2 +- 29 - Countown Timer/scripts.js | 53 ++++ 30 - Whack A Mole/index.html | 87 +++++++ 32 files changed, 1853 insertions(+), 67 deletions(-) create mode 100644 11 - Custom Video Player/scripts-START.js create mode 100644 12 - Key Sequence Detection/index.html create mode 100644 13 - Slide in on Scroll/index.html create mode 100644 14 - JavaScript References VS Copying/index.html create mode 100644 15 - LocalStorage/index.html create mode 100644 16 - Mouse Move Shadow/index.html create mode 100644 17 - Sort Without Articles/index.html create mode 100644 18 - Adding Up Times with Reduce/index.html create mode 100644 19 - Webcam Fun/scripts-START.js create mode 100644 20 - Speech Detection/index.html create mode 100644 21 - Geolocation/index.html create mode 100644 22 - Follow Along Link Highlighter/index.html create mode 100644 23 - Speech Synthesis/index.html create mode 100644 24 - Sticky Nav/index.html create mode 100644 24 - Sticky Nav/style.css create mode 100644 25 - Event Capture, Propagation, Bubbling and Once/index.html create mode 100644 26 - Stripe Follow Along Nav/index.html create mode 100644 27 - Click and Drag/index.html create mode 100644 28 - Video Speed Controller/index.html create mode 100644 29 - Countown Timer/scripts.js create mode 100644 30 - Whack A Mole/index.html diff --git a/11 - Custom Video Player/scripts-START.js b/11 - Custom Video Player/scripts-START.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/11 - Custom Video Player/scripts.js b/11 - Custom Video Player/scripts.js index e69de29bb2..aa95032c7b 100644 --- a/11 - Custom Video Player/scripts.js +++ b/11 - Custom Video Player/scripts.js @@ -0,0 +1,59 @@ +// Get our elements +const player = document.querySelector('.player'); +const video = player.querySelector('.viewer'); +const progress = player.querySelector('.progress'); +const progressBar = player.querySelector('.progress__filled'); +const toggle = player.querySelector('.toggle'); +const skipButtons = player.querySelectorAll('[data-skip]'); +const ranges = player.querySelectorAll('.player__slider'); + +//Build functions + +function togglePlay () { + const method = video.paused ? 'play' : 'pause'; + video[method](); +} + +function updateButton() { + const icon = this.paused ? '►' : '❚❚'; + toggle.textContent = icon; +} + +function skip() { + console.log(this.dataset.skip) + video.currentTime += Number(this.dataset.skip); +} + +function handleRangeUpdate() { + video[this.name] = this.value; +} + +function handleProgress() { + const percent = (video.currentTime/video.duration) * 100; + progressBar.style.flexBasis = `${percent}%`; +} + +function scrub(e) { + const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration; + video.currentTime = scrubTime; +} + + +//Hook up events listeners + +video.addEventListener('click', togglePlay); +video.addEventListener('play', updateButton); +video.addEventListener('pause', updateButton); +video.addEventListener('timeupdate', handleProgress); + +toggle.addEventListener('click', togglePlay); + +skipButtons.forEach(button => button.addEventListener('click', skip)); +ranges.forEach(range => range.addEventListener('change',handleRangeUpdate)); +ranges.forEach(range => range.addEventListener('mousemove',handleRangeUpdate)); + +let mousedown = false; +progress.addEventListener('click', scrub); +progress.addEventListener('mousemove', (e) => mousedown && scrub(e)); // take advantage of short circuiting logic +progress.addEventListener('mousedown', () => mousedown = true); +progress.addEventListener('mouseup', () => mousedown = false); \ No newline at end of file diff --git a/11 - Custom Video Player/style.css b/11 - Custom Video Player/style.css index c07581c1c0..b6253af905 100644 --- a/11 - Custom Video Player/style.css +++ b/11 - Custom Video Player/style.css @@ -89,7 +89,7 @@ body { width:50%; background:#ffc600; flex:0; - flex-basis:50%; + flex-basis:0%; } /* unholy css to style input type="range" */ diff --git a/12 - Key Sequence Detection/index.html b/12 - Key Sequence Detection/index.html new file mode 100644 index 0000000000..3018ce047d --- /dev/null +++ b/12 - Key Sequence Detection/index.html @@ -0,0 +1,25 @@ + + + + + Key Detection + + + + + + diff --git a/13 - Slide in on Scroll/index-START.html b/13 - Slide in on Scroll/index-START.html index 12591bad30..ea5c0389fb 100644 --- a/13 - Slide in on Scroll/index-START.html +++ b/13 - Slide in on Scroll/index-START.html @@ -56,27 +56,7 @@

      Slide in on Scroll

      timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; - } - - const sliderImages = document.querySelectorAll('.slide-in'); - - function checkSlide(e) { - sliderImages.forEach(sliderImage => { - // half way through the image - const slideInAt = (window.scrollY + window.innerHeight) - sliderImage.height / 2; - // bottom of the image - const imageBottom = sliderImage.offsetTop + sliderImage.height; - const isHalfShown = slideInAt > sliderImage.offsetTop; - const isNotScrolledPast = window.scrollY < imageBottom; - if (isHalfShown && isNotScrolledPast) { - sliderImage.classList.add('active'); - } else { - sliderImage.classList.remove('active'); - } - }); - } - - window.addEventListener('scroll', debounce(checkSlide)); + }; diff --git a/13 - Slide in on Scroll/index.html b/13 - Slide in on Scroll/index.html new file mode 100644 index 0000000000..d1c2ab2655 --- /dev/null +++ b/13 - Slide in on Scroll/index.html @@ -0,0 +1,140 @@ + + + + + Document + + + +
      + +

      Slide in on Scroll

      + +

      Consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariaturlores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Adipisicing elit. Tempore tempora rerum..

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

      + + + +

      at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis

      + + +

      laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      + + + +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      +

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

      + + + + +
      + + + + + + + diff --git a/14 - JavaScript References VS Copying/index.html b/14 - JavaScript References VS Copying/index.html new file mode 100644 index 0000000000..85df704224 --- /dev/null +++ b/14 - JavaScript References VS Copying/index.html @@ -0,0 +1,101 @@ + + + + + JS Reference VS Copy + + + + + + + diff --git a/15 - LocalStorage/index-START.html b/15 - LocalStorage/index-START.html index d444f1d68b..2578206388 100644 --- a/15 - LocalStorage/index-START.html +++ b/15 - LocalStorage/index-START.html @@ -26,9 +26,6 @@

      LOCAL TAPAS

      diff --git a/15 - LocalStorage/index.html b/15 - LocalStorage/index.html new file mode 100644 index 0000000000..50c83cd742 --- /dev/null +++ b/15 - LocalStorage/index.html @@ -0,0 +1,79 @@ + + + + + LocalStorage + + + + + + + +
      +

      LOCAL TAPAS

      +

      +
        +
      • Loading Tapas...
      • +
      +
      + + +
      +
      + + + + + + + diff --git a/16 - Mouse Move Shadow/index.html b/16 - Mouse Move Shadow/index.html new file mode 100644 index 0000000000..93c0b42e42 --- /dev/null +++ b/16 - Mouse Move Shadow/index.html @@ -0,0 +1,67 @@ + + + + + Mouse Shadow + + + +
      +

      🔥WOAH!

      +
      + + + + + + diff --git a/17 - Sort Without Articles/index.html b/17 - Sort Without Articles/index.html new file mode 100644 index 0000000000..ab56207aed --- /dev/null +++ b/17 - Sort Without Articles/index.html @@ -0,0 +1,59 @@ + + + + + Sort Without Articles + + + + + +
        + + + + + diff --git a/18 - Adding Up Times with Reduce/index.html b/18 - Adding Up Times with Reduce/index.html new file mode 100644 index 0000000000..06fb4ff0b5 --- /dev/null +++ b/18 - Adding Up Times with Reduce/index.html @@ -0,0 +1,207 @@ + + + + + Videos + + +
          +
        • + Video 1 +
        • +
        • + Video 2 +
        • +
        • + Video 3 +
        • +
        • + Video 4 +
        • +
        • + Video 5 +
        • +
        • + Video 6 +
        • +
        • + Video 7 +
        • +
        • + Video 8 +
        • +
        • + Video 9 +
        • +
        • + Video 10 +
        • +
        • + Video 11 +
        • +
        • + Video 12 +
        • +
        • + Video 13 +
        • +
        • + Video 14 +
        • +
        • + Video 15 +
        • +
        • + Video 16 +
        • +
        • + Video 17 +
        • +
        • + Video 18 +
        • +
        • + Video 19 +
        • +
        • + Video 20 +
        • +
        • + Video 21 +
        • +
        • + Video 22 +
        • +
        • + Video 23 +
        • +
        • + Video 24 +
        • +
        • + Video 25 +
        • +
        • + Video 26 +
        • +
        • + Video 27 +
        • +
        • + Video 28 +
        • +
        • + Video 29 +
        • +
        • + Video 30 +
        • +
        • + Video 31 +
        • +
        • + Video 32 +
        • +
        • + Video 33 +
        • +
        • + Video 34 +
        • +
        • + Video 35 +
        • +
        • + Video 36 +
        • +
        • + Video 37 +
        • +
        • + Video 38 +
        • +
        • + Video 39 +
        • +
        • + Video 40 +
        • +
        • + Video 41 +
        • +
        • + Video 42 +
        • +
        • + Video 43 +
        • +
        • + Video 44 +
        • +
        • + Video 45 +
        • +
        • + Video 46 +
        • +
        • + Video 47 +
        • +
        • + Video 48 +
        • +
        • + Video 49 +
        • +
        • + Video 50 +
        • +
        • + Video 51 +
        • +
        • + Video 52 +
        • +
        • + Video 53 +
        • +
        • + Video 54 +
        • +
        • + Video 55 +
        • +
        • + Video 56 +
        • +
        • + Video 57 +
        • +
        • + Video 58 +
        • + + + + diff --git a/19 - Webcam Fun/index.html b/19 - Webcam Fun/index.html index d4ffc4dc2a..a2c66ca55a 100755 --- a/19 - Webcam Fun/index.html +++ b/19 - Webcam Fun/index.html @@ -10,7 +10,7 @@
          - +
          diff --git a/19 - Webcam Fun/scripts-START.js b/19 - Webcam Fun/scripts-START.js new file mode 100644 index 0000000000..00355f5a9c --- /dev/null +++ b/19 - Webcam Fun/scripts-START.js @@ -0,0 +1,5 @@ +const video = document.querySelector('.player'); +const canvas = document.querySelector('.photo'); +const ctx = canvas.getContext('2d'); +const strip = document.querySelector('.strip'); +const snap = document.querySelector('.snap'); diff --git a/19 - Webcam Fun/scripts.js b/19 - Webcam Fun/scripts.js index 00355f5a9c..9c024681ea 100644 --- a/19 - Webcam Fun/scripts.js +++ b/19 - Webcam Fun/scripts.js @@ -3,3 +3,98 @@ const canvas = document.querySelector('.photo'); const ctx = canvas.getContext('2d'); const strip = document.querySelector('.strip'); const snap = document.querySelector('.snap'); + +function getVideo() { + navigator.mediaDevices.getUserMedia({video:true, audio:false}) + .then(localMediaStream => { + console.log(localMediaStream); + video.src = window.URL.createObjectURL(localMediaStream); + video.play(); + }) + .catch(err => { + console.error(`OH NOO!`, err); + }); + } + +function paintToCanvas() { + const width = video.videoWidth; + const height = video.videoHeight; + canvas.width = width; + canvas.height = height; + + return setInterval(() => { + ctx.drawImage(video, 0, 0, width, height); + //take the pixels out + let pixels = ctx.getImageData(0,0,width,height); //enormous array, structured as R - G - B - alpha + //apply filter(s) + //pixels = redEffect(pixels); + //pixels = rgbSplit(pixels); + //ctx.globalAlpha = 0.1; + pixels = greenScreen(pixels); + //put pixels back + ctx.putImageData(pixels, 0, 0); + }, 16); +} + +function takePhoto() { + //play the shutter sound + snap.currentTime = 0; + snap.play(); + + //take data out of canavs + const data = canvas.toDataURL('image/jpeg'); + const link = document.createElement('a'); + link.href = data; + link.setAttribute('download', 'handsome'); + link.innerHTML = `BADA55`; + strip.insertBefore(link, strip.firstChild); +} + +function redEffect(pixels) { + for (let i=0; i < pixels.data.length; i += 4) { + pixels.data[i + 0] = pixels.data[i + 0] + 100; //red + pixels.data[i + 1] = pixels.data[i + 1] - 50; //green + pixels.data[i + 2] = pixels.data[i + 2] * 0.5; //blue + } + return pixels; +} + +function rgbSplit(pixels) { + for (let i=0; i < pixels.data.length; i += 4) { + pixels.data[i - 150] = pixels.data[i + 0]; //red + pixels.data[i + 800] = pixels.data[i + 1]; //green + pixels.data[i - 800] = pixels.data[i + 2]; //blue + } + return pixels; +} + +function greenScreen(pixels) { + const levels = {}; + + document.querySelectorAll('.rgb input').forEach((input) => { + levels[input.name] = input.value; + }); + + for (i = 0; i < pixels.data.length; i = i + 4) { + red = pixels.data[i + 0]; + green = pixels.data[i + 1]; + blue = pixels.data[i + 2]; + alpha = pixels.data[i + 3]; + + if (red >= levels.rmin + && green >= levels.gmin + && blue >= levels.bmin + && red <= levels.rmax + && green <= levels.gmax + && blue <= levels.bmax) { + // take it out! + pixels.data[i + 3] = 0; + } + } + + return pixels; +} + + getVideo(); + + video.addEventListener('canplay', paintToCanvas); \ No newline at end of file diff --git a/20 - Speech Detection/index.html b/20 - Speech Detection/index.html new file mode 100644 index 0000000000..b320dea2d6 --- /dev/null +++ b/20 - Speech Detection/index.html @@ -0,0 +1,84 @@ + + + + + Speech Detection + + + +
          +
          + + + + + + + + diff --git a/21 - Geolocation/index-START.html b/21 - Geolocation/index-START.html index d794c144ba..858277ab0d 100644 --- a/21 - Geolocation/index-START.html +++ b/21 - Geolocation/index-START.html @@ -57,17 +57,6 @@

          /*Compass: https://thenounproject.com/search/?q=compass&i=592352*/ diff --git a/21 - Geolocation/index.html b/21 - Geolocation/index.html new file mode 100644 index 0000000000..cb01345497 --- /dev/null +++ b/21 - Geolocation/index.html @@ -0,0 +1,74 @@ + + + + + Document + + + + + + +

          + 0 + KM/H +

          + + + + + diff --git a/22 - Follow Along Link Highlighter/index.html b/22 - Follow Along Link Highlighter/index.html new file mode 100644 index 0000000000..45c89687df --- /dev/null +++ b/22 - Follow Along Link Highlighter/index.html @@ -0,0 +1,50 @@ + + + + + 👀👀👀Follow Along Nav + + + + + + +
          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est explicabo unde natus necessitatibus esse obcaecati distinctio, aut itaque, qui vitae!

          +

          Aspernatur sapiente quae sint soluta modi, atque praesentium laborum pariatur earum quaerat cupiditate consequuntur facilis ullam dignissimos, aperiam quam veniam.

          +

          Cum ipsam quod, incidunt sit ex tempore placeat maxime corrupti possimus veritatis ipsum fugit recusandae est doloremque? Hic, quibusdam, nulla.

          +

          Esse quibusdam, ad, ducimus cupiditate nulla, quae magni odit totam ut consequatur eveniet sunt quam provident sapiente dicta neque quod.

          +

          Aliquam dicta sequi culpa fugiat consequuntur pariatur optio ad minima, maxime odio, distinctio magni impedit tempore enim repellendus repudiandae quas!

          +
          + + + + + diff --git a/23 - Speech Synthesis/index.html b/23 - Speech Synthesis/index.html new file mode 100644 index 0000000000..08ea0abc85 --- /dev/null +++ b/23 - Speech Synthesis/index.html @@ -0,0 +1,75 @@ + + + + + Speech Synthesis + + + + + +
          + +

          The Voiceinator 5000

          + + + + + + + + + + + + + +
          + + + + + diff --git a/24 - Sticky Nav/index-START.html b/24 - Sticky Nav/index-START.html index 4982537eea..e7bc67e9a5 100644 --- a/24 - Sticky Nav/index-START.html +++ b/24 - Sticky Nav/index-START.html @@ -54,20 +54,7 @@

          A story about getting lost.

          diff --git a/24 - Sticky Nav/index.html b/24 - Sticky Nav/index.html new file mode 100644 index 0000000000..125e63bdfb --- /dev/null +++ b/24 - Sticky Nav/index.html @@ -0,0 +1,74 @@ + + + + + Sticky Nav + + + + +
          +

          A story about getting lost.

          +
          + + + +
          + +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

          + + + +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

          + + + +

          at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

          + + + +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

          + + + +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

          +

          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

          +
          + + + + + diff --git a/24 - Sticky Nav/style-START.css b/24 - Sticky Nav/style-START.css index 19961112b4..c6d59a31b3 100644 --- a/24 - Sticky Nav/style-START.css +++ b/24 - Sticky Nav/style-START.css @@ -23,10 +23,6 @@ body { transition: transform 0.5s; } -.fixed-nav .site-wrap { - transform: scale(1); -} - header { text-align: center; height:50vh; @@ -52,11 +48,6 @@ nav { z-index: 1; } -.fixed-nav nav { - position: fixed; - box-shadow: 0 5px rgba(0,0,0,0.1) -} - nav ul { margin: 0; padding:0; @@ -81,10 +72,6 @@ li.logo { font-size: 30px; } -.fixed-nav li.logo { - max-width:500px; -} - li.logo a { color:black; } diff --git a/24 - Sticky Nav/style.css b/24 - Sticky Nav/style.css new file mode 100644 index 0000000000..19961112b4 --- /dev/null +++ b/24 - Sticky Nav/style.css @@ -0,0 +1,99 @@ +html { + box-sizing: border-box; + background:#eeeeee; + font-family:'helvetica neue'; + font-size: 20px; + font-weight: 200; +} +body { + margin: 0; +} +*, *:before, *:after { + box-sizing: inherit; +} + +.site-wrap { + max-width: 700px; + margin: 70px auto; + background:white; + padding:40px; + text-align: justify; + box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.05); + transform: scale(0.98); + transition: transform 0.5s; +} + +.fixed-nav .site-wrap { + transform: scale(1); +} + +header { + text-align: center; + height:50vh; + background:url(http://wes.io/iEgP/wow-so-deep.jpg) bottom center no-repeat; + background-size:cover; + display:flex; + align-items:center; + justify-content: center; +} + +h1 { + color:white; + font-size: 7vw; + text-shadow: 3px 4px 0 rgba(0,0,0,0.2) +} + +nav { + background:black; + top:0; + width: 100%; + transition:all 0.5s; + position: relative; + z-index: 1; +} + +.fixed-nav nav { + position: fixed; + box-shadow: 0 5px rgba(0,0,0,0.1) +} + +nav ul { + margin: 0; + padding:0; + list-style: none; + display:flex; +} + +nav li { + flex:1; + text-align: center; + display: flex; + justify-content: center; + align-items: center; +} + +li.logo { + max-width:0; + overflow: hidden; + background: white; + transition: all .5s; + font-weight: 600; + font-size: 30px; +} + +.fixed-nav li.logo { + max-width:500px; +} + +li.logo a { + color:black; +} + +nav a { + text-decoration: none; + padding:20px; + display: inline-block; + color:white; + transition:all 0.2s; + text-transform: uppercase; +} diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index-START.html b/25 - Event Capture, Propagation, Bubbling and Once/index-START.html index 98f5e070c4..166235b3fe 100644 --- a/25 - Event Capture, Propagation, Bubbling and Once/index-START.html +++ b/25 - Event Capture, Propagation, Bubbling and Once/index-START.html @@ -37,7 +37,6 @@ } - diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index.html b/25 - Event Capture, Propagation, Bubbling and Once/index.html new file mode 100644 index 0000000000..2740bc4d5d --- /dev/null +++ b/25 - Event Capture, Propagation, Bubbling and Once/index.html @@ -0,0 +1,60 @@ + + + + + Understanding JavaScript's Capture + + + +
          +
          +
          +
          +
          +
          + + + + + + diff --git a/26 - Stripe Follow Along Nav/index.html b/26 - Stripe Follow Along Nav/index.html new file mode 100644 index 0000000000..a8fadf9a0c --- /dev/null +++ b/26 - Stripe Follow Along Nav/index.html @@ -0,0 +1,246 @@ + + + + + Follow Along Nav + + +

          Cool

          + + + + + + + + diff --git a/27 - Click and Drag/index.html b/27 - Click and Drag/index.html new file mode 100644 index 0000000000..b856951d51 --- /dev/null +++ b/27 - Click and Drag/index.html @@ -0,0 +1,72 @@ + + + + + Click and Drag + + + +
          +
          01
          +
          02
          +
          03
          +
          04
          +
          05
          +
          06
          +
          07
          +
          08
          +
          09
          +
          10
          +
          11
          +
          12
          +
          13
          +
          14
          +
          15
          +
          16
          +
          17
          +
          18
          +
          19
          +
          20
          +
          21
          +
          22
          +
          23
          +
          24
          +
          25
          +
          + + + + + diff --git a/28 - Video Speed Controller/index.html b/28 - Video Speed Controller/index.html new file mode 100644 index 0000000000..bb2bd2be18 --- /dev/null +++ b/28 - Video Speed Controller/index.html @@ -0,0 +1,36 @@ + + + + + Video Speed Scrubber + + + + +
          + +
          +
          +
          +
          + + + + diff --git a/29 - Countown Timer/index.html b/29 - Countown Timer/index.html index d54f447dd9..95a0f895a2 100644 --- a/29 - Countown Timer/index.html +++ b/29 - Countown Timer/index.html @@ -24,6 +24,6 @@

          - + diff --git a/29 - Countown Timer/scripts.js b/29 - Countown Timer/scripts.js new file mode 100644 index 0000000000..19c0678ca8 --- /dev/null +++ b/29 - Countown Timer/scripts.js @@ -0,0 +1,53 @@ +let countdown; +const timerDisplay = document.querySelector('.display__time-left'); +const endTime = document.querySelector('.display__end-time'); +const buttons = document.querySelectorAll(`[data-time]`); + +function timer(seconds) { + //clear existing timers + clearInterval(countdown); + + const now = Date.now(); //.now is a new method to date + const then = now + seconds*1000; //covnert to ms + displayTimeLeft(seconds); + displayEndTime(then); + + countdown = setInterval(() => { + const secondsLeft = Math.round((then - Date.now())/1000); + //check if timer should stop + if (secondsLeft < 0) { + clearInterval(countdown); + return; + } + //display it + displayTimeLeft(secondsLeft); + }, 1000); +} + +function displayTimeLeft(seconds) { + const minutes = Math.floor(seconds/60); + const remainderSeconds = seconds % 60; + const display = `${minutes}:${remainderSeconds < 10 ? '0' : ''}${remainderSeconds}`; + document.title = display; + timerDisplay.textContent = display; +} + +function displayEndTime(timestamp) { + const end = new Date(timestamp); + const hour = end.getHours(); + const minutes = end.getMinutes(); + endTime.textContent = `Be back at ${hour > 12 ? hour - 12 : hour}:${minutes < 10 ? '0' : ''}${minutes}`; +} + +function startTimer() { + const seconds = parseInt(this.dataset.time); + timer(seconds); +} + +buttons.forEach(button => button.addEventListener('click',startTimer)); +document.customForm.addEventListener('submit', function(e) { + e.preventDefault(); //prevent page from reloading on submit + const mins = this.minutes.value; + timer(mins * 60); + this.reset(); //clear the input box on submission +}); \ No newline at end of file diff --git a/30 - Whack A Mole/index.html b/30 - Whack A Mole/index.html new file mode 100644 index 0000000000..6b9e0ea80b --- /dev/null +++ b/30 - Whack A Mole/index.html @@ -0,0 +1,87 @@ + + + + + Whack A Mole! + + + + + +

          Whack-a-mole! 0

          + + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +