CLOSE ×

MEMO

ちょっとした技術やツールの使用方法などを追加していきます。

ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコード

更新日
経過日数
1397日
文字数
3735文字
所要時間
約9分
カテゴリー
HTML CSS Javascript jQuery
ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコード shadow

ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコード

ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコードをメモしました。

横スクロールからナビゲーションを表示するサイトを
最近よくスマートフォンサイトなんかでよく見かけます。

そして見よう見まねで、
このサイトのタブレットやスマホの表示にも
取り入れてみました。

今回は、「スマホ」や古めの「ie」でも動くように作りました。
スマホでは「jQuery」のアニメーションでは少々重かったので
「CSS3」の「transition」と切り替えて動かしています。

デモサイト

左上のボタンをクリックいただくとナビゲーションが開きます。

横スクロールして開くナビゲーション デモサイト

サンプルコード

今回は「#moveElm」を動かしています。
「#header」は動かさないため「#moveElm」の外に出しています。

HTML

    <div id="header">
        <div class="inner">
            <h1>スクロールナビゲーションサンプルサイト</h1>
            <div id="nav-btn">
                <a href="#nav"><img src="/img/nav-btn.png" alt="ナビゲーション"></a>
            </div>
        </div>
    </div>
    <div id="moveElm">
        <div id="nav">
            <ul>
                <li><a href="#">ページ1</a></li>
                <li><a href="#">ページ2</a></li>
                <li><a href="#">ページ3</a></li>
                <li><a href="#">ページ4</a></li>
                <li><a href="#">ページ5</a></li>
            </ul>
        </div>
        <div id="main">
            <div class="inner">
                <h2>スクロールナビゲーションサンプル</h2>
            </div>
        </div>
        <div class="contents">
            <div class="inner">
                <h2>サンプルサイトの新着情報</h2>
                <ul>
                    <li><a href="#">新着情報1</a></li>
                    <li><a href="#">新着情報2</a></li>
                    <li><a href="#">新着情報3</a></li>
                    <li><a href="#">新着情報4</a></li>
                </ul>
            </div>
        </div>
        <div class="contents">
            <div class="inner">
                <h2>サンプルサイトのコンテンツ</h2>
                <p>サンプルサイトのコンテンツです。</p>
            </div>
        </div>
        <div class="contents">
            <div class="inner">
                <h2>サンプルサイトのコンテンツ2</h2>
                <p>サンプルサイトのコンテンツ2です。</p>
            </div>
        </div>
        <div class="contents">
            <div class="inner">
                <h2>サンプルサイトのコンテンツ3</h2>
                <p>サンプルサイトのコンテンツ3です。</p>
            </div>
        </div>
        <div id="footer">
            <small>&amp;copy; T-CREATOR</small>
        </div>
    </div>

CSS

「headタグ内」に書いています。また、適当に装飾しているので、冗長的になっていますが、
ポイントは「#moveElm」に「position:relative」をいれます。

    <style>
        body{
            background: #F4F7F9;
            font: 13px Raleway,'Helvetica','Hiragino Kaku Gothic ProN',
 Meiryo, sans-serif;
             color: #526483;
             margin: 0;
             overflow-x :hidden; 
        }
        img{
            border:none;
            outline: none;
        }
        a{
            color:#7D4255;
            text-decoration: none;
        }
        ul{
            list-style: none;
            padding-left: 0;
            margin:0;
        }
        .inner{
            max-width: 1080px;
            width: 94%;
            margin:0 auto;
            position: relative;
        }
        #header{
            height:50px;
            box-shadow: 0 2px 5px 0 rgba(0,0,0,0.1);
            background: #fff;
            position:relative;
            z-index: 1;
        }
        h1{
            font-size: 14px;
            line-height: 50px;
            margin: 0;
            font-weight: normal;
            margin-left: 80px;
        }
        #nav-btn a{
            position: absolute;
            display: block;
            left:0;
            top:0;
            width: 50px;
            text-align: center;
        }
        #nav-btn a:hover{
            background: #F8F9FC;
        }
        #nav-btn a img{
            height:30px;
            padding:10px 0;
            vertical-align: bottom;
        }
        #nav{
            width: 30%;
            position: absolute;
            background: #ECDFE4;
            box-shadow: 2px 0 2px 0 rgba(0,0,0,0.1);
            height:100%;
            left:-30%;

        }
        #nav a{
            display: block;
            padding:10px 0;
            text-align: center;
            border-top:1px solid #fff;
            box-shadow: 0 -1px 0 0 #E0CBD3;

        }
        #main{
            height:250px;
            background: #B7C4DB;
        }
        #main .inner{
            background: #C8D1E3;
            text-align: center;
            padding-top:100px;
            height:150px;
        }
        h2{
            margin:0;
        }
        .contents{
            padding:10px 0;
            margin-bottom: 20px
        }
        .contents h2{
            border-bottom: 1px solid #B7C4DB;
            box-shadow: 0 1px 0 0 #fff;
            padding: 10px 0;
        }
        .contents li a{
            display: block;
            padding:10px;
            border-bottom:dashed 1px #B7C4DB;
            color:#45546D;
        }
        .contents li a:hover{
            background: #EDEFF5;
        }
        #moveElm{
            position: relative;
        }
        #footer{
            border-top : 1px solid #B7C4DB;
            padding:10px 0;
            text-align: center;
        }
    </style>

Javascript

「body」タグの閉じタグの下で読み込んでいます。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
    $(function (){
        var moveSpeed = 800;//アニメーションするスピード
        var moveWidth = '30%';//アニメーションする横幅
        var btn = $('#nav-btn');
        var moveElm = $('#moveElm');

        var useTransForm = typeof $("body").css("transform");
        if(useTransForm === "string"){
            moveElm.css({
                'transition' :'all '+moveSpeed+'ms ease'
            });
        }
        btn.click(function (e) {
            e.preventDefault();
            if(!btn.hasClass('active')){
                btn.addClass('active');
                if(useTransForm === "string"){
                    moveElm.css({
                        'transform' : 'translateX('+moveWidth+')'
                    });
                }else{
                    moveElm.animate({'left':moveWidth},moveSpeed);
                }

            }else{
                btn.removeClass('active');
                if(useTransForm === "string"){
                    moveElm.css({
                        'transform' : 'translateX(0)'
                    });
                }else{
                    moveElm.animate({'left':'0'},moveSpeed);
                }
            }
        });
    });
</script>

 

ちょっとコードばかりになってしまいましたが、
このままコピペいただければ動くと思います。
以下にサンプルファイルをアップしましたので自由にお使いください。

ダウンロード

http://demo.t-cr.jp/download/javascript/left-nav.zip

Trackback URL

https://t-cr.jpmemo/17/trackback/

RELATED

CONTACT

ご質問、ご意見などお気軽にお問い合わせください。

^