2017
17
Янв

Горизонтальный слайдер аккордеон

grigoriev
10730
Горизонтальный слайдер аккордеон
скачать горизонтальный слайдер аккордеон
DOWNLOAD
посмотреть горизонтальный слайдер аккордеон
DEMO

Один мой знакомый попросил помочь ему интегрировать в его лэндинг горизонтальный слайдер аккордеон (horizontal accordion). Я решил совместить полезное с полезным. Так и родилась эта заметка о создании горизонтального аккордеона на jquery.

И так приступим к созданию горизонтального слайдера аккордеона. По традиции начнём с html и css кода. Наш слайдер будет представлять собой ul список внутри которого будут находиться блоки li с классом item, которые будут представлять из себя слайды слайдера(извините за тавтологию). В блок li у нас будут входить блок с классом trigger и классом content. Блок с классом trigger выполняет функцию корешка с названием слайда, который торчит когда слайдер закрытый. Блок с классом content представляет собой сам слайд. У меня в слайде будет заголовок и рыбный текст. Ниже показан листинг html кода нашего слайдера.

                                     
<ul class="menu">
    <li class="item">
        <div class="trigger">
            <p>SLIDE 1 SLIDE 1</p>
        </div>
        <div class="content">
            <h3>SLIDE 1</h3>
            <p>text1</p>
        </div>
    </li>
     <li class="item">
        <div class="trigger">
            <p>SLIDE 2 SLIDE 2</p>
        </div>
        <div class="content">
            <h3>SLIDE 2</h3>
            <p>text2</p>
        </div>
    </li>
     <li class="item">
        <div class="trigger">
            <p>SLIDE 3 SLIDE 3</p>
        </div>
        <div class="content">
            <h3>SLIDE 3</h3>
            <p>text3</p>
        </div>
    </li>
</ul>

Листинг css кода

ul{
    background-color: #0033cc;
    position: absolute;
    height: 500px;
    top: 100;
    right: 0;
    list-style: none;
}
li{
   height: 100%;
/*что бы слайды стали горизонтальные*/
   float: left;
}
.trigger{
    height: 100%;
    width: 80px;
    background-color: #008200;
    border: 1px solid #49FFA6;
    position: relative;
    float: left;
    cursor: pointer;
}

.trigger p{
    text-align: center;
/*что бы текст был одной строкой*/
    white-space: nowrap;
/*для горизонтальности текста*/
    -webkit-transform: rotate(-90deg);
    transform: rotate(-90deg);
    position: absolute;
    top: 50%;
    left: -50px;
    font-weight: bold;
}
.content{
    float: left;
    background-color: #000;
/*вся магия в том что убираем ширину 
блока с контентом, а при клике js 
добавляет 530 px*/
    width: 0;
/*обрезает всё что уходит за рамки контейнера*/
    overflow: hidden;
}
.content p, .content h3{
    width: 500px;
    color: #fff;
    padding: 15px;
}

Css код я думаю понятен, не знаю что здесь объяснять. Нужно просто обратить внимание как позиционируются элементы. Теперь перейдём к сердцу нашего слайдера, js коду. Листинг ниже.

                                     
$(function(){
//обрабатываем клик по блоку с классом trigger
$('.trigger').on('click', function(e){
    e.preventDefault();
//получаем нужные нам данные
        var $this = $(this),
        //получаем всё блоки menu
        container = $this.closest('.menu'),
        //получаем li по которому кликнули
        item = $this.closest('.item'),
        //получаем все другие li
        items = container.find('.item'),
        //выбираем из li активный
        activeItem = items.filter('.active'),
        //выбираем из li по которому кликнули блок контен
        content = item.find('.content'),
        //выбираем у li с классом active блок контент
        activeContent = activeItem.find('.content');

        //если нет li с классом active по которому кликнули
        if (!item.hasClass('active')) {
            //убираем класс active
            items.removeClass('active');
            //добавляем active кликнутому
            item.addClass('active');
            //у того у кого был active задаём ширину 0
            activeContent.animate({
                   'width' : '0px'
            });
            //кликнутому 530        
            content.animate({
                   'width' : '530px'
            });
        //иначе
        } else {
            item.removeClass('active');
            content.animate({
                   'width' : '0px'
            });

        }
});

// клик вне аккордеона
$(document).on('click', function (e) {
   var $this = $(e.target);
   if (!$this.closest('.menu').length) {
         $('.content').animate({
               'width' : '0px'
         });
         $('.item').removeClass('active');
   }
});
});

Jquery код я прокомментировал достаточно. По сути мы сначала получили все нужные элементы слайдера в разном положении и задали условия, при котором одному из элементов добавляется width: 530px, а у другого элемента ширина переходит в 0. Вот таким вот способом я написал горизонтальный слайдер аккордеон (horizontal accordion) используя jquery и css.

Поделиться:

Комментарии

ТАМАРА

ТАМАРА

11.11.2018 16:19 Ответить

а разве в Bootstrap этого нет??? Фреймворка вполне достаточно

Роман

Роман

12.03.2019 13:36 Ответить

Только вертикальный.

You have no rights to post comments

Используя данный сайт, вы даете согласие на использование файлов cookie, помогающих мне сделать его удобнее для вас. Уведомление о cookie