Выпадающая меню на всю ширину

177
17 января 2019, 02:20

Всем привет.

Есть выпадающая меню на всю ширину экрана .Изначально было 2 панели (festival , media).Теперь мне надо добавить третий панель выпадающий(calendar).

И так как код не я писал мне было очень трудно разобратсья (и код написан очень криво ) но как то я вник в суть и понял(не польностю).Третий панель я добавил но он не работает так как надо.

И скорее всего (99%) проблема тут

case 'festival': 
    visiOne = "media";
    break;
case "media":  
    visiOne = 'festival';
    break;  
case 'all':

Тут не написано switch условие case для calendar

Даже если я напишу case "calendar" я не знаю какое значение мне дать visiOne (чтобы все работало) так как не очень понимаю именно эту часть кода

Внизу в примере я написал и оставил эту часть так как есть и как вы видите первый и последний блока открываетсья и закрываетсья без проблем но только у второго есть проблемы (и скорее всего проблема в коде там где я указал).Средний тоже открываетсья и закрываетсья без проблем но если одновременно открыть после него другой блок или открыть его потом другой блок тогда можно увидеть баги.

В CSS проблем нету можете туда не смотреть там много кода но проблем там нету это точно.

И если кто нибудь предложит упростить этот код любыми способами буду при много благодарен

Очень прошу помощи.

$(document).ready(function () { 
	"use strict"; 
	function mineMenu(thisElenent) { 
		var visiOne, visiTwo , visiThree; 
		var thisHide = thisElenent; 
		switch(thisHide) { 
			case 'festival':  
				visiOne = "media"; 
				break; 
			case "media":   
				visiOne = 'festival'; 
				break; 
 
			case 'all':  
				visiOne = 'festival', visiTwo = "media", visiThree = "calendar"; 
				 
				if ($('#'+visiOne).is(":visible")){ 
					$('#'+visiOne).hide().animate({top: '-400px'}, 500); 
				} 
				if ($('#'+visiTwo).is(":visible")){ 
					$('#'+visiTwo).hide().animate({top: '-400px'}, 500); 
				} 
				if ($('#'+visiThree).is(":visible")){ 
					$('#'+visiThree).hide().animate({top: '-400px'}, 500); 
				} 
				$('#menuClose').hide(); 
				break; 
			} 
		if ($('#'+visiOne).is(":visible")){ 
			$('#'+visiOne).hide().animate({top: '-400px'}, 500); 
		} 
		if ($('#'+visiTwo).is(":visible")){ 
			$('#'+visiTwo).hide().animate({top: '-400px'}, 500); 
		} 
		if ($('#'+thisHide).is(":visible")){ 
			$('#'+thisHide).animate({top: '-400px'}, 500, function(){$('#'+thisHide).hide();}); 
		} 
		else { 
			$('#'+thisHide).show().animate({top: '0rem'}, 500); 
		} 
		return false; 
	} 
	$('#artistbtn').click(function(){ 
		mineMenu('festival'); 
		$('#menuClose').show(); 
		$(".rotate-art").toggleClass("down");  
		$(".rotate-media , .rotate-calendar").removeClass("down"); 
	}); 
	 
	$('#mediabtn').click(function(){ 
		mineMenu('media'); 
		$('#menuClose').show(); 
		$(".rotate-media").toggleClass("down"); 
		$(".rotate-art , .rotate-calendar").removeClass("down"); 
	}); 
	 
	$('#calendarbtn').click(function(){ 
		mineMenu('calendar'); 
		$('#menuClose').show(); 
		$(".rotate-calendar").toggleClass("down"); 
		$(".rotate-art , .rotate-media").removeClass("down"); 
	}); 
	$('#menuClose').click(function(){ 
		mineMenu('all'); 
		$(".rotate-media, .rotate-art ,rotate-calendar").removeClass("down"); 
    }); 
});
.header { 
  height: 47px; 
  position: fixed; 
  top: 0; 
  left: 0; 
  width: 100%; 
  z-index: 5000; 
  background-color: #191919; 
  /*Opacity start*/ 
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 
  filter: alpha(opacity=80); 
  -moz-opacity: 0.80; 
  -khtml-opacity: 0.8; 
  opacity: 0.8; 
  /*Opacity end*/ 
  font-weight: 400; 
  letter-spacing: 3.4px; 
  text-align: center; 
} 
.header h1 { 
  margin: 0; 
  margin-left: 60px; 
} 
.header h1 a { 
  float: left; 
  line-height: 1.5; 
  width: auto; 
  max-height: 47px; 
  color: #fff; 
} 
.header h1 a img { 
  width: auto; 
  height: 47px; 
} 
.header nav { 
  width: 60%; 
  margin: 0 auto; 
  position: relative; 
  z-index: 5000; 
} 
.header nav .menu { 
  position: relative; 
  display: flex; 
  justify-content: space-around; 
  text-decoration: none; 
  list-style-type: none; 
  margin: 0; 
  height: 47px; 
  line-height: 3; 
} 
.header nav .menu .hide .lang-panel { 
  display: none; 
} 
.header nav .menu .hide .lang-panel ul { 
  display: flex; 
  /* flex-grow: 1; */ 
  width: 100%; 
  list-style-type: none; 
} 
.header nav .menu .hide .lang-panel ul li { 
  flex-grow: 1; 
} 
.header nav .menu li a { 
  text-decoration: none; 
  color: #fff; 
} 
.header nav .menu #artistbtn a .fas { 
  left: 8%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
