сенсорная карусельная опора в Bootstrap 4 - PullRequest
0 голосов
/ 12 октября 2018

Я работаю над этим уже пару часов и не могу понять, что я делаю неправильно!

Я хотел бы иметь возможность контролировать каждую отдельную карусель, когда пользовательпроведите внутри этой карусели.

Сейчас у меня правильно работают слушатели событий, однако я не могу управлять каруселями по отдельности.Когда я пролистываю одну, она меняет все .carousel на странице.

HELP !!

// swipe detection
function swipedetect(el, callback) {
    var touchsurface = el,
        swipedir,
        startX,
        startY,
        distX,
        distY,
        threshold = 80, //required min distance traveled to be considered swipe
        restraint = 60, // maximum distance allowed at the same time in perpendicular direction
        allowedTime = 300, // maximum time allowed to travel that distance
        elapsedTime,
        startTime,
        handleswipe = callback || function (swipedir) { }

    for (var i = 0; i < el.length; i++) {
        touchsurface[i].addEventListener('touchstart', function (e) {
            var touchobj = e.changedTouches[0]
            swipedir = 'none'
            distX = 0
            distY = 0
            startX = touchobj.pageX
            startY = touchobj.pageY
            startTime = new Date().getTime() // record time when finger first makes contact with surface
        }, false)

        touchsurface[i].addEventListener('touchmove', function (e) {
        }, false)

        touchsurface[i].addEventListener('touchend', function (e) {
            var touchobj = e.changedTouches[0]
            distX = touchobj.pageX - startX // get horizontal dist traveled by finger while in contact with surface
            distY = touchobj.pageY - startY // get vertical dist traveled by finger while in contact with surface
            elapsedTime = new Date().getTime() - startTime // get time elapsed
            if (elapsedTime <= allowedTime) { // first condition for awipe met
                if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) { // 2nd condition for horizontal swipe met
                    swipedir = (distX < 0) ? 'left' : 'right' // if dist traveled is negative, it indicates left swipe
                }
                else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) { // 2nd condition for vertical swipe met
                    swipedir = (distY < 0) ? 'up' : 'down' // if dis traveled is negative, it indicates up swipe
                }
            }
            handleswipe(swipedir)
        }, false)
    }
    
}


//USAGE:
var el = $('.carousel');
var touches = $('.carousel').targetTouches;

swipedetect(el, function (swipedir) {
    // swipedir contains either "none", "left", "right", "top", or "down"
    var id = $(this).attr('id');
    console.log(id)
    if (swipedir == 'left') {
        $(el).carousel('next')
    }
    if (swipedir == 'right') {
        $(el).carousel('prev')
    }
    
});

1 Ответ

0 голосов
/ 13 октября 2018

попробуй эту карусель

карусель совы

загрузи карусель и добавь эти CSS-файлы

<link rel="stylesheet" href="owlcarousel/owl.carousel.min.css">
<link rel="stylesheet" href="owlcarousel/owl.theme.default.min.css">

html формат

<div class="owl-carousel owl-theme">
    <div class="item"><h4>1</h4></div>
    <div class="item"><h4>2</h4></div>
    <div class="item"><h4>3</h4></div>
    <div class="item"><h4>4</h4></div>
    <div class="item"><h4>5</h4></div>
    <div class="item"><h4>6</h4></div>
    <div class="item"><h4>7</h4></div>
    <div class="item"><h4>8</h4></div>
    <div class="item"><h4>9</h4></div>
    <div class="item"><h4>10</h4></div>
    <div class="item"><h4>11</h4></div>
    <div class="item"><h4>12</h4></div>
</div>

добавьте эти js-файлы

<script src="jquery.min.js"></script>
<script src="owlcarousel/owl.carousel.min.js"></script>

теперь вызывайте карусель

$('.owl-carousel').owlCarousel({
    loop:true,
    margin:10,
    nav:true,
    responsive:{
        0:{
            items:1
        },
        600:{
            items:3
        },
        1000:{
            items:5
        }
    }
})  

теперь все готово.следуйте документации для получения дополнительных опций

...