Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2018, 14:15
Интересующийся
Отправить личное сообщение для goofy1337 Посмотреть профиль Найти все сообщения от goofy1337
 
Регистрация: 11.04.2018
Сообщений: 10

Слайдер на классах
Всем привет. У меня есть код слайдера, реализованный с помощью ооп, но есть некоторые неполадки в коде, а именно, если переход начинается с первого слайда и идет дальше сам, то на последнем слайде он выходит за рамки, но в то же время если на последнем слайде нажать кнопку следующий слайд, то он переходит на первый, как и требуется. И еще был бы очень благодарен, если бы вы откорректировали мой ооп код.

Заранее благодарю за помощь.

var slideWrapper = function() {
        this.slideNow = 1;
        this.translateWidth = 0;
        this.slideCount = $('#slider').children().length;
    
    
    this.nextSlide = function() {
        if (this.slideNow == this.slideCount || this.slideNow <= 0 || this.slideNow > this.slideCount) {
            $('#slider').css('transform', 'translate(0, 0)');

            this.slideNow = 1;
        }

        else {
            this.translateWidth = -$('#viewport').width() * (this.slideNow);

            $('#slider').css({
                    'transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-webkit-transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-ms-transform': 'translate(' + this.translateWidth + 'px, 0)'
                }); 

            this.slideNow++;
        }
    };

    this.prevSlide = function() {
        if (this.slideNow == 1 || this.lideNow <= 0 || this.slideNow > this.slideCount) {
            this.translateWidth = -$('#viewport').width() * (this.slideCount - 1);

            $('#slider').css({
                    'transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-webkit-transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-ms-transform': 'translate(' + this.translateWidth + 'px, 0)'
                }); 

            this.slideNow = this.slideCount;
        } 

        else {
            this.translateWidth = -$('#viewport').width() * (this.slideNow - 2);

            $('#slider').css({
                    'transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-webkit-transform': 'translate(' + this.translateWidth + 'px, 0)',
                    '-ms-transform': 'translate(' + this.translateWidth + 'px, 0)'
                }); 

            this.slideNow--;
        }
    };
};

$(document).ready(function() {
    var slideInterval = 3000;
    var navButtonId = 0;
     
    var mainSlideWrapper = new slideWrapper();
    
    
    var switchInterval = setInterval(mainSlideWrapper.nextSlide, slideInterval);

    $('#viewport').hover(function() {
        clearInterval(switchInterval);
    }, function() {
        switchInterval = setInterval(mainSlideWrapper.nextSlide, slideInterval);
    });

    $('#next-button').click(function() {
        mainSlideWrapper.nextSlide();
    });

    $('#prev-button').click(function() {
        mainSlideWrapper.prevSlide();
    });

    $('.slide-nav-button').click(function() {
        navButtonId = $(this).index();

        if (navButtonId + 1 != mainSlideWrapper.slideNow) {
            mainSlideWrapper.translateWidth = -$('#viewport').width() * (navButtonId);
            
            $('#slider').css({
                'transform': 'translate(' + mainSlideWrapper.translateWidth + 'px, 0)',
                '-webkit-transform': 'translate(' + mainSlideWrapper.translateWidth + 'px, 0)',
                '-ms-transform': 'translate(' + mainSlideWrapper.translateWidth + 'px, 0)'
            }); 
            
            mainSlideWrapper.slideNow = navButtonId + 1;
        }
    });
});


Вот код HTML

<!DOCTYPE html>
<html>
    <head>
        <title>Slider</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/main.css">
        <link rel="shortcut icon" href="#">
        <script src="js/jquery-3.3.1.js"></script> 
    </head>
    <body>
        <div id="block-for-slider">
            <div id="viewport">
                <ul id="slider">
                    <li class="slide"><img src="img/img1.jpg" alt="1" class="slide-img"></li>
                    <li class="slide"><img src="img/img2.jpg" alt="2" class="slide-img"></li>
                    <li class="slide"><img src="img/img3.jpg" alt="3" class="slide-img"></li>
                </ul>
                <div id="buttons">
                    <div id="prev-button"></div>
                    <div id="next-button"></div>
                </div>
                <ul id="nav-buttons">
                    <li class="slide-nav-button"></li>
                    <li class="slide-nav-button"></li>
                    <li class="slide-nav-button"></li>
                </ul>
            </div>
        </div>
        <script src="js/script.js"></script>
    </body>
</html>

Последний раз редактировалось goofy1337, 15.04.2018 в 18:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слайдер jQuery на классах goofy1337 jQuery 3 13.04.2018 15:14
вкладки и слайдер slicks ildar94 Элементы интерфейса 6 16.01.2018 15:29
Как поместить слайдер в модальное окно? ИщуПомощь Элементы интерфейса 2 24.08.2017 20:27
Новостной слайдер на bxslider malsyst Библиотеки/Тулкиты/Фреймворки 3 02.09.2013 10:32
jQuery UI Slider - как синхронизировать слайдер со значнием? frightened jQuery 0 24.07.2011 00:19