Javascript.RU

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

Объединить два меню в одно!
Здравствуйте!
Имеется два меню на странице:
<div class="header">
	<ul class="menu">
		<li><a href="#">Пункт 1</a></li>
		<li><a href="#">Пункт 1</a></li>
		<li><a href="#">Пункт 2</a></li>
	</ul>
</div>

<div class="sidebar">
	<ul class="menu">
		<li><a href="#">Пункт 1</a></li>
		<li><a href="#">Пункт 1</a></li>
		<li><a href="#">Пункт 2</a></li>
	</ul>
</div>


Необходимо, если разрешение экрана меньше 768px, то пункты меню в блоке с классом sidebar переносились в меню в блоке с классом header. Причем, если страница открывается на планшете с вертикальной ориентацией экрана, а затем повернули планшет горизонтально и разрешение экрана стало больше 768px, то пункты меню должны вернуться на место.

Вот как это можно сделать?

В этой ветке:
https://javascript.ru/forum/misc/441...gojj-blok.html
есть пример по перемещению содержимого блока. Переделал его под себя, получилось так:

if (screen.width <= 768) {
	var one = document.querySelector('.sidebar ul.menu'),
    two = document.querySelector('.header ul.menu');
	
	while (one.lastChild) {
		two.insertBefore(one.lastChild, two.firstChild);
	}	
}

onresize = function(){
	if (screen.width <= 768) {
		var one = document.querySelector('.sidebar ul.menu'),
		two = document.querySelector('.header ul.menu');
		
		while (one.lastChild) {
			two.insertBefore(one.lastChild, two.firstChild);
		}	
	} 
	else {
		// Вот тут надо как-то вернуть всё обратно!
	}
}


Или может быть вообще как-то по другому нужно делать?
Новичок в JS, опыта нет - сам не соображу))
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2017, 11:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

перенос пунктов меню
serhio11,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
window.addEventListener("DOMContentLoaded", function() {
    var sidebar = document.querySelector(".sidebar ul.menu"),
        header = document.querySelector(".header ul.menu"),
        li = sidebar.querySelectorAll("li");

    function resizeMenu() {
        var parent = screen.width <= 768 ? header : sidebar;
        [].forEach.call(li, function(el) {
            parent.appendChild(el)
        })
    }
    resizeMenu();
    window.addEventListener("resize", resizeMenu, false)
}, false);
  </script>
</head>

<body>
<div class="header">
  <ul class="menu">
    <li><a href="#">Пункт 1</a></li>
    <li><a href="#">Пункт 1</a></li>
    <li><a href="#">Пункт 2</a></li>
  </ul>
</div>

<div class="sidebar">
  <ul class="menu">
    <li><a href="#">Пункт 1</a></li>
    <li><a href="#">Пункт 1</a></li>
    <li><a href="#">Пункт 2</a></li>
  </ul>
</div>


</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 29.11.2017, 12:15
Интересующийся
Отправить личное сообщение для serhio11 Посмотреть профиль Найти все сообщения от serhio11
 
Регистрация: 27.01.2014
Сообщений: 10

О! Работает! Спасибо!

Только если ещё раз повторно сменить ориентацию экрана, то меню из сайдбара в хедер уже не переносятся!

Последний раз редактировалось serhio11, 29.11.2017 в 12:21.
Ответить с цитированием
  #4 (permalink)  
Старый 29.11.2017, 12:33
Интересующийся
Отправить личное сообщение для serhio11 Посмотреть профиль Найти все сообщения от serhio11
 
Регистрация: 27.01.2014
Сообщений: 10

Или если изначально разрешение было больше 768px, а потом экран повернули и стало меньше, то пункты меню из сайдбара в хедер не переносятся!
Ответить с цитированием
  #5 (permalink)  
Старый 29.11.2017, 12:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от serhio11
Только если ещё раз повторно сменить ориентацию экрана, то меню из сайдбара в хедер уже не переносятся!
может добавить так?
window.addEventListener("resize", resizeMenu, false);
    window.addEventListener("deviceorientation", resizeMenu, false);
    window.addEventListener("MozOrientation", resizeMenu, false);
Ответить с цитированием
  #6 (permalink)  
Старый 29.11.2017, 12:59
Интересующийся
Отправить личное сообщение для serhio11 Посмотреть профиль Найти все сообщения от serhio11
 
Регистрация: 27.01.2014
Сообщений: 10

Сообщение от рони Посмотреть сообщение
может добавить так?
window.addEventListener("resize", resizeMenu, false);
    window.addEventListener("deviceorientation", resizeMenu, false);
    window.addEventListener("MozOrientation", resizeMenu, false);
Вот сейчас лучше стало. Но почему то не всегда срабатывает. Т.е. при смене ориентации экрана, меню иногда из сайдбара в хедер не переносится! Но чаще переносится, чем нет))
Ответить с цитированием
  #7 (permalink)  
Старый 29.11.2017, 13:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от serhio11
Но почему то не всегда срабатывает
незнаю, не телепат.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена стилей класса Павел Турченко Элементы интерфейса 9 30.10.2015 15:24
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 20:59
Выделение активных пунктов многоуровневого меню на jQuery Letto Элементы интерфейса 2 04.12.2013 15:30
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03