-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
130 lines (87 loc) · 2.77 KB
/
main.js
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
122
123
124
125
126
127
128
129
130
/*=== TOGGLE MENU ===============*/
const nav = document.querySelector('#header nav')
const toggle = document.querySelectorAll('nav .toggle')
for (const element of toggle) {
element.addEventListener('click', function () {
nav.classList.toggle('show')
})
}
/*=== TOGGLE MENU-ITEM WHEN CLICKED ===============*/
const links = document.querySelectorAll('nav ul li a')
for (const link of links) {
link.addEventListener('click', function () {
nav.classList.remove('show')
})
}
/*=== SWIPER (Slider/Carousel) ===============*/
const swiper = new Swiper('.swiper-container', {
slidesPerView: 1,
pagination: {
el: '.swiper-pagination'
},
mousewheel: true,
keyboard: true,
breakpoints: {
767: {
slidesPerView: 2,
setWrapperSize: true
}
}
})
/*=== ScrollReveal (Show elements animation when scroll) ===============*/
const scrollReveal = ScrollReveal({
origin: 'top',
distance: '30px',
duration: 700,
reset: false
})
scrollReveal.reveal(`
#home .image, #home .text,
#about .image, #about .text,
#services header, #services .card,
#testimonials header, #testimonials .testimonials
#contact .text, #contact .links,
footer .brand, footer .social
`,
{ interval: 150 }
)
/*=== CHANGING HEADER ACTIVE-ITEM WHEN SCROLL ===============*/
const header = document.querySelector('#header')
const navHeight = header.offsetHeight
function changeHeaderWhenScroll() {
if (window.scrollY >= navHeight) header.classList.add('scroll')
else header.classList.remove('scroll')
}
/*=== BACK TO TOP BUTTON ===============*/
const backToTopButton = document.querySelector('.back-to-top')
function backToTop() {
if (window.scrollY >= 560) backToTopButton.classList.add('show')
else backToTopButton.classList.remove('show')
}
/*=== ACTIVE MENU-ITEM WHEN A SECTION IS VISIBLE ===============*/
const sections = document.querySelectorAll('main section[id]')
function activateMenuAtCurrentSection() {
const checkpoint = window.pageYOffset + (window.innerHeight / 8) * 4
for (const section of sections) {
const sectionTop = section.offsetTop
const sectionHeight = section.offsetHeight
const sectionId = section.getAttribute('id')
const checkpointStart = checkpoint >= sectionTop
const checkpointEnd = checkpoint <= sectionTop + sectionHeight
if (checkpointStart && checkpointEnd) {
document
.querySelector('nav ul li a[href*=' + sectionId + ']')
.classList.add('active')
} else {
document
.querySelector('nav ul li a[href*=' + sectionId + ']')
.classList.remove('active')
}
}
}
/*=== EXECUTE FUNCTIONS WHEN SCROLL ===============*/
window.addEventListener('scroll', function () {
changeHeaderWhenScroll()
backToTop()
activateMenuAtCurrentSection()
})