Горизонтальное скольжение jQuery скользит вниз вместо

0

Я хочу, чтобы горизонтальный слайдер скользил по "страницам" на одном представлении (в Wordpress). Мой код почти работает, но вместо того, чтобы сдвинуть блок по горизонтали, он немного сдвигает страницу вниз (при нажатии кнопки "вниз" на клавиатуре).

Вот мой код:

    <style>
    #main
    {
        overflow: hidden;
    }

    #primary 
    {
        position: relative; 
    }

    div.content div 
    {
        position: absolute;
        width:100%;
        top:25px;
        left:0px;
    }
    #box1 { background: yellow; left:0px;}
    #box2 { background: orange; left:100%; }
    #box3 { background: #838EDE; left:200%; }
    #box4 { background: #FFFCC; left:300%; }
    #box5 { background: red; left:400%; }

    #navlinks li 
    {
        float: left;
        display: inline-block;
        background: #F3F3F3;
        border-top: 1px solid #E5E5E4;
        height: 20px;
        width: 15%;
        text-align: center;
        padding: 10px 0px;
        border-bottom: 1px solid #e5e5e4;
        margin: 0px 5px;
    }

    #navlinks > li.current, #navlinks > li:hover
    {
        background: #cc0000;
        border-color: #A00;
    }

    #navlinks > li a 
    {
        color: #303030;
        text-decoration: none; 
    }

    #navlinks > li.current a, #navlinks > li:hover a 
    {
        color: #fff;
    }

    #navlinks > li.tab1, #navlinks > li.tab5
    {
        margin: 0px;
    }

    #navlinks > li:after
    {
        width: 0px;
        height: 0px;
        border-style: solid;
        border-width: 50px 0 50px 50px;
        border-color: transparent transparent transparent #f3f3f3;
        line-height: 0px;
    }
</style>

<div id="primary" class="site-content">
    <ul id="navlinks">
        <li class="tab tab1 current" data-href="#box1"><a>Link 1</a></li>
        <li class="tab tab2" data-href="#box2"><a>Link 2</a></li>
        <li class="tab tab3" data-href="#box3"><a>Link 3</a></li>
        <li class="tab tab4" data-href="#box4"><a>Link 4</a></li>
        <li class="tab tab5" data-href="#box5"><a>Link 5</a></li>
    </ul>

    <div class="content" role="main">
        <div id="box1">Blok 1</div>
        <div id="box2">Blok 2</div>
        <div id="box3">Blok 3</div>
        <div id="box4">Blok 4</div>
        <div id="box5">Blok 5</div>
    </div><!-- #content -->
</div><!-- #primary -->

<script>
var j = jQuery.noConflict();
j(document).ready(function(j) {
    j(document).on('click', '#navlinks li', function() {
        j('.tab').removeClass('current');
        j(this).addClass('current');

        var panel = j(this).data('href');
        j.scrollTo(panel, 1000);
    });
});
</script>

Любые неизвестные классы или идентификатор, которые вы можете увидеть в тегах <style></style> находятся в #main или нижнем колонтитуле (например, #main). Функция scrollTo() - из плагина.

Я попытался создать jsFiddle, но это оказалось еще хуже:/. Кто-нибудь видит что-то неправильно в моем коде? Заранее спасибо.

UPDATE: я создал jsFiddle с моей текущей настройкой: jsfiddle.net/UkP4X

  • 0
    Горизонтальный означает, что каждый блок должен иметь ширину 100% или в пределах 100% ширины, каждый из этих блоков (id) будет иметь каждые 20%;
  • 0
    @KesaVan Итак, я должен установить ширину всех ящиков на 100%?
Показать ещё 6 комментариев
Теги:
slider
jquery-plugins

2 ответа

1

Вы можете достичь этого, не используя плагин, используя transition css3.

добавьте следующий css:

.content{
 position: relative;
 overflow: hidden;
 clear:both;
}
.content div {
  position:absolute;
  top:0;
  left:0;
  width:100%;
 transition: transform 1s ease-in-out;
}
.show{
 transform:translate(0%);
}
.hide{
 transform:translate(100%);
}

В своем HTML добавьте класс show для первой вкладки, которую вы хотите показать, и примените класс hide для остальных.

Затем измените свой сценарий на

$(document).ready(function (j) {
  $(document).on('click', '#navlinks a', function () {
    var panel = $(this).data('href');
    $('.show').toggleClass('hide').toggleClass('show');
    $(panel).toggleClass('hide').toggleClass('show');
  });
});

проверьте этот JSFiddle

ОБНОВИТЬ

Согласно комментариям, для старой совместимости браузера вы можете комбинировать css и использовать jQuery animate() следующим образом:

CSS:

content{
 position: relative;
 overflow: hidden;
 clear:both;
}
.content div {
 position:absolute;
 top:0;
 width:100%;
 left:100%;
}
div.shown{
 left:0%;
}

в HTML, добавьте класс, shown для div, который должен быть изначально видимым.

сценарий:

$(document).ready(function (j) {
  $(document).on('click', '#navlinks a', function () {
    var panel = $(this).data('href');
    $('.shown').removeClass('shown').css('left','100%');
    $(panel).animate({
        left: '0%'
    },500, function(){
     $(panel).addClass('shown');
    });
  });
});

проверьте этот JSFiddle

  • 0
    Я забыл упомянуть одну проблему: она должна работать для IE6 и выше; _ ;. Есть ли способ, которым я могу достичь этого без CSS3?
  • 0
    @ user1433479 проверь обновление в IE и вернись обратно ко мне :)
Показать ещё 4 комментария
0

Хотя это не ответ на вашу проблему, я могу порекомендовать использовать https://github.com/thebird/Swipe для слайдеров. Он очень прощает и работает на мобильных устройствах.

Чтобы лучше увидеть вашу проблему, я предлагаю вам отформатировать CSS не в строке для лучшей читаемости и использования классов вместо ID для стилизации.

a { 
  margin-right:15px;
  cursor:pointer;
  text-decoration:underline;
  color:blue;
}
  • 0
    Хорошо, я отредактировал код, чтобы сделать его более читабельным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню