-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathslider.js
More file actions
105 lines (98 loc) · 3.59 KB
/
slider.js
File metadata and controls
105 lines (98 loc) · 3.59 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
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
function slider({container, slide, nextArrow, prevArrow, totalCounter, currentCounter, wrapper, field}) {
const slides = document.querySelectorAll(slide),
slider = document.querySelector(container),
prev = document.querySelector(prevArrow),
next = document.querySelector(nextArrow),
total = document.querySelector(totalCounter),
current = document.querySelector(currentCounter),
slidesWrapper = document.querySelector(wrapper),
slidesField = document.querySelector(field),
width = window.getComputedStyle(slidesWrapper).width;
let slideIndex = 1,
offset = 0;
if (slides.length < 10) {
total.textContent = `0${slides.length}`;
current.textContent = `0${slideIndex}`;
} else {
total.textContent = slides.length;
current.textContent = slideIndex;
}
slidesField.style.width = 100 * slides.length + "%";
slidesField.style.display = "flex";
slidesField.style.transition = "0.5s all";
slidesWrapper.style.overflow = "hidden";
slides.forEach(slide => {
slide.style.width = width;
});
slider.style.position = "relative";
const indicators = document.createElement("ol");
let dots = [];
indicators.classList.add("carousel-indicators");
slider.append(indicators);
for (let i = 0; i < slides.length; i++) {
const dot = document.createElement("li");
dot.classList.add("dot");
dot.setAttribute("data-slide-to", i + 1);
if (i == 0) {
dot.style.opacity = 1;
}
indicators.append(dot);
dots.push(dot);
}
next.addEventListener("click", () => {
if (offset == +width.replace(/\D/g, "") * (slides.length - 1)) {
offset = 0;
} else {
offset += +width.slice(0, width.length - 2);
}
slidesField.style.transform = `translateX(-${offset}px)`;
if (slideIndex == slides.length) {
slideIndex = 1;
} else {
slideIndex ++;
}
if (slideIndex < 10) {
current.textContent = `0${slideIndex}`;
} else {
current.textContent = slideIndex;
}
dots.forEach(dot => dot.style.opacity = ".5");
dots[slideIndex - 1].style.opacity = 1;
});
prev.addEventListener("click", () => {
if (offset == 0) {
offset = +width.slice(0, width.length - 2) * (slides.length - 1);
} else {
offset -= +width.slice(0, width.length - 2);
}
slidesField.style.transform = `translateX(-${offset}px)`;
if (slideIndex == 1) {
slideIndex = slides.length;
} else {
slideIndex --;
}
if (slideIndex < 10) {
current.textContent = `0${slideIndex}`;
} else {
current.textContent = slideIndex;
}
dots.forEach(dot => dot.style.opacity = ".5");
dots[slideIndex - 1].style.opacity = 1;
});
dots.forEach(dot => {
dot.addEventListener("click", (e) => {
const slideTo = e.target.getAttribute("data-slide-to");
slideIndex = slideTo;
offset = +width.slice(0, width.length - 2) * (slideTo - 1);
slidesField.style.transform = `translateX(-${offset}px)`;
dots.forEach(dot => dot.style.opacity = ".5");
dots[slideIndex - 1].style.opacity = 1;
if (slideIndex < 10) {
current.textContent = `0${slideIndex}`;
} else {
current.textContent = slideIndex;
}
});
});
}
export default slider;