JS全画面切り替えを実現

11644 ワード

以前ネット上でいくつかのフルスクリーン切り替えのページを見たことがありますが、ネット上にもいくつかのJQueryのプラグインがフルスクリーン切り替えの効果を実現することができて、今日はオリジナルjsで簡単にこの効果をしました.
1.実現原理
実はこの効果を出すのはとても简単で、以下に分析します:1.まず各ページのdivを設定し、各divの高さを100 vhに設定します.すなわち、各divの高さをウィンドウの高さにするか、各divの高さを100%に設定することができますが、100%は親要素に対するものなので、HTML、bodyの高さを100%に設定する必要があります.このとき各divの高さはウィンドウの高さになりますが、一般的にはスクロールバーがなく、1ページしかないようにbodyにoverflow:hiddenの効果を設定する必要があります.これで1ページしか表示されません.2.次に、jsセクションでは、マウスホイールページを次のdivに切り替えるたびに、jsセクションでマウスホイールイベントを処理し、ウィンドウの高さを取得し、ホイールをスクロールするたびに、現在のページの高さを1つのウィンドウの高さに増やします.
2.実装手順
次に私のコードを示し、具体的な分析もコード注釈に書かれています.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <style type="text/css">
    /*CSSreset      0*/
    *{
        margin:0;
        padding:0;
    }
    /*      */
    body{
        overflow:hidden;
    }
    /*    div         */
    div{
        height:100vh;
    }
    /*    div       */
    .section1{
        background:#eee;
    }
    .section2{
        background:lightblue;
    }
    .section3{
        background:lightgreen;
    }
    style>
head>
<body>
    <div class="section1">
        <h1>  1h1>
    div>
    <div class="section2">
        <h1>  2h1>
    div>
    <div class="section3">
        <h1>  3h1>
    div>


    <script type="text/javascript">
        var ismoving=false;//              
        var pageH=document.documentElement.clientHeight;//        
        var allheight=document.documentElement.scrollHeight;//       
        //      
        var scrollFunc=function(e){
            e=e||window.event;
            if(ismoving){//                
                return;
            }else{
            //     IE,      (wheelDelta) FireFox    (detail) 
                if(e.wheelDelta>0||e.detail<0){//        
                    // alert("   ");
                    var current=window.pageYOffset;//             Y  
                    if(current==0){//               
                        return;
                    }
                    pageScroll(-1,current);//        
                }
                if(e.wheelDelta<0||e.detail>0){//        
                    // alert("   ");
                    var current=window.pageYOffset;
                    if(current==allheight-pageH){//                
                        return;
                    }
                    pageScroll(1,current);
                }
            }
        }
        //                 
        window.onresize=function(){
            pageH=document.documentElement.clientHeight;
        }
        //            
        if(document.addEventListener){
            document.addEventListener('DOMMouseScroll',scrollFunc,false);
        }
        //        scrollFunc
        window.onmousewheel=document.onmousewheel=scrollFunc;
        // window.onmousewheel=scrollFunc;

        //      
        var timer=null;
        function pageScroll(speed,current){
            ismoving=true;//          
            if(speed>0){//              
                var allH=current+pageH;//      
                //         
                timer=setInterval(function(){
                    var cur=window.pageYOffset;//                  Y  
                    window.scrollTo(0,cur+speed);//          Y  speed    
                    //      ease-in-out   ,                       
                    if(cur > (allH-(pageH/2))){
                        speed--;
                    }else{
                        speed++;
                    }
                    //           Y          
                    if(cur >= allH){
                        clearInterval(timer);//     
                        window.scrollTo(0,allH);//       
                        ismoving=false;//         
                    }
                },15)
            }else{
            //    ,      ,    
                var allH=current-pageH;
                timer=setInterval(function(){
                    var cur=window.pageYOffset;
                    window.scrollTo(0,cur+speed);
                    if(cur < (allH+(pageH/2))){
                        speed++;
                    }else{
                        speed--;
                    }
                    if(cur <= allH){
                        clearInterval(timer);
                        window.scrollTo(0,allH);
                        ismoving=false;
                    }
                },15)
            }
        }
    script>
body>
html>

これで最も基本的なフルスクリーンページ切り替えができます.