Mega-Site Navigation in CSS and jQuery

	//if you change this breakpoint in the style.css file (or _layout.scss if you use SASS), don't forget to update this value as well
	var MqL = 1170;
	//move nav element position according to window width
	moveNavigation();
	$(window).on('resize', function(){
		(!window.requestAnimationFrame) ? setTimeout(moveNavigation, 300) : window.requestAnimationFrame(moveNavigation);
	});

	//mobile - open lateral menu clicking on the menu icon
	$('.cd-nav-trigger').on('click', function(event){
		event.preventDefault();
		if( $('.cd-main-content').hasClass('nav-is-visible') ) {
			closeNav();
			$('.cd-overlay').removeClass('is-visible');
		} else {
			$(this).addClass('nav-is-visible');
			$('.cd-primary-nav').addClass('nav-is-visible');
			$('.cd-main-header').addClass('nav-is-visible');
			$('.cd-main-content').addClass('nav-is-visible').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){
				$('body').addClass('overflow-hidden');
			});
			toggleSearch('close');
			$('.cd-overlay').addClass('is-visible');
		}
	});

	//open search form
	$('.cd-search-trigger').on('click', function(event){
		event.preventDefault();
		toggleSearch();
		closeNav();
	});

	//close lateral menu on mobile 
	$('.cd-overlay').on('swiperight', function(){
		if($('.cd-primary-nav').hasClass('nav-is-visible')) {
			closeNav();
			$('.cd-overlay').removeClass('is-visible');
		}
	});
	$('.nav-on-left .cd-overlay').on('swipeleft', function(){
		if($('.cd-primary-nav').hasClass('nav-is-visible')) {
			closeNav();
			$('.cd-overlay').removeClass('is-visible');
		}
	});
	$('.cd-overlay').on('click', function(){
		closeNav();
		toggleSearch('close')
		$('.cd-overlay').removeClass('is-visible');
	});


	//prevent default clicking on direct children of .cd-primary-nav 
	$('.cd-primary-nav').children('.has-children').children('a').on('click', function(event){
		event.preventDefault();
	});
	//open submenu
	$('.has-children').children('a').on('click', function(event){
		if( !checkWindowWidth() ) event.preventDefault();
		var selected = $(this);
		if( selected.next('ul').hasClass('is-hidden') ) {
			//desktop version only
			selected.addClass('selected').next('ul').removeClass('is-hidden').end().parent('.has-children').parent('ul').addClass('moves-out');
			selected.parent('.has-children').siblings('.has-children').children('ul').addClass('is-hidden').end().children('a').removeClass('selected');
			$('.cd-overlay').addClass('is-visible');
		} else {
			selected.removeClass('selected').next('ul').addClass('is-hidden').end().parent('.has-children').parent('ul').removeClass('moves-out');
			$('.cd-overlay').removeClass('is-visible');
		}
		toggleSearch('close');
	});

	//submenu items - go back link
	$('.go-back').on('click', function(){
		$(this).parent('ul').addClass('is-hidden').parent('.has-children').parent('ul').removeClass('moves-out');
	});

	function closeNav() {
		$('.cd-nav-trigger').removeClass('nav-is-visible');
		$('.cd-main-header').removeClass('nav-is-visible');
		$('.cd-primary-nav').removeClass('nav-is-visible');
		$('.has-children ul').addClass('is-hidden');
		$('.has-children a').removeClass('selected');
		$('.moves-out').removeClass('moves-out');
		$('.cd-main-content').removeClass('nav-is-visible').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){
			$('body').removeClass('overflow-hidden');
		});
	}

	function toggleSearch(type) {
		if(type=="close") {
			//close serach 
			$('.cd-search').removeClass('is-visible');
			$('.cd-search-trigger').removeClass('search-is-visible');
			$('.cd-overlay').removeClass('search-is-visible');
		} else {
			//toggle search visibility
			$('.cd-search').toggleClass('is-visible');
			$('.cd-search-trigger').toggleClass('search-is-visible');
			$('.cd-overlay').toggleClass('search-is-visible');
			if($(window).width() > MqL && $('.cd-search').hasClass('is-visible')) $('.cd-search').find('input[type="search"]').focus();
			($('.cd-search').hasClass('is-visible')) ? $('.cd-overlay').addClass('is-visible') : $('.cd-overlay').removeClass('is-visible') ;
		}
	}

	function checkWindowWidth() {
		//check window width (scrollbar included)
		var e = window, 
            a = 'inner';
        if (!('innerWidth' in window )) {
            a = 'client';
            e = document.documentElement || document.body;
        }
        if ( e[ a+'Width' ] >= MqL ) {
			return true;
		} else {
			return false;
		}
	}

	function moveNavigation(){
		var navigation = $('.cd-nav');
  		var desktop = checkWindowWidth();
        if ( desktop ) {
			navigation.detach();
			navigation.insertBefore('.cd-header-buttons');
		} else {
			navigation.detach();
			navigation.insertAfter('.cd-main-content');
		}
	}
			
