HTMLify
script.js
Views: 12 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | 'use strict'; /** * add event on multiple elements */ const addEventOnElements = function (elements, eventType, callback) { for (let i = 0, len = elements.length; i < len; i++) { elements[i].addEventListener(eventType, callback); } } /** * MOBILE NAVBAR * navbar will show after clicking menu button */ const navbar = document.querySelector("[data-navbar]"); const navToggler = document.querySelector("[data-nav-toggler]"); const navLinks = document.querySelectorAll("[data-nav-link]"); const toggleNav = function () { navbar.classList.toggle("active"); this.classList.toggle("active"); } navToggler.addEventListener("click", toggleNav); const navClose = () => { navbar.classList.remove("active"); navToggler.classList.remove("active"); } addEventOnElements(navLinks, "click", navClose); /** * HEADER and BACK TOP BTN * header and back top btn will be active after scrolled down to 100px of screen */ const header = document.querySelector("[data-header]"); const backTopBtn = document.querySelector("[data-back-top-btn]"); const activeEl = function () { if (window.scrollY > 100) { header.classList.add("active"); backTopBtn.classList.add("active"); } else { header.classList.remove("active"); backTopBtn.classList.remove("active"); } } window.addEventListener("scroll", activeEl); /** * Button hover ripple effect */ const buttons = document.querySelectorAll("[data-btn]"); const buttonHoverRipple = function (event) { this.style.setProperty("--top", `${event.offsetY}px`); this.style.setProperty("--left", `${event.offsetX}px`); } addEventOnElements(buttons, "mousemove", buttonHoverRipple); /** * Scroll reveal */ const revealElements = document.querySelectorAll("[data-reveal]"); const revealElementOnScroll = function () { for (let i = 0, len = revealElements.length; i < len; i++) { const isElementInsideWindow = revealElements[i].getBoundingClientRect().top < window.innerHeight / 1.1; if (isElementInsideWindow) { revealElements[i].classList.add("revealed"); } } } window.addEventListener("scroll", revealElementOnScroll); window.addEventListener("load", revealElementOnScroll); /** * Custom cursor */ const cursor = document.querySelector("[data-cursor]"); const hoverElements = [...document.querySelectorAll("a"), ...document.querySelectorAll("button")]; const cursorMove = function (event) { cursor.style.top = `${event.clientY}px`; cursor.style.left = `${event.clientX}px`; } window.addEventListener("mousemove", cursorMove); addEventOnElements(hoverElements, "mouseover", function () { cursor.classList.add("hovered"); }); addEventOnElements(hoverElements, "mouseout", function () { cursor.classList.remove("hovered"); }); |