Как реализовать такое в Swiper.js?
слайдер Swiper.js Суть такая: работает слайдер, картинка меняется каждые 5 секунд В это время, на стрелочке видна анимация, по кругу, идет закрашивание border в другой цвет, когда цвет полностью меняется соответственно идет смена слайда, т.е это по сути отображение этих 5 сек в красивой и понятной анимации, думаю вы видели такое В доках Swiper готового решения не нашел, мб как то можно через svg и самописный скрипт сделать, но максимально постараться не нагружать DOM, есть идеи куда копать?
Ответы (1 шт):
Автор решения: Meth0d
→ Ссылка
const chart = document.querySelector('.arrow__chart'),
start = Date.now()
let timer = setInterval(() => {
let timePassed = Date.now() - start;
if (timePassed >= 5000) {
clearInterval(timer)
return;
}
circle(timePassed)
}, 50)
function circle(timePassed) {
chart.style.setProperty('--p', `${timePassed / 50}`)
}
.arrow {
--s: 100px;
width: var(--s);
height: var(--s);
border-radius: 50%;
}
.arrow__inner {
--s: 92px;
width: var(--s);
height: var(--s);
border-radius: 50%;
background-color: darkorange;
z-index: 2;
}
.arrow__chart {
--s: 100px;
--b: 4px;
--c: #2154CF;
--p: 0;
width: var(--s);
height: var(--s);
position: relative;
-webkit-transition: all 5s;
-o-transition: all 5s;
transition: all 5s;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
.arrow__chart:before {
content: "";
position: absolute;
border-radius: 50%;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: -o-radial-gradient(farthest-side, var(--c) 98%, rgba(0, 0, 0, 0)) top/var(--b) var(--b) no-repeat, conic-gradient(var(--c) calc(var(--p) * 1%), #f7f8fa 0);
background: radial-gradient(farthest-side, var(--c) 98%, rgba(0, 0, 0, 0)) top/var(--b) var(--b) no-repeat, conic-gradient(var(--c) calc(var(--p) * 1%), #f7f8fa 0);
}
.arrow__chart:after {
content: "";
position: absolute;
border-radius: 50%;
top: calc(50% - var(--b) / 2);
right: calc(50% - var(--b) / 2);
bottom: calc(50% - var(--b) / 2);
left: calc(50% - var(--b) / 2);
background: var(--c);
-webkit-transform: rotate(calc(var(--p) * 3.6deg)) translateY(calc(50% - var(--s) / 2));
-ms-transform: rotate(calc(var(--p) * 3.6deg)) translateY(calc(50% - var(--s) / 2));
transform: rotate(calc(var(--p) * 3.6deg)) translateY(calc(50% - var(--s) / 2));
}
<div class="arrow">
<div class="arrow__chart">
<div class="arrow__inner">
<div class="arrow__icon"></div>
</div>
</div>
</div>