<header class="cd-main-header">
		<a class="cd-logo" href="#0"><img src="images/cd-logo.svg" alt="Logo"></a>

		<ul class="cd-header-buttons">
			<li><a class="cd-search-trigger" href="#cd-search">Search<span></span></a></li>
			<li><a class="cd-nav-trigger" href="#cd-primary-nav">Menu<span></span></a></li>
		</ul> <!-- cd-header-buttons -->
	</header>

	<main class="cd-main-content">
		<!-- your content here -->
	</main>

	<div class="cd-overlay"></div>

	<nav class="cd-nav">
		<ul id="cd-primary-nav" class="cd-primary-nav is-fixed">
			<li class="has-children">
				<a href="http://codyhouse.co/?p=409">Clothing</a>

				<ul class="cd-secondary-nav is-hidden">
					<li class="go-back"><a href="#0">Menu</a></li>
					<li class="see-all"><a href="http://codyhouse.co/?p=409">All Clothing</a></li>
					<li class="has-children">
						<a href="http://codyhouse.co/?p=409">Accessories</a>

						<ul class="is-hidden">
							<li class="go-back"><a href="#0">Clothing</a></li>
							<li class="see-all"><a href="http://codyhouse.co/?p=409">All Accessories</a></li>
							<li class="has-children">
								<a href="#0">Beanies</a>

								<ul class="is-hidden">
									<li class="go-back"><a href="#0">Accessories</a></li>
									<li class="see-all"><a href="http://codyhouse.co/?p=409">All Benies</a></li>
									<li><a href="http://codyhouse.co/?p=409">Caps & Hats</a></li>
									<li><a href="http://codyhouse.co/?p=409">Gifts</a></li>
									<li><a href="http://codyhouse.co/?p=409">Scarves & Snoods</a></li>
								</ul>
							</li>
							<li class="has-children">
								<a href="#0">Caps & Hats</a>

								<ul class="is-hidden">
									<li class="go-back"><a href="#0">Accessories</a></li>
									<li class="see-all"><a href="http://codyhouse.co/?p=409">All Caps & Hats</a></li>
									<li><a href="http://codyhouse.co/?p=409">Beanies</a></li>
									<li><a href="http://codyhouse.co/?p=409">Caps</a></li>
									<li><a href="http://codyhouse.co/?p=409">Hats</a></li>
								</ul>
							</li>
							<li><a href="http://codyhouse.co/?p=409">Glasses</a></li>
							<li><a href="http://codyhouse.co/?p=409">Gloves</a></li>
							<li><a href="http://codyhouse.co/?p=409">Jewellery</a></li>
							<li><a href="http://codyhouse.co/?p=409">Scarves</a></li>
							<li><a href="http://codyhouse.co/?p=409">Wallets</a></li>
							<li><a href="http://codyhouse.co/?p=409">Watches</a></li>
						</ul>
					</li>

					<li class="has-children">
						<a href="http://codyhouse.co/?p=409">Bottoms</a>

						<ul class="is-hidden">
							<li class="go-back"><a href="#0">Clothing</a></li>
							<li class="see-all"><a href="http://codyhouse.co/?p=409">All Bottoms</a></li>
							<li><a href="http://codyhouse.co/?p=409">Casual Trousers</a></li>
							<li class="has-children">
								<a href="#0">Jeans</a>

								<ul class="is-hidden">
									<li class="go-back"><a href="#0">Bottoms</a></li>
									<li class="see-all"><a href="http://codyhouse.co/?p=409">All Jeans</a></li>
									<li><a href="http://codyhouse.co/?p=409">Ripped</a></li>
									<li><a href="http://codyhouse.co/?p=409">Skinny</a></li>
									<li><a href="http://codyhouse.co/?p=409">Slim</a></li>
									<li><a href="http://codyhouse.co/?p=409">Straight</a></li>
								</ul>
							</li>
							<li><a href="#0">Leggings</a></li>
							<li><a href="#0">Shorts</a></li>
						</ul>
					</li>

					<li class="has-children">
						<a href="http://codyhouse.co/?p=409">Jackets</a>

						<ul class="is-hidden">
							<li class="go-back"><a href="#0">Clothing</a></li>
							<li class="see-all"><a href="http://codyhouse.co/?p=409">All Jackets</a></li>
							<li><a href="http://codyhouse.co/?p=409">Blazers</a></li>
							<li><a href="http://codyhouse.co/?p=409">Bomber jackets</a></li>
							<li><a href="http://codyhouse.co/?p=409">Denim Jackets</a></li>
							<li><a href="http://codyhouse.co/?p=409">Duffle Coats</a></li>
							<li><a href="http://codyhouse.co/?p=409">Leather Jackets</a></li>
							<li><a href="http://codyhouse.co/?p=409">Parkas</a></li>
						</ul>
					</li>

					<li class="has-children">
						<a href="http://codyhouse.co/?p=409">Tops</a>

						<ul class="is-hidden">
							<li class="go-back"><a href="#0">Clothing</a></li>
							<li class="see-all"><a href="http://codyhouse.co/?p=409">All Tops</a></li>
							<li><a href="http://codyhouse.co/?p=409">Cardigans</a></li>
							<li><a href="http://codyhouse.co/?p=409">Coats</a></li>
							<li><a href="http://codyhouse.co/?p=409">Hoodies & Sweatshirts</a></li>
							<li><a href="http://codyhouse.co/?p=409">Jumpers</a></li>
							<li><a href="http://codyhouse.co/?p=409">Polo Shirts</a></li>
							<li><a href="http://codyhouse.co/?p=409">Shirts</a></li>
							<li class="has-children">
								<a href="#0">T-Shirts</a>

								<ul class="is-hidden">
									<li class="go-back"><a href="#0">Tops</a></li>
									<li class="see-all"><a href="http://codyhouse.co/?p=409">All T-shirts</a></li>
									<li><a href="http://codyhouse.co/?p=409">Plain</a></li>
									<li><a href="http://codyhouse.co/?p=409">Print</a></li>
									<li><a href="http://codyhouse.co/?p=409">Striped</a></li>
									<li><a href="http://codyhouse.co/?p=409">Long sleeved</a></li>
								</ul>
							</li>
							<li><a href="http://codyhouse.co/?p=409">Vests</a></li>
						</ul>
					</li>
				</ul>
			</li>

			<li class="has-children">
				<a href="http://codyhouse.co/?p=409">Gallery</a>

				<ul class="cd-nav-gallery is-hidden">
					<li class="go-back"><a href="#0">Menu</a></li>
					<li class="see-all"><a href="http://codyhouse.co/?p=409">Browse Gallery</a></li>
					<li>
						<a class="cd-nav-item" href="http://codyhouse.co/?p=409">
							<img src="images/img.jpg" alt="Product Image">
							<h3>Product #1</h3>
						</a>
					</li>

					<li>
						<a class="cd-nav-item" href="http://codyhouse.co/?p=409">
							<img src="images/img.jpg" alt="Product Image">
							<h3>Product #2</h3>
						</a>
					</li>

					<li>
						<a class="cd-nav-item" href="http://codyhouse.co/?p=409">
							<img src="images/img.jpg" alt="Product Image">
							<h3>Product #3</h3>
						</a>
					</li>

					<li>
						<a class="cd-nav-item" href="http://codyhouse.co/?p=409">
							<img src="images/img.jpg" alt="Product Image">
							<h3>Product #4</h3>
						</a>
					</li>
				</ul>
			</li>

			<li class="has-children">
				<a href="http://codyhouse.co/?p=409">Services</a>
				<ul class="cd-nav-icons is-hidden">
					<li class="go-back"><a href="#0">Menu</a></li>
					<li class="see-all"><a href="http://codyhouse.co/?p=409">Browse Services</a></li>
					<li>
						<a class="cd-nav-item item-1" href="http://codyhouse.co/?p=409">
							<h3>Service #1</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-2" href="http://codyhouse.co/?p=409">
							<h3>Service #2</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-3" href="http://codyhouse.co/?p=409">
							<h3>Service #3</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-4" href="http://codyhouse.co/?p=409">
							<h3>Service #4</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-5" href="http://codyhouse.co/?p=409">
							<h3>Service #5</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-6" href="http://codyhouse.co/?p=409">
							<h3>Service #6</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-7" href="http://codyhouse.co/?p=409">
							<h3>Service #7</h3>
							<p>This is the item description</p>
						</a>
					</li>

					<li>
						<a class="cd-nav-item item-8" href="http://codyhouse.co/?p=409">
							<h3>Service #8</h3>
							<p>This is the item description</p>
						</a>
					</li>
				</ul>
			</li>

			<li><a href="http://codyhouse.co/?p=409">Standard</a></li>
		</ul> <!-- primary-nav -->
	</nav> <!-- cd-nav -->

	<div id="cd-search" class="cd-search">
		<form>
			<input type="search" placeholder="Search...">
		</form>
	</div>
				
ページトップへ戻る