nexAll () / prevAll () и условие с hasClass ()

0

Я начинаю с jQuery (и у меня также плохой английский: p)

У меня проблема с использованием prevAll()/nextAll() jQuery.

Вот мой HTML-код:

<div id="zone-presentation">
    <ul id="nav-pres">
        <li>
            <a class="navigation-pres on" id="nav-intro-pres">
                <img src="images/nav-intro.png" alt="Intro" />
                <span class="cache">
                    Intro
                </span>
            </a>
        </li>
        <li>
            <a class="navigation-pres" id="nav-concep-pres">
                <img src="images/nav-conception.png" alt="Conception" />
                <span class="cache">
                    Conception
                </span>
            </a>
        </li>
        <li>
            <a class="navigation-pres" id="nav-rea-pres">
                <img src="images/nav-realisation.png" alt="Réalisation" />
                <span class="cache">
                    Réalisation
                </span>
            </a>
        </li>
        <li>
            <a class="navigation-pres" id="nav-post-pres">
                <img src="images/nav-post-prod.png" alt="Post-prod" />
                <span class="cache">
                    Post-prod
                </span>
            </a>
        </li>
        <li>
            <a class="navigation-pres" id="nav-diff-pres">
                <img src="images/nav-diffusion.png" alt="Diffusion" />
                <span class="cache">
                    Diffusion
                </span>
            </a>
        </li>
    </ul>
    <div id="content-pres">
        <div id="intro-pres" class="bla-pres"></div>
        <div id="concep-pres" class="bla-pres"></div>
        <div id="rea-pres" class="bla-pres"></div>
        <div id="post-pres" class="bla-pres"></div>
        <div id="diff-pres" class="bla-pres"></div>
    </div>
</div>

Вот мой код jQuery:

   $('#nav-intro-pres').click(function(){
       if($('#intro-pres').css('top','100%')){
           $('#intro-pres').animate({top : '0'});
       } else if($('#intro-pres').css('top','-100%')){
           $('#intro-pres').nextAll('.bla-pres').animate({top : '100%'});
           $('#intro-pres').animate({top : '0'});
       }
   });

$('#nav-concep-pres').click(function(){
if($('#concep-pres').css('top','100%')){
    $('#concep-pres').animate({top : '0'});
    $('#concep-pres').prevAll('.bla-pres').animate({top : '-100%'});
} else if($('#concep-pres').css('top','-100%')){
    $('#concep-pres').nextAll('.bla-pres').animate({top : '100%'});
    $('#concep-pres').animate({top : '0'});
}
});


$('#nav-rea-pres').click(function(){
if($('#rea-pres').css('top','100%')){
    $('#rea-pres').animate({top : '0'});
    $('#rea-pres').prevAll('.bla-pres').animate({top : '-100%'});
} else if($('#rea-pres').css('top','-100%')){
    $('#rea-pres').nextAll('.bla-pres').animate({top : '100%'});
    $('#rea-pres').animate({top : '0'});
}
});

$('#nav-post-pres').click(function(){
if($('#post-pres').css('top','100%')){
    $('#post-pres').animate({top : '0'});
    $('#post-pres').prevAll('.bla-pres').animate({top : '-100%'});
} else if($('#post-pres').css('top','-100%')){
    $('#post-pres').nextAll('.bla-pres').animate({top : '100%'});
    $('#post-pres').animate({top : '0'});
}
});


$('#nav-diff-pres').click(function(){
if($('#diff-pres').css('top','100%')){
    $('#diff-pres').animate({top : '0'});
    $('#diff-pres').prevAll('.bla-pres').animate({top : '-100%'});
} else if($('#diff-pres').css('top','-100%')){
    $('#diff-pres').animate({top : '0'});
}
});

hasClass('on') условие hasClass('on') все работает...

Я знаю, что мой код можно уменьшить, но я не знаю, как из-за моей слабости с jQuery...

Здесь онлайн-версия, это поможет, я думаю: http://www.maximejimenez.fr/test_insieme/index.html Спасибо за вашу драгоценную помощь!

  • 0
    предоставить HTML-разметку и, возможно, jsfiddle. Определить «не работает»? Любая ошибка в консоли?
  • 0
    Привет, хорошо, анимация ({top: '-100%'}) не работает, но у меня нет ошибок ... Все остается (top: '0px'). Я обновил пост с HTML Thx
Показать ещё 6 комментариев
Теги:

2 ответа

0

Вот как я это сделаю

var pages = ['intro', 'concep', 'rea', 'post', 'diff'],
    speed = 600;

$.each(pages, function(_,page) {
    var nav  = $('#nav-' + page + '-pres'),
        pres = $('#' + page + '-pres');

    if ( ! ( nav.hasClass('on') ) ) {
        nav.on('click', function() {
            var flag = $(this).data('flag');
            pres.animate({ top: 0 }, speed)
                .prevAll('.bla-pres')
                .animate({ top : flag ? '-100%' : '100%'}, speed);

            $(this).data('flag', !flag);
        });
    }
});

Это более динамично и позволяет писать один и тот же код снова и снова. Это может потребовать некоторой настройки для работы, поскольку мне не с чем было протестировать.

  • 0
    Кажется, это лучшее решение, чем то, что я написал. Но я не смогу его настроить из-за моих ограниченных навыков ... В этом состоянии это не работает ... Я думаю, что это потому, что ценность top на $(document).ready уже не 100% и не -100% я в отчаянии ...
  • 0
    @ user2866508 - кажется, произошла ошибка, попробуйте и посмотрите, работает ли она
Показать ещё 1 комментарий
0

Проблема в том, что ваши операторы if не делают то, что вы хотите от них делать. Это утверждение:

if($('#rea-pres').css('top','100%')) 

ВСЕГДА будет истинным, потому что $('#rea-pres').css('top','100%') возвращает объект jQuery, который всегда правдивый. И, поскольку это всегда правдиво, вы НИКОГДА не выполняете предложение else для своих if/else if.

Если вы пытаетесь проверить, соответствует ли значение CSS для top равным '100%', вам нужно будет использовать что-то вроде этого:

if($('#rea-pres').css('top') === '100%') 
  • 0
    Хорошо, но я не понимаю, почему, if($('#rea-pres').css('top','-100%')) работает тогда ... Какое может быть решение?
  • 0
    @ user2866508 - Это будет всегда так же. Смотрите в конце моего ответа правильный синтаксис для проверки конкретного значения CSS.
Показать ещё 5 комментариев

Ещё вопросы

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