Аккордеонный скрипт не работает с barba.js
Вот основной код:
<body>
<div id="barba-wrapper" class="main">
<div class="barba-container">
<div class="accordion">
<div class="accord-header">link</div>
<div class="accord-content">content</div>
</div>
<script src="/scripts/jquery-3.3.1.min.js"></script>
<script src="/scripts/barba.min.js"></script>
<script src="/scripts/scripts.js"></script>
<script>
$(".accordion .accord-header").click(function() {
// for active header definition
$('.accord-header').removeClass('on');
$(this).addClass('on');
// accordion actions
if($(this).next("div").is(":visible")){
$(this).next("div").slideUp(300);
$(this).removeClass('on');
} else {
$(".accordion .accord-content").slideUp(300);
$(this).next("div").slideToggle(300);
}
});
</script>
</div><!-- barba-wrapper -->
</div><!-- barba-container -->
</body>
Проблема в том, что при первой загрузке страницы гармошка работает нормально. Но когда вы переходите на другую страницу и затем возвращаетесь, скрипт больше не работает. Я попытался добавить в конец scripts.js:
Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container) {
eval(container.querySelector("script").innerHTML);
});
Как они предполагают, но это не помогло.
1 ответ
Решена . Проблема заключалась в том, где я это ставил. Вместо того, чтобы поместить его в конец скрипта barba, я добавил это прямо перед:
Barba.Dispatcher.on('transitionCompleted', function(currentStatus, oldStatus, container) {
$(".accordion .accord-header").click(function() {
// for active header definition
$('.accord-header').removeClass('on');
$(this).addClass('on');
// accordion actions
if($(this).next("div").is(":visible")){
$(this).next("div").slideUp(300);
$(this).removeClass('on');
} else {
$(".accordion .accord-content").slideUp(300);
$(this).next("div").slideToggle(300);
}
});
});
});
}(Barba, jQuery));
Важной частью является то, что он был добавлен до
}(Barba, jQuery));
это было уже там, чтобы закончить оригинальный код, а не после этого.