jQuery и адаптивность
Задача следующая:
Есть макет, в своём первоначальном виде, имеет боковую менюшку. В адаптиве эта менюшка через медиа запрос прячется путём получения left: -192px. В этом же запросе появляется две кнопки для открытия и закрытия менюшки. Скрипт:
/* Открытие меню */
$('.nav-toggle').click(function() {
$('.sidebar').animate({
left: '0'
}, 200);
});
/* Закрытие меню */
$('.nav-toggle2').click(function() {
$('.sidebar').animate({
left: '-192px'
}, 200);
});
Всё работает... НО при масштабировании к первоначальной версии, свойства остаются, т.е. если я в адаптиве скрыл менюшку, а потом отскролил экран, она останется скрытой... Я понял что применяются инлайновые стили, в связи с этим у меня вопрос, как реализовать данный функционал таким образом, чтобы макет работал так как задуманно главным файлом стилей? Может как то заставить работать скрипты при определённом разрешении, а при его изменении определённые стили сбрасывались? Другими словами - как мне подружить адаптив с jquery? |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.sidebar{
position: relative;
width: 100px;
height: 100px;
background-color: red;
left: 0;
transition: 1s;
}
@media only screen and (max-width:800px) {
.sidebar{
left: -192px;
}
}
</style>
</head>
<body>
<div class="sidebar"></div>
</body>
</html>
в чем сложность? |
Цитата:
Вы написали код который демонстрирует работу медиа запросов, я знаю как работают медиа запросы, у меня другой вопрос. |
Цитата:
window.matchMedia('(max-width: 600px)').addListener(e=>{
if (e.matches) alert();
});
может есть медиа события есть события resize. |
Цитата:
|
Всё супер!!!
Да действительно заработало!)
Вот что получилось в итоге:
var handleMatchMedia = function(mediaQuery) {
if (mediaQuery.matches) {
/* При ширине меньше чем 768px скрипт прячет менюшку */
$('.sidebar').css('left','-192px')
/* Открытие меню кнопкой*/
$('.nav-toggle').click(function() {
$('.sidebar').animate({
left: '0'
}, 200);
});
/* Закрытие меню другой кнопкой*/
$('.nav-toggle2').click(function() {
$('.sidebar').animate({
left: '-192px'
}, 200);
});
/* При ширине выше чем 768px менюшка отображается */
} else {
$('.sidebar').css('left','0')
}
},
mql = window.matchMedia('all and (max-width: 768px)');
handleMatchMedia(mql);
mql.addListener(handleMatchMedia);
У меня возник другой вопрос, появилась необходимость сделать выборку элемента таким образом, чтобы взять дочерний элемент предыдущего соседа... Мне на ум пришла строчка $(this).prev().$('.class') Но консоль выдаёт кучу ошибок на неё, как быть?) |
Цитата:
$(this).prev().children('.class')
|
УРААААА!!!
Заработало! Спасибо тебе, мудрый человек :dance: |
| Часовой пояс GMT +3, время: 04:21. |