Merhabalar ben basit bi slider hazırladım fakat sürüklerken takılıyor yardım edebilirmisiniz
Html
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="gwpSlider.css">
    <script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
    <script type="text/javascript" src="gwpSlider.js"></script>
</head>
<body>
    <div class="gwpSlider">
        <div id="gwpSlider" class="gwpSlider-container">
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
            <div class="gwpSlider-item" >
                <img src="https://webiay.com/xxx/assets/images/miami.webp">
            </div>
        </div>
        <div class="gwpSlider-button">
            <button class="gwpSlider-button-prev">
                Önceki
            </button>
            <button class="gwpSlider-button-next">
                Sonraki
            </button>
        </div>
    </div>

    <script>
        
$(".gwpSlider").gwpSlider({PerView:5});

    </script>
</body>
</html>
Css Dosyam :
        img {

            width:100%;
            height:300px;

        }

        .gwpSlider {

            overflow: hidden;

            width: 100%;
            margin: auto;

        }



        .gwpSlider-container {

            transition: transform 0.2s ease-in-out;

            will-change: transform;

            cursor: grab;

        }



        .gwpSlider-container.grabbing {

            cursor: grabbing;

        }



        .gwpSlider-item {

            box-sizing: border-box;

            display: flex;

            float:left;

            align-items: center;

            justify-content: center;

            font-size: 2em;

            user-select: none;

        }

        .gwpSlider-item > div {

            width:100%;

        }

        body {

            padding:30px;

            margin: 0;

        }
