нажмите на правую часть экрана, чтобы перейти на 1-е место после последнего слайда. - PullRequest
2 голосов
/ 26 сентября 2019

Когда я нажимаю на текущий слайд (первый) в правой части экрана, скользит справа налево и показывает второй слайд и 3-й, 4-й, 5-й слайд, но при следующем щелчке (5-й раз) не показывать 1-й слайди есть пустой экран.Кроме того, когда я нажимаю на текущий слайд (первый) в левой части экрана, скользит слева направо и показывает 5-й слайд и 4-й, 3-й, 2-й слайд хорошо, но при следующем щелчке (5-й раз) не показывать 1-й слайд и тампустой экран.Номер слайда хорошо работает при нажатии левой и правой стороны экрана.Я дал ниже html структуру и jquery.Может кто-нибудь улучшить это, чтобы решить эту проблему.Заранее благодаримсторона экрана, должен показываться 1-й слайд, а при щелчке левой стороны экрана, 1-й слайд показывает после второго слайда.

1 Ответ

0 голосов
/ 26 сентября 2019

ОК, я получил решение, но я изменил подход.здесь новый код.Я также добавил некоторую отзывчивость к слайдеру.Теперь вместо z-index я проверяю поле left-left, чтобы анимировать контейнер слайдера, а не только 1 слайд за раз, поэтому мне не нужно знать, что это за текущий слайд, чтобы найти следующий, мне просто нужнополе меньше 0 и больше, чем разница между шириной .slide и шириной .slider-wrapper.Таким образом, когда вы щелкаете слева, я вычитаю на полях слева текущую ширину .slide и добавляю ее при щелчке правой кнопкой мыши.Взгляните на функцию resize_slider().Последнее, но не для релевантности, установка .stop() перед .animate() предотвращает наложение анимаций.PS вы можете использовать тот же подход для анимации с помощью CSS-преобразования

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>


        <style>
            body{ margin: 0; padding:0}
            .home-slide{
                overflow: hidden;
                width: 100%;
            }
            .slide-wrapper {
                display: flex;
                flex-direction: row;
                overflow: hidden;
                width: 100%;
                height: 80vh;
                color: #fff;
               
            }
            .slide {
                position: relative;
                height: 100%;
                min-height: 100%;
                padding: 100px 40px;
                
                -webkit-transition: linear .5s;
                transition: linear .5s;
                cursor: pointer;
                border: none;
                box-sizing: border-box;
                font-size: 20px
            }

            .slide:nth-child(1) {
                background-color: #F2358D;
                /*--magenta shade--*/

            }
            .slide:nth-child(2) {
                background-color: #04D9B2;
                /*--cyne shade--*/

            }
            .slide:nth-child(3) {
                background-color: #F2C53D;
                /*--yellow shade--*/

            }
            .slide:nth-child(4) {
                background-color: #6a8aff;
                /*--blue shade--*/

            }
            .slide:nth-child(5) {
                background-color: #3FFF42;
                /*--green shade--*/

            }

            .slide-number {
                display: flex;
                max-width: 100%;
                position: absolute;
                bottom: 0;
                left: 45%;
                transform-x: 50%;
                text-align: center;
                z-index: 999;
            }

            .slide-number div {
                padding: 20px 10px;
                opacity: .5;
            }
            .slide-number div.active {
                opacity: 1;
            }

        </style>
    </head>
    <body>
        <div class="home-slide">
            <div class="slide-wrapper">
                <div class="slide">slide 1</div>
                <div class="slide">slide 2</div>
                <div class="slide">slide 3</div>
                <div class="slide">slide 4</div>
                <div class="slide">slide 5</div>
            </div>
        </div>
        <div class="slide-number">
            <div class="active">1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
        </div>
        
        <script>
            var $numbers,$slides,numSlides,isSliding,currSlide = 1;

            console.log('numSlides', numSlides)
            $(document).ready(function () {
                resizeSlides();

                $('.slide').click(function (e) {
                    var pWidth = $(this).outerWidth(); //use .outerWidth() if you want borders
                    var pOffset = $(this).offset();
                    var x = e.pageX - pOffset.left;
                    console.log($('.slide-wrapper').css('marginLeft'))
                    var posX = Math.floor(parseInt($('.slide-wrapper').css('marginLeft').replace('px')));
                    var sliderW = Math.floor($('.slide-wrapper').width())
                    var direction;
                    
                    if (pWidth / 2 > x) {
                        direction = 'left';

                    } else if (pWidth / 2 < x) {
                        direction = 'right';
                    }
                    
                    console.log('(pWidth - sliderW)',(pWidth - sliderW));
                    
                    console.log('posX', posX);
                    console.log('typeof posX', typeof posX);
                    console.log('pWidth', pWidth);
                    console.log('sliderW', sliderW);
                    console.log('(pWidth - sliderW)',(pWidth - sliderW));

                    if (!isSliding) {
                        isSliding = true;
                        if (direction == 'left' && posX < 0) {
                            $('.slide-wrapper').stop().animate({'marginLeft': '+=' + pWidth + 'px'}, 500, function () {
                                currSlide--;
                                $('.slide-number .active').removeClass('active')
                                $('.slide-number div:nth-child(' + (currSlide) + ')').addClass('active');
                                
isSliding = false;
                            });
                        } else if (direction == 'right' && (pWidth - sliderW) < posX) {
                            $('.slide-wrapper').stop().animate({'marginLeft': '-=' + pWidth + 'px'}, 500, function () {
                                currSlide++;
                                $('.slide-number .active').removeClass('active')
                                $('.slide-number div:nth-child(' + (currSlide) + ')').addClass('active');
                                 
isSliding = false;
                            });
                        }
                        setTimeout(function () {
                            isSliding = false;
                        }, 500)
                    }
                });

            })



            $(window).resize(function () {
                resizeSlides();
            });
            function  resizeSlides() {
                $numbers = $('.slide-number').children();
                $slides = $('.slide');
                numSlides = $slides.length;
                isSliding = false;
                currSlide = 1;
                var sliderW = Math.floor($('.home-slide').width());

                var numSlides = $('.slide-number').children().length;
                $('.slide').each(function () {
                    $(this).outerWidth(sliderW); 
                });
                $('.slide-wrapper').width(sliderW * numSlides);
            }
        </script>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...