.header nav .menu #mediabtn { 
  position: relative; 
} 
.header nav .menu #mediabtn a .fas { 
  right: 37.5%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
.header nav .menu #calendar { 
  position: relative; 
} 
.header nav .menu #calendar a .fas { 
  right: 37.5%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
 
.rotate-art { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-media { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-calendar { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-art.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.rotate-media.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.rotate-calendar.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.subMenu ul { 
  display: block; 
} 
 
.subMenu { 
  position: absolute; 
  top: 0; 
  width: 100%; 
  height: 168px; 
  background-color: #191919; 
  /*Opacity start*/ 
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 
  filter: alpha(opacity=80); 
  -moz-opacity: 0.80; 
  -khtml-opacity: 0.8; 
  opacity: 0.8; 
  z-index: 98; 
} 
.subMenu ul { 
  height: 100%; 
  padding-top: 47px; 
  list-style: none; 
  display: flex; 
  margin-left: 24vw; 
} 
.subMenu li { 
  position: relative; 
  float: left; 
  width: 121px; 
  height: 71px; 
  margin-top: 22px; 
  margin-left: 40px; 
  padding: 0px; 
  border-radius: 5px; 
  border: solid 3px #C9AC8C; 
  box-sizing: border-box; 
} 
.subMenu li:first-child { 
  margin-left: 0; 
} 
.subMenu li a { 
  display: flex; 
  flex-wrap: wrap; 
  justify-content: center; 
  width: 102%; 
  height: 102%; 
  margin-top: -1%; 
  margin-left: -1%; 
  text-decoration: none; 
  font-size: 12px; 
  font-weight: bold; 
  letter-spacing: 2.2px; 
  text-align: center; 
  color: #D3D3D3; 
  box-sizing: border-box; 
  cursor: pointer; 
  transition: all 0.3s; 
} 
 
#menuClose { 
  display: none; 
  position: fixed; 
  top: 0; 
  left: 0; 
  width: 100vw; 
  height: 100vh; 
  z-index: 97; 
} 
 
#festival, 
#calendar, 
#media { 
  display: none; 
  top: -200px; 
  padding-bottom: 35px; 
  position: fixed; 
}
<link href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" rel="stylesheet"/> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<header class="header" id="menu"> 
  <nav> 
    <ul class="menu"> 
      <li id="artistbtn"><a href="#">Festival<i class="fas fa-sort-down rotate-art"></i></a></li> 
      <li id="calendarbtn"><a href="#">Calendar<i class="fas fa-sort-down rotate-calendar"></i></a></li> 
      <li><a href="#">Location</a></li> 
      <li id="mediabtn"><a href="javascript:void(0);">Gallery<i class="fas fa-sort-down rotate-media"></i></a></li> 
      <li><a href="#">News</a></li> 
      <li><a href="#">Contacts</a></li> 
    </ul> 
  </nav>     
</header> 
 <!-- submenu dropdown --> 
<div class="subMenu" id="festival"> 
  <ul> 
    <li><a href="javascript:void(0);">Mission</a></li> 
    <li><a href="javascript:void(0);">Characters</a></li> 
    <li><a href="javascript:void(0);">Festival Team</a></li> 
    <li><a href="javascript:void(0);">Volunteers</a></li> 
  </ul> 
</div> 
<div class="subMenu" id="media"> 
  <ul> 
    <li><a href="javascript:void(0);">Mission</a></li> 
    <li><a href="javascript:void(0);">Characters</a></li> 
    <li><a href="javascript:void(0);">Festival Team</a></li> 
    <li><a href="javascript:void(0);">Volunteers</a></li> 
  </ul> 
</div> 
<div class="subMenu" id="calendar"> 
  <ul> 
    <li><a href="javascript:void(0);">Calendar</a></li> 
  </ul> 
</div> 
<div id="menuClose"></div>

Answer 1

Исправил добавив эту часть к коду

case 'festival': 
    visiOne = 'media'; visiTwo = 'calendar'; visiThree = 'cooper';
    break;
case 'media':  
    visiOne = 'festival'; visiTwo = 'calendar'; visiThree = 'cooper';
    break;
case 'calendar': 
    visiOne = 'festival'; visiTwo = 'media'; visiThree = 'cooper';
    break;
case 'cooper': 
    visiOne = 'festival'; visiTwo = 'calendar'; visiThree = 'media';
    break;

$(document).ready(function () { 
	"use strict"; 
	function mineMenu(thisElenent) { 
		var visiOne, visiTwo , visiThree; 
		var thisHide = thisElenent; 
		switch(thisHide) { 
			case 'festival':  
	visiOne = 'media'; visiTwo = 'calendar'; visiThree = 'cooper'; 
	break; 
case 'media':   
	visiOne = 'festival'; visiTwo = 'calendar'; visiThree = 'cooper'; 
	break; 
	 
case 'calendar':  
	visiOne = 'festival'; visiTwo = 'media'; visiThree = 'cooper'; 
	break; 
	 
case 'cooper':  
	visiOne = 'festival'; visiTwo = 'calendar'; visiThree = 'media'; 
	break; 
 
			case 'all':  
				visiOne = 'festival', visiTwo = "media", visiThree = "calendar"; 
				 
				if ($('#'+visiOne).is(":visible")){ 
					$('#'+visiOne).hide().animate({top: '-400px'}, 500); 
				} 
				if ($('#'+visiTwo).is(":visible")){ 
					$('#'+visiTwo).hide().animate({top: '-400px'}, 500); 
				} 
				if ($('#'+visiThree).is(":visible")){ 
					$('#'+visiThree).hide().animate({top: '-400px'}, 500); 
				} 
				$('#menuClose').hide(); 
				break; 
			} 
		if ($('#'+visiOne).is(":visible")){ 
			$('#'+visiOne).hide().animate({top: '-400px'}, 500); 
		} 
		if ($('#'+visiTwo).is(":visible")){ 
			$('#'+visiTwo).hide().animate({top: '-400px'}, 500); 
		} 
		if ($('#'+thisHide).is(":visible")){ 
			$('#'+thisHide).animate({top: '-400px'}, 500, function(){$('#'+thisHide).hide();}); 
		} 
		else { 
			$('#'+thisHide).show().animate({top: '0rem'}, 500); 
		} 
		return false; 
	} 
	$('#artistbtn').click(function(){ 
		mineMenu('festival'); 
		$('#menuClose').show(); 
		$(".rotate-art").toggleClass("down");  
		$(".rotate-media , .rotate-calendar").removeClass("down"); 
	}); 
	 
	$('#mediabtn').click(function(){ 
		mineMenu('media'); 
		$('#menuClose').show(); 
		$(".rotate-media").toggleClass("down"); 
		$(".rotate-art , .rotate-calendar").removeClass("down"); 
	}); 
	 
	$('#calendarbtn').click(function(){ 
		mineMenu('calendar'); 
		$('#menuClose').show(); 
		$(".rotate-calendar").toggleClass("down"); 
		$(".rotate-art , .rotate-media").removeClass("down"); 
	}); 
	$('#menuClose').click(function(){ 
		mineMenu('all'); 
		$(".rotate-media, .rotate-art ,rotate-calendar").removeClass("down"); 
    }); 
});
.header { 
  height: 47px; 
  position: fixed; 
  top: 0; 
  left: 0; 
  width: 100%; 
  z-index: 5000; 
  background-color: #191919; 
  /*Opacity start*/ 
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 
  filter: alpha(opacity=80); 
  -moz-opacity: 0.80; 
  -khtml-opacity: 0.8; 
  opacity: 0.8; 
  /*Opacity end*/ 
  font-weight: 400; 
  letter-spacing: 3.4px; 
  text-align: center; 
} 
.header h1 { 
  margin: 0; 
  margin-left: 60px; 
} 
.header h1 a { 
  float: left; 
  line-height: 1.5; 
  width: auto; 
  max-height: 47px; 
  color: #fff; 
} 
.header h1 a img { 
  width: auto; 
  height: 47px; 
} 
.header nav { 
  width: 60%; 
  margin: 0 auto; 
  position: relative; 
  z-index: 5000; 
} 
.header nav .menu { 
  position: relative; 
  display: flex; 
  justify-content: space-around; 
  text-decoration: none; 
  list-style-type: none; 
  margin: 0; 
  height: 47px; 
  line-height: 3; 
} 
.header nav .menu .hide .lang-panel { 
  display: none; 
} 
.header nav .menu .hide .lang-panel ul { 
  display: flex; 
  /* flex-grow: 1; */ 
  width: 100%; 
  list-style-type: none; 
} 
.header nav .menu .hide .lang-panel ul li { 
  flex-grow: 1; 
} 
.header nav .menu li a { 
  text-decoration: none; 
  color: #fff; 
} 
.header nav .menu #artistbtn a .fas { 
  left: 8%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
.header nav .menu #mediabtn { 
  position: relative; 
} 
.header nav .menu #mediabtn a .fas { 
  right: 37.5%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
