Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.02.2018, 11:22
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

jQuery и адаптивность
Задача следующая:
Есть макет, в своём первоначальном виде, имеет боковую менюшку. В адаптиве эта менюшка через медиа запрос прячется путём получения left: -192px. В этом же запросе появляется две кнопки для открытия и закрытия менюшки.

Скрипт:
/* Открытие меню */
    $('.nav-toggle').click(function() {
        $('.sidebar').animate({
            left: '0'
        }, 200);
    });


/* Закрытие меню */
    $('.nav-toggle2').click(function() {
        $('.sidebar').animate({
            left: '-192px'
        }, 200);
    });


Всё работает... НО
при масштабировании к первоначальной версии, свойства остаются, т.е. если я в адаптиве скрыл менюшку, а потом отскролил экран, она останется скрытой...

Я понял что применяются инлайновые стили, в связи с этим у меня вопрос, как реализовать данный функционал таким образом, чтобы макет работал так как задуманно главным файлом стилей? Может как то заставить работать скрипты при определённом разрешении, а при его изменении определённые стили сбрасывались? Другими словами - как мне подружить адаптив с jquery?

Последний раз редактировалось kvizor34, 08.02.2018 в 11:24.
Ответить с цитированием
  #2 (permalink)  
Старый 08.02.2018, 11:40
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>


в чем сложность?
Ответить с цитированием
  #3 (permalink)  
Старый 08.02.2018, 11:49
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Сообщение от j0hnik Посмотреть сообщение
<!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>


в чем сложность?
Ещё раз повторяю - в ПК версии меню отображается по умолчанию, а в мобильной версии прячется и вылезает по нажатию на кнопку, которая тоже появляется только в мобильной версии.
Вы написали код который демонстрирует работу медиа запросов, я знаю как работают медиа запросы, у меня другой вопрос.
Ответить с цитированием
  #4 (permalink)  
Старый 08.02.2018, 12:17
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от kvizor34 Посмотреть сообщение
Может как то заставить работать скрипты при определённом разрешении, а при его изменении определённые стили сбрасывались? Другими словами - как мне подружить адаптив с jquery?
window.matchMedia('(max-width: 600px)').addListener(e=>{
		if (e.matches) alert();
	});


может есть медиа события есть события resize.
Ответить с цитированием
  #5 (permalink)  
Старый 08.02.2018, 12:21
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Сообщение от j0hnik Посмотреть сообщение
window.matchMedia('(max-width: 600px)').addListener(e=>{
		if (e.matches) alert();
	});


может есть медиа события есть события resize.
Понял, спасибо! Сейчас попробую!
Ответить с цитированием
  #6 (permalink)  
Старый 08.02.2018, 13:10
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Всё супер!!!
Да действительно заработало!)
Вот что получилось в итоге:
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')
Но консоль выдаёт кучу ошибок на неё, как быть?)
Ответить с цитированием
  #7 (permalink)  
Старый 08.02.2018, 13:14
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от kvizor34 Посмотреть сообщение
дочерний элемент предыдущего соседа...
$(this).prev().children('.class')
Ответить с цитированием
  #8 (permalink)  
Старый 08.02.2018, 13:18
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

УРААААА!!!
Заработало! Спасибо тебе, мудрый человек
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SOS! Не работает скрипт на сайте и не запускается видео Arin Библиотеки/Тулкиты/Фреймворки 6 22.06.2017 14:41
jquery и jquery ui Miraliko jQuery 1 29.04.2017 16:21
Динамический подсчет в таблице muraig jQuery 5 11.10.2014 16:54
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08