イセンチュートリアルサイト
  • CSS
    • スクロールダウン
    • テキストナビゲーション
    • ボタン
    • メニュー
    • 動画
    • 検索
    • 画像リンクの動き
    • 背景の動き
  • Illustrator
  • JS
    • アコーディオンパネル
    • アニメーション
    • エリアの動き
    • ギャラリー
    • グラフ
    • スライド
    • テキストの動き
    • ニュースティッカー
    • ページトップリンク
    • ページ内リンク
    • メニュー
    • モーダルウィンドウ
    • ローディング
  • Photoshop
  • PHP
  • WordPress
    • プラグイン
    • リンク
  • お客様観覧用
    • WEB制作プラン
    • アニメーション
    • グローバルナビゲーション
    • スライド
  • サーバー
    • CPI
  • 未分類
  • 法律
    • 医療法
    • 柔道整復師法
TOP JS メニュー スクロールするとハンバーガーメニューに変化

JS

スクロールするとハンバーガーメニューに変化

  • カテゴリー:メニュー


    768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
     

    HTMLの書き方

    head終了タグ直前に自作のCSSを読み込みます。

    <link rel="stylesheet" type="text/css" href="css/5-1-7.css">

    body内にヘッダーのナビゲーションとハンバーガーメニュー、コンテンツのHTMLを記載します。

    <header id="header">
    	<h1>Logo</h1>
    	<nav id="g-navi">
    		<ul>
    			<li><a href="#area-1">Area1</a></li>
    			<li><a href="#area-2">Area2</a></li>
    			<li><a href="#area-3">Area3</a></li>
    		</ul>
    	</nav>
    </header>
    
    <div class="openbtn"><span></span><span></span><span></span></div>
    
    <main>
    	<section id="area-1">
    		<h2>Area 1</h2>
    		<p>内容が入ります。</p>
    	<!--/area1--></section>
    	<section id="area-2">
    		<h2>Area 2</h2>
    		<p>内容が入ります。</p>
    	<!--/area2--></section>
    	<section id="area-3">
    		<h2>Area 3</h2>
    		<p>内容が入ります。</p>
    	<!--/area3--></section>
    <!--/main--></main>
    
    <footer id="footer">
    	<small>&copy; copyright.</small> 
    </footer>

    body終了タグ直前にjQuery、動きを制御する自作のJSの2つを読み込みます。

    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <!--自作のJS-->
    <script src="js/5-1-7.js"></script>

     

    CSSの書き方

    /*========= 途中からハンバーガーメニューに変化するのためのCSS ===============*/
    
    /*========= ボタンのためのCSS ===============*/
    
    /*ボタン全体の形状*/
    .openbtn{
    	/*はじめは非表示に*/
    	display: none;
    
    	/*ボタンの位置*/
    	position:fixed;
    	top:10px;
    	right: 10px;
    	z-index: 999;
    
    	/*ボタンの形状*/
    	background:#666;
    	cursor: pointer;
    	width: 50px;
    	height:50px;
    	border-radius: 5px;
    }
    
    /*ボタンのアイコン設定*/
    .openbtn span{
    	display: inline-block;
    	transition: all .4s;
    	position: absolute;
    	left: 14px;
    	height: 3px;
    	border-radius: 2px;
    	background-color: #fff;
    	width: 45%;
    }
    
    .openbtn span:nth-of-type(1) {
    	top:15px;	
    }
    
    .openbtn span:nth-of-type(2) {
    	top:23px;
    }
    
    .openbtn span:nth-of-type(3) {
    	top:31px;
    }
    
    /*activeクラスが付与された後のボタンのアイコン設定*/
    .openbtn.active span:nth-of-type(1) {
    	top: 18px;
    	left: 18px;
    	transform: translateY(6px) rotate(-45deg);
    	width: 30%;
    }
    
    .openbtn.active span:nth-of-type(2) {
    	opacity: 0;
    }
    
    .openbtn.active span:nth-of-type(3){
    	top: 30px;
    	left: 18px;
    	transform: translateY(-6px) rotate(45deg);
    	width: 30%;
    }
    
    /*fadeDownクラスが付与された後のボタンの出現アニメーション設定*/
    .fadeDown {
    	animation-name: fadeDownAnime;
    	animation-duration: 0.5s;
    	animation-fill-mode: forwards;
    	opacity: 0;
    	display: block;
    }
    
    @keyframes fadeDownAnime{
    	from {
    		opacity: 0;
    		transform: translateY(-100px);
    	}
    	to {
    		opacity: 1;
    		transform: translateY(0);
    	}
    }
    
    
    /*========= ヘッダーナビゲーションのためのCSS ===============*/
    
    /*==ヘッダーの形状*/
    #header{
    	height: 70px;
    	width:100%;
    	display: flex;
    	justify-content: space-between;
    	align-items: center;
    	background:#333;
    	color:#fff;
    	text-align: center;
    	padding: 20px;
    }
    
    /*.doneクラスがついたヘッダー*/
    #header.dnone {
    	opacity: 0;/*透過0にして非表示に*/
    }
    
    /*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたら*/
    #header.dnone.panelactive {
    	opacity: 1;/*不透明にして出現*/
    }
    
    /*==ヘッダーのテキストナビゲーションの形状*/
    #g-navi ul{
    	list-style: none;
    	display: flex;
    	justify-content: center;
    }
    
    #g-navi ul li a{
    	display: block;
    	text-decoration: none;
    	color: #666;
    	padding:10px;
    }
    
    #g-navi ul li.current a,
    #g-navi ul li a:hover{
    	color:#fff;	
    }
    
    /*.doneクラスがついたヘッダーのテキストナビゲーションの形状*/
    #header.dnone #g-navi{
    	/*固定位置にして最背面に*/
    	position:fixed;
    	top: 0;
    	left: 0;
    	z-index: -1;
    
    	/*高さと幅*/  
    	width:100%;
    	height: 100vh;
    
    	/*天地中央&テキスト中央揃え*/  
    	display: flex;
    	justify-content: center;
    	align-items: center;
    	text-align: center;
    
    	/*はじめは透過0に*/  
    	opacity: 0;
    	transition: all 0.4s;
    }
    
    
    /*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたナビゲーションの形状*/
    #header.dnone.panelactive #g-navi{
    	opacity: 1;/*不透明に*/
    	z-index:3;/*最前面に*/
    	background:#eee;
    }
    
    #header.dnone.panelactive #g-navi ul{
    	display:block;/*flexの横並びをblockにして縦並びに*/
    }
    
    
    /*リストの形状*/
    
    #header.dnone.panelactive #g-navi li a{
    	color: #333;
    	text-decoration: none;
    	padding:10px;
    	display: block;
    	text-transform: uppercase;
    	letter-spacing: 0.1em;
    	font-weight: bold;
    	transition:all 0.3s;
    }
    
    /* 以下は検証用のレイアウトのための CSS*/
    section{
    	padding:300px 0;
    }
    

     

    JSの書き方

    //スクロールをするとハンバーガーメニューに変化するための設定を関数でまとめる
    function FixedAnime() {
    	//ヘッダーの高さを取得
    	var headerH = $('#header').outerHeight(true);
    	var scroll = $(window).scrollTop();
    	if (scroll >= headerH){//ヘッダーの高さ以上までスクロールしたら
    		$('.openbtn').addClass('fadeDown');//.openbtnにfadeDownというクラス名を付与して
    		$('#header').addClass('dnone');//#headerにdnoneというクラス名を付与
    	}else{//それ以外は
    		$('.openbtn').removeClass('fadeDown');//fadeDownというクラス名を除き
    		$('#header').removeClass('dnone');//dnoneというクラス名を除く
    	}
    }
    
    // 画面をスクロールをしたら動かしたい場合の記述
    $(window).scroll(function () {
    	FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
    });
    
    // ページが読み込まれたらすぐに動かしたい場合の記述
    $(window).on('load', function () {
    	FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
    });
    
    
    //ボタンをクリックした際のアニメーションの設定
    $(".openbtn").click(function () {//ボタンがクリックされたら
    	$(this).toggleClass('active');//ボタン自身に activeクラスを付与し
    	$("#header").toggleClass('panelactive');//ヘッダーにpanelactiveクラスを付与
    });
    $("#g-navi li a").click(function () {//ナビゲーションのリンクがクリックされたら
    	$(".openbtn").removeClass('active');//ボタンの activeクラスを除去し
    	$("#header").removeClass('panelactive');//ヘッダーのpanelactiveクラスも除去
    });
    
    
    //リンク先のidまでスムーススクロール
    //※ページ内リンクを行わない場合は不必要なので削除してください
    $('#g-navi li a').click(function () {
    	var elmHash = $(this).attr('href');
    	var pos = $(elmHash).offset().top-0;
    	$('body,html').animate({scrollTop: pos}, 1000);
    	return false;
    });
    投稿日:2022年07月15日