.header nav .menu #calendar { 
  position: relative; 
} 
.header nav .menu #calendar a .fas { 
  right: 37.5%; 
  position: absolute; 
  top: 55%; 
  color: #c9ac8c; 
  line-height: 20px; 
  transition: all 0.5s; 
} 
 
.rotate-art { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-media { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-calendar { 
  -moz-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -webkit-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
  -o-transition: all, 0.5s, cubic-bezier(0, 0, 1, 1); 
} 
 
.rotate-art.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.rotate-media.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.rotate-calendar.down { 
  -webkit-transform: rotate(180deg); 
  -ms-transform: rotate(180deg); 
  transform: rotate(180deg); 
} 
 
.subMenu ul { 
  display: block; 
} 
 
.subMenu { 
  position: absolute; 
  top: 0; 
  width: 100%; 
  height: 168px; 
  background-color: #191919; 
  /*Opacity start*/ 
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 
  filter: alpha(opacity=80); 
  -moz-opacity: 0.80; 
  -khtml-opacity: 0.8; 
  opacity: 0.8; 
  z-index: 98; 
} 
.subMenu ul { 
  height: 100%; 
  padding-top: 47px; 
  list-style: none; 
  display: flex; 
  margin-left: 24vw; 
} 
.subMenu li { 
  position: relative; 
  float: left; 
  width: 121px; 
  height: 71px; 
  margin-top: 22px; 
  margin-left: 40px; 
  padding: 0px; 
  border-radius: 5px; 
  border: solid 3px #C9AC8C; 
  box-sizing: border-box; 
} 
.subMenu li:first-child { 
  margin-left: 0; 
} 
.subMenu li a { 
  display: flex; 
  flex-wrap: wrap; 
  justify-content: center; 
  width: 102%; 
  height: 102%; 
  margin-top: -1%; 
  margin-left: -1%; 
  text-decoration: none; 
  font-size: 12px; 
  font-weight: bold; 
  letter-spacing: 2.2px; 
  text-align: center; 
  color: #D3D3D3; 
  box-sizing: border-box; 
  cursor: pointer; 
  transition: all 0.3s; 
} 
 
#menuClose { 
  display: none; 
  position: fixed; 
  top: 0; 
  left: 0; 
  width: 100vw; 
  height: 100vh; 
  z-index: 97; 
} 
 
#festival, 
#calendar, 
#media { 
  display: none; 
  top: -200px; 
  padding-bottom: 35px; 
  position: fixed; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<link href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" rel="stylesheet"/> 
<header class="header" id="menu"> 
  <nav> 
    <ul class="menu"> 
      <li id="artistbtn"><a href="#">Festival<i class="fas fa-sort-down rotate-art"></i></a></li> 
      <li id="calendarbtn"><a href="#">Calendar<i class="fas fa-sort-down rotate-calendar"></i></a></li> 
      <li><a href="#">Location</a></li> 
      <li id="mediabtn"><a href="javascript:void(0);">Gallery<i class="fas fa-sort-down rotate-media"></i></a></li> 
      <li><a href="#">News</a></li> 
      <li><a href="#">Contacts</a></li> 
    </ul> 
  </nav>     
</header> 
 <!-- submenu dropdown --> 
<div class="subMenu" id="festival"> 
  <ul> 
    <li><a href="javascript:void(0);">Mission</a></li> 
    <li><a href="javascript:void(0);">Characters</a></li> 
    <li><a href="javascript:void(0);">Festival Team</a></li> 
    <li><a href="javascript:void(0);">Volunteers</a></li> 
  </ul> 
</div> 
<div class="subMenu" id="media"> 
  <ul> 
    <li><a href="javascript:void(0);">Mission</a></li> 
    <li><a href="javascript:void(0);">Characters</a></li> 
    <li><a href="javascript:void(0);">Festival Team</a></li> 
    <li><a href="javascript:void(0);">Volunteers</a></li> 
  </ul> 
</div> 
<div class="subMenu" id="calendar"> 
  <ul> 
    <li><a href="javascript:void(0);">Calendar</a></li> 
  </ul> 
</div> 
<div id="menuClose"></div>

READ ALSO
WebSocket cookie

WebSocket cookie

Всем привет, коллеги!

156
Как сделать одно модальное окно для всех картинок галереи на сайте

Как сделать одно модальное окно для всех картинок галереи на сайте

Допустим, у меня есть некоторое количество картинок на сайтеЯ хочу, чтобы при клике на изображение открывалось модальное окно с этим изображением

187
Получение и проверка значения атрибута JS -&gt; выполнение операции

Получение и проверка значения атрибута JS -> выполнение операции

Необходимо найти значение data-deadline, которое равно 48 и если истина, то всю строку tr окрасить в красный(допустим)

151
Websocket, object Blob, utf8

Websocket, object Blob, utf8

Есть websocket сервер, который отправляет сообщение в кодировке utf8, на javascript принимаю сообщение и вывожу в алерт, выводиться objetc BlobКак преобразовать...

143