Skip to content

Commit 0bc4f7d

Browse files
PrajapatiRoshanPrajapatiRoshan
authored andcommitted
image, profile, and tab component added
1 parent 2a413de commit 0bc4f7d

File tree

25 files changed

+2121
-0
lines changed

25 files changed

+2121
-0
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"liveServer.settings.port": 5501
3+
}

imageCarousel/img/img-1.jpg

1.42 MB
Loading

imageCarousel/img/img-2.jpg

1.1 MB
Loading

imageCarousel/img/img-3.jpg

992 KB
Loading

imageCarousel/img/img-4.jpg

1010 KB
Loading

imageCarousel/img/img-5.jpg

2.21 MB
Loading

imageCarousel/img/img-6.jpg

515 KB
Loading

imageCarousel/img/img-7.jpg

93 KB
Loading

imageCarousel/index.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>Image carousel</title>
7+
<link rel="stylesheet" href="style.css" />
8+
<script defer src="script.js"></script>
9+
</head>
10+
<body>
11+
<div class="slider">
12+
<div class="slide"><img src="img/img-1.jpg" alt="Photo 1" /></div>
13+
<div class="slide"><img src="img/img-2.jpg" alt="Photo 2" /></div>
14+
<div class="slide"><img src="img/img-3.jpg" alt="Photo 3" /></div>
15+
<div class="slide"><img src="img/img-4.jpg" alt="Photo 4" /></div>
16+
<div class="slide"><img src="img/img-5.jpg" alt="Photo 5" /></div>
17+
<div class="slide"><img src="img/img-6.jpg" alt="Photo 6" /></div>
18+
<div class="slide"><img src="img/img-7.jpg" alt="Photo 7" /></div>
19+
<button class="slider__btn slider__btn--left">&larr;</button>
20+
<button class="slider__btn slider__btn--right">&rarr;</button>
21+
<div class="dots"></div>
22+
</div>
23+
</body>
24+
</html>

imageCarousel/script.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
const slides = document.querySelectorAll('.slide');
2+
const btnLeft = document.querySelector('.slider__btn--left');
3+
const btnRight = document.querySelector('.slider__btn--right');
4+
const dotContainer = document.querySelector('.dots');
5+
6+
let curSlide = 0;
7+
const maxSlide = slides.length;
8+
9+
// Create Dots for each slides
10+
const createDots = function () {
11+
slides.forEach(function (_, i) {
12+
dotContainer.insertAdjacentHTML(
13+
'beforeend',
14+
`<button class="dots__dot" data-slide="${i}"></button>`
15+
);
16+
});
17+
};
18+
19+
// Activate selected dot
20+
const activateDot = function (slide) {
21+
// remove active class from all dots
22+
document
23+
.querySelectorAll('.dots__dot')
24+
.forEach((dot) => dot.classList.remove('dots__dot--active'));
25+
26+
// add active class to selected slide
27+
document
28+
.querySelector(`.dots__dot[data-slide="${slide}"]`)
29+
.classList.add('dots__dot--active');
30+
};
31+
32+
// Move slider to selected slide
33+
const goToSlide = function (slide) {
34+
slides.forEach((s, i) => (s.style.transform = `translateX(${100 * (i - slide)}%)`));
35+
activateDot(curSlide);
36+
};
37+
38+
// Next slide
39+
const nextSlide = function () {
40+
if (curSlide === maxSlide - 1) {
41+
curSlide = 0;
42+
} else {
43+
curSlide++;
44+
}
45+
goToSlide(curSlide);
46+
};
47+
48+
// Previous slide
49+
const prevSlide = function () {
50+
if (curSlide === 0) {
51+
curSlide = maxSlide - 1;
52+
} else {
53+
curSlide--;
54+
}
55+
goToSlide(curSlide);
56+
};
57+
58+
// IIFE - call immediately
59+
(() => {
60+
createDots();
61+
goToSlide(0);
62+
activateDot(0);
63+
64+
// Event handlers for left and right btns
65+
btnRight.addEventListener('click', nextSlide);
66+
btnLeft.addEventListener('click', prevSlide);
67+
68+
// Event handlers for left and right btns with keyboard
69+
document.addEventListener('keydown', (e) => {
70+
if (e.key === 'ArrowLeft') prevSlide();
71+
e.key === 'ArrowRight' && nextSlide();
72+
});
73+
74+
// Event handlers to dot containers
75+
dotContainer.addEventListener('click', (e) => {
76+
if (e.target.classList.contains('dots__dot')) {
77+
const { slide } = e.target.dataset;
78+
goToSlide(slide);
79+
activateDot(slide);
80+
}
81+
});
82+
})();

0 commit comments

Comments
 (0)