#html #jquery #css
#HTML #jquery #css
Вопрос:
Я создал простой аккордеон для некоторого содержимого нижнего колонтитула, который я хочу запускать только тогда, когда ширина окна меньше 600 пикселей. Я пробовал использовать window.resize, но при изменении размера окна выше 600 пикселей функция все еще инициализируется, и я не могу понять, почему.
Если кто-нибудь не против поделиться некоторыми советами по этому поводу, я был бы очень признателен. Я продолжаю ходить по кругу.
JS:
function initializeAccordion() {
var mainToggle = $('.footer-accordion > .footer-column > p');
$('.footer-accordion > .footer-column > .menu').css('display', 'none');
mainToggle.click(function() {
var that = $(this);
var secondLevel = $(this).siblings('.menu');
var allSeconds = $('.footer-accordion > .footer-column > .menu');
if (that.hasClass('is-active')) {
secondLevel.slideUp();
that.removeClass('is-active');
mainToggle.removeClass('is-active');
allSeconds.removeClass('is-active');
allSeconds.slideUp();
} else {
mainToggle.removeClass('is-active');
allSeconds.removeClass('is-active');
allSeconds.slideUp();
secondLevel.slideDown();
that.addClass('is-active');
secondLevel.addClass('is-active');
}
});
};
if ($(window).width() < 600) {
initializeAccordion();
}
$(window).on('resize', function() {
if ($(window).width() < 600) {
initializeAccordion();
}
});
Комментарии:
1. Вам нужно написать
else
условия в своихif
операторах, чтобы сбросить состояние аккордеона, когда страница> 600px
широкая. Это не происходит автоматически. При этом, поскольку все, что вы делаете, это вносите изменения в некоторые классы и выполняете некоторые анимации, я бы настоятельно рекомендовал вам использовать для этого медиазапросы CSS вместо JS. Они будут работать на порядки быстрее и будут более плавными.2. Хорошо, но можете ли вы объяснить, почему событие щелчка по-прежнему срабатывает при изменении размера, скажем, с 400 пикселей до 800 пикселей?
3. Потому что вы прикрепили событие при загрузке страницы и не привязываете его. Используйте
off()
для этого4. О, я понимаю! Хорошо, спасибо, что указали мне правильное направление.
Ответ №1:
Чистое кроссбраузерное решение на JS:
window.onresize = function() {
checkWidth();
}
checkWidth();
function checkWidth() {
var vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)
if (vw < 600) {
//callFunction();
}
}
Комментарии:
1. Еще один отрицательный отзыв, потому что он не имеет никакого отношения к вопросу каким-либо полезным образом
2. Я изменил фоновый переключатель на функцию. Надеюсь, это прояснит ситуацию.