-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
66 lines (55 loc) · 2.35 KB
/
script.js
File metadata and controls
66 lines (55 loc) · 2.35 KB
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
const carousel = document.querySelector(".carousel"),
firstImg = carousel.querySelectorAll('img')[0],
arrowIcons = document.querySelectorAll(".wrapper i");
let isDragStart = false, prevPageX, prevScrollLeft, positionDiff;
//getting max scrollable width
const autoSlide = () => {
if(carousel.scrollLeft == carousel.scrollWidth - carousel.clientWidth) return;
console.log(positionDiff);
let firstImgWidth = firstImg.clientWidth + 14;
let valDifference = firstImgWidth - positionDiff;
if(carousel.scrollLeft > prevScrollLeft) {
return carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference :-positionDiff;
}
carousel.scrollLeft -= positionDiff > firstImgWidth / 3? valDifference : -positionDiff;
}
const showHideIcons = () => {
let scrollWidth = carousel.scrollWidth - carousel.clientWidth
arrowIcons[0].style.display = carousel.scrollLeft == 0? "none":"block";
arrowIcons[1].style.display = carousel.scrollLeft == scrollWidth? "none":"block";
}
arrowIcons.forEach(icon => {
icon.addEventListener('click', () => {
let firstImgWidth = firstImg.clientWidth + 14 // getting rist img and add 14 px margin value;
//if clicked icon is left, reduce width value from carosuel scroll left else add to it
carousel.scrollLeft += icon.className.includes("left") ? -firstImgWidth : firstImgWidth;
setTimeout(() => showHideIcons(), 60);
});
})
const dragging = (e) => {
if(!isDragStart)
return;
positionDiff = (e.pageX || e.touches[0].pageX) - prevPageX;
e.preventDefault();
carousel.classList.add('dragging');
carousel.scrollLeft = prevScrollLeft - positionDiff;
showHideIcons();
}
const dragStart = (e) => {
isDragStart = true;
prevPageX = e.pageX || e.touches[0].pageX;
prevScrollLeft = carousel.scrollLeft;
}
const dragStop = (e) => {
carousel.classList.remove('dragging');
// autoSlide();
isDragStart = false;
}
carousel.addEventListener("mousemove", dragging);
carousel.addEventListener("touchmove", dragging);
carousel.addEventListener("mousedown", dragStart); //drag event;
carousel.addEventListener("touchstart", dragStart); //drag event;
carousel.addEventListener("mouseup", dragStop);
carousel.addEventListener("mouseup", dragStop);
carousel.addEventListener("mouseleave", dragStop);
carousel.addEventListener("touchend", dragStop);