Loading video...

Video Failed to Load

Go Home

JavaScript Variable Scopes: var, let, and const ๐Ÿ”

14,949 views โ€ข 1 year ago โ€ขvia X (Twitter)

2 Comments

Frontend Masters ๐Ÿ’ปโœจ's profile picture
Frontend Masters ๐Ÿ’ปโœจ1 year ago

Join Maximiliano Firtman and modernize your JavaScript skills with features ranging from ES6 to the latest ECMAScript additions. Master modules, arrow functions, destructuring, and async/await for cleaner, more efficient code.

Christian Esmann's profile picture
Christian Esmann1 year ago

I just launched an all-in-one template for cross-platform development, based on the stack I use myself everyday. Expo, NextJS, TypeScript, Tailwind, Firebase, AppsFlyer, Authentication, Analytics, In-App Purchases, Stripe and a lot more, setup by default.

Related Videos

CSS Trick ๐Ÿงฒ You can create magnetic links with the power of custom properties and some JavaScript ๐Ÿ’ช a { translate: calc(clamp(-1, var(--x), 1) * var(--pad-x)) ...; transition: translate var(--s, 1s) var(--ease, var(--elastic)); } a:hover { --s: 0s; } The trick here is to pad out the list items wrapping your links and use that as a translation limit ๐Ÿ›‘ Start by using some JavaScript to calculate a value between -1 and 1 for both the x/y axis on pointermove for each list item, not the link! ๐Ÿ”— If your pointer was at the center of the item, you'd get [0,0]. If it was in the top right, you'd get [1,-1] โ˜๏ธ It's worth checking out the JavaScript snippet to see how the mapping function works. Essentially, you create a function that when given a value between two bounds, will give you a mapped value back ๐Ÿค™ const mapX = mapRange( item.offsetWidth * -0.5, item.offsetWidth * 0.5, 1, -1 ) Then, on pointermove, you plug the pointer position in to get the value back out and pass that into your CSS const x = mapX(item.centerX - event.x) documentโ€‹.documentElementโ€‹.style.setProperty(--x, x) When the pointer leaves the list item, you make sure to reset these values back to 0 โœจ Once CSS has your values, it's the trick of updating the translation of each part You know that in each axis, you only want to translate the link by the padding amount li a { translate: calc(clamp(-1, var(--x), 1) * var(--pad-x)) calc(clamp(-1, var(--y), 1) * var(--pad-y)); transition: translate var(--speed, 1s) var(--ease, var(--elastic)); } This will translate the link within the list item by the desired amount. The cool part here is that you can set an offset for the text inside the link and have that move at a different rate โญ๏ธ By only updating the --pad-x/y custom properties for the inside the link, you can control how much it moves nav a span { --pad-x: 0.25rem; --pad-y: 0.25rem; } And the last piece, how do you update the behavior for transition speeds? And so it springs back like that? Again, use custom properties โœจ a:hover { --s: 0s; } a { transition: translate var(--s, 1s) var(--ease, var(--elastic)); } By default, a link will use --elastic easing via linear() and have a transition-duration of 1s. When a link is hovered that speed becomes 0s because you want the link to magnetise to your pointer. How about that little gap between when your pointer enters the item but hasn't hovered the link? Set a different transition so it transitions to being hovered ๐Ÿซถ nav li:hover a { --ease: ease-out; --speed: 0.1s; } That's kinda it! ๐Ÿ™Œ Use JavaScript (~40 loc) to get the information and then let CSS do all the lifting for you ๐Ÿ’ช Any questions or suggestions, let me know ๐Ÿ™ If you want a walkthrough video, also let me know please ๐Ÿ™ CodePen.IO link below ๐Ÿ‘‡

jhey ส•โ€ขแดฅโ€ขส”

164,863 views โ€ข 2 years ago