Как сделать горизонтальный скролл стрелками?

Как можно сделать горизонтальный скролл стрелками? Т.е чтобы вместо полосы прокрутки были стрелки которые бы выполняли функцию скролла в право и лево.


Ответы (1 шт):

Автор решения: R3DRUMVNE

Вот пример скролла с использованием кнопок:

let back = document.querySelector("#back");
let forward = document.querySelector("#forward");
let imageWrapper = document.querySelector(".imageWrapper");
let posX = 0;
let stepPersent = 5;
let backTimeout, forwardTimeout;

back.addEventListener("mousedown", function (e) {
    // таймер для отслеживания удержания кнопки мыши
    backTimeout = setInterval(() => {
        //проверка выхода скролла за границы
        if((posX + stepPersent) <= 0) { 
            posX = posX + stepPersent;
            imageWrapper.style.left = posX + "%";
        }
    }, 50);
});
//удаление таймера при поднятии кнопки мыши
back.addEventListener("mouseup", function (e) {
     clearInterval(backTimeout);
});

forward.addEventListener("mousedown", function (e) {
    //таймер для отслеживания удержания кнопки мыши
    forwardTimeout = setInterval(() => {
        if((posX - stepPersent) >= -405){
            posX = posX - stepPersent;
            imageWrapper.style.left = posX + "%";
        }
    }, 50);
});
// удаление таймера при поднятии кнопки мыши
forward.addEventListener("mouseup", function (e) {
    clearInterval(forwardTimeout);
});
#wrapper {
    width: max-content;
    display: flex;
    flex-direction: column;
    gap: 5px;
    border: 1px solid black;
    padding: 5px;
}

#window{
    display: flex;
    width: 400px;
    height: 200px;
    border: 1px solid black;
    overflow: hidden;
}

.imageWrapper{
    display: flex;
    flex-direction: row;
    gap: 10px;
    width: max-content;
    position: relative;
    top: 0;
    left: 0;
}

#image1{
    width: 400px;
    background-color: green;
    flex-grow: 1;
}

#image2{
    width: 600px;
    background-color: purple;
    flex-grow: 1;
}

#image3{
    width: 200px;
    background-color: red;
    flex-grow: 1;
}

#image4{
    width: 800px;
    background-color: darkgoldenrod;
    flex-grow: 1;
}

#scrollBar{
    display: grid;
    grid-template-columns: max-content 1fr max-content;
    grid-template-areas: "back . forward";
}

#back,
#forward{
    appearance: none;
    border: 1px solid black;
    padding: 5px 20px;
    background-color: lightgray;
}

#back{
    grid-area: back;
}

#forward{
    grid-area: forward;
}

#back:active,
#forward:active{
    background-color: gray;
}
<div id="wrapper">
    <div id="window">
        <div class="imageWrapper">
            <div id="image1"></div>
            <div id="image2"></div>
            <div id="image3"></div>
            <div id="image4"></div>
        </div>
    </div>
    <div id="scrollBar">
        <button id="back"><</button>
        <button id="forward">></button>
    </div>
</div>

→ Ссылка