次のページ
前のページ

アーカイブ

  • CSS (117)
    • スクロールダウン (8)
    • テキストナビゲーション (11)
    • ボタン (52)
    • メニュー (1)
    • 動画 (2)
    • 検索 (3)
    • 画像リンクの動き (23)
    • 背景の動き (17)
  • Illustrator (8)
  • JS (93)
    • アコーディオンパネル (2)
    • アニメーション (1)
    • エリアの動き (7)
    • ギャラリー (6)
    • グラフ (7)
    • スライド (9)
    • テキストの動き (17)
    • ニュースティッカー (1)
    • ページトップリンク (9)
    • ページ内リンク (2)
    • メニュー (28)
    • モーダルウィンドウ (1)
    • ローディング (3)
  • Photoshop (1)
  • PHP (20)
  • WordPress (4)
    • プラグイン (2)
    • リンク (1)
  • お客様観覧用 (11)
    • WEB制作プラン (1)
    • アニメーション (8)
    • グローバルナビゲーション (1)
    • スライド (1)
  • サーバー (6)
    • CPI (1)
  • 未分類 (6)
  • 法律 (2)
    • 医療法 (1)
    • 柔道整復師法 (1)
TOP
  • CSS
    • スクロールダウン
    • テキストナビゲーション
    • ボタン
    • メニュー
    • 動画
    • 検索
    • 画像リンクの動き
    • 背景の動き
  • Illustrator
  • JS
    • アコーディオンパネル
    • アニメーション
    • エリアの動き
    • ギャラリー
    • グラフ
    • スライド
    • テキストの動き
    • ニュースティッカー
    • ページトップリンク
    • ページ内リンク
    • メニュー
    • モーダルウィンドウ
    • ローディング
  • Photoshop
  • PHP
  • WordPress
    • プラグイン
    • リンク
  • お客様観覧用
    • WEB制作プラン
    • アニメーション
    • グローバルナビゲーション
    • スライド
  • サーバー
    • CPI
  • 未分類
  • 法律
    • 医療法
    • 柔道整復師法
© 2022 isen-print.