Javascript dosyam :
        (function($) {
            $.fn.gwpSlider = function(options) {
                const settings = $.extend({
                    PerView: 1,
                    margin: 10,
                    auto: false,
                    autoTime: 10000,
                    pagination: true,
                    navigation: true
                }, options);

                return this.each(function() {
                    if (settings.PerView <= 1) {
                        settings.margin = 0;
                    }
                    const $this = $(this);
                    const sliderId = $this.find(".gwpSlider-container").attr("id");
                    const carousel = document.getElementById(sliderId);
                    const container = carousel.parentElement;
                    const itemSelector = ".gwpSlider-item";

                    let isDragging = false;
                    let startPos = 0;
                    let currentTranslate = 0;
                    let prevTranslate = 0;
                    let animationID = 0;
                    let currentIndex = 0;

                    const slideWidth = $this.width() / settings.PerView;
                    const sliderTotalWidth = (slideWidth * $this.find(itemSelector).length) + settings.margin;

                    $this.find(".gwpSlider-container").width(sliderTotalWidth);
                    $this.find(itemSelector).css({
                        "width": slideWidth - settings.margin,
                        "margin-right": settings.margin
                    });

                    const marginLeftx = settings.margin / (settings.PerView - 1);
                    for (let i = 1; i <= settings.PerView; i++) {
                        if (i > 1) {
                            $this.find(`${itemSelector}:nth-child(${i})`).css("margin-left", marginLeftx);
                        }
                    }

                    const updateCarouselPosition = () => carousel.style.transform = `translateX(${currentTranslate}px)`;

                    const setPositionByIndex = () => {
                        currentTranslate = currentIndex * -(container.offsetWidth / settings.PerView);
                        prevTranslate = currentTranslate;
                        updateCarouselPosition();

                        const currentIndexx = currentIndex + 1;
                        const marginLeft = settings.margin / (settings.PerView - 1);
                        const i =  0;
                        $this.find(itemSelector).css("margin-left", "0");
                        for (let i = currentIndexx; i <= (currentIndex + settings.PerView); i++) {
                            if (currentIndexx < i) {
                                $this.find(`${itemSelector}:nth-child(${i})`).css("margin-left", marginLeft);
                            }
                        }

                        const lastChild = (i - 1);
                        $this.find(itemSelector).removeClass("gwpSliderEnd");
                        $this.find(`${itemSelector}:nth-child(${lastChild})`).addClass("gwpSliderEnd");
                    };

                    const handleCarouselEvents = (e) => {
                        switch (e.type) {
                        case 'mousedown':
                            isDragging = true;
                            startPos = e.pageX;
                            carousel.classList.add('grabbing');
                            animationID = requestAnimationFrame(updateCarouselPosition);
                            break;
                        case 'mouseup':
                            if (!isDragging) return;
                            isDragging = false;
                            cancelAnimationFrame(animationID);
                            const movedBy = currentTranslate - prevTranslate;

                            if (movedBy < -100 && currentIndex < carousel.children.length - settings.PerView) currentIndex++;
                            if (movedBy > 100 && currentIndex > 0) currentIndex--;

                            setPositionByIndex();
                            carousel.classList.remove('grabbing');
                            break;
                        case 'mousemove':
                            if (!isDragging) return;
                            currentTranslate = prevTranslate + e.pageX - startPos;
                            cancelAnimationFrame(animationID);
                            animationID = requestAnimationFrame(updateCarouselPosition);
                            break;
                        }
                    };

                    ['mousedown', 'mouseup', 'mousemove'].forEach(evt =>
                        carousel.addEventListener(evt, handleCarouselEvents)
                        );

                    if (settings.navigation) {
                        $(".gwpSlider-button button").on("click", function() {
                            currentIndex += $(this).hasClass("gwpSlider-button-next") ? 1 : -1;

                            if ((carousel.children.length - settings.PerView) < currentIndex) currentIndex = 0;
                            if (currentIndex < 0) currentIndex = 0;

                            setPositionByIndex();
                        });
                    }

                    if (settings.auto) {
                        setInterval(() => {
                            currentIndex++;
                            if ((carousel.children.length - settings.PerView) < currentIndex) currentIndex = 0;
                            setPositionByIndex();
                        }, settings.autoTime);
                    }

                    if (settings.pagination) {
                        const pageNum = Math.floor(carousel.children.length / settings.PerView);
                        const $pagination = $("<div class='gwpPagination'></div>").appendTo($this);

                        for (let i = 0; i < pageNum; i++) {
                            $pagination.append($("<span></span>").attr('page', i));
                        }

                        $pagination.on("click", "span", function() {
                            currentIndex = settings.PerView * $(this).attr("page");
                            setPositionByIndex();
                        });
                    }
                    const handleStart = (e) => {
                        if (e.type === 'touchstart') e.preventDefault();
                        isDragging = true;
                        startPos = getPosX(e);
                        carousel.classList.add('grabbing');
                        animationID = requestAnimationFrame(updateCarouselPosition);
                    };

                    const handleEnd = () => {
                        if (!isDragging) return;
                        isDragging = false;
                        cancelAnimationFrame(animationID);
                        const movedBy = currentTranslate - prevTranslate;

                        if (movedBy < -100 && currentIndex < carousel.children.length - settings.PerView) currentIndex++;
                        if (movedBy > 100 && currentIndex > 0) currentIndex--;

                        setPositionByIndex();
                        carousel.classList.remove('grabbing');
                    };

                    const handleMove = (e) => {
                        if (!isDragging) return;
                        currentTranslate = prevTranslate + getPosX(e) - startPos;
                        cancelAnimationFrame(animationID);
                        animationID = requestAnimationFrame(updateCarouselPosition);
                    };

                    const getPosX = (e) => e.type.includes('mouse') ? e.pageX : e.touches[0].clientX;
                    ['mousedown', 'touchstart'].forEach(evt =>
                        carousel.addEventListener(evt, handleStart)
                        );

                    ['mouseup', 'touchend'].forEach(evt =>
                        carousel.addEventListener(evt, handleEnd)
                        );

                    ['mousemove', 'touchmove'].forEach(evt =>
                        carousel.addEventListener(evt, handleMove)
                        );
                });
    };
})(jQuery);