手機端實現fullPage——全屏滾動效果

封裝了一個小插件模擬fullPage的全屏滾動效果,比較簡單。javascript

特色:css

  1.  純js實現,小巧輕便。html

  2.  兼容性好。蘋果、安卓都沒問題,暫時沒遇到問題機型。vue

缺點:java

  1.  僅封裝了基礎功能,HTML、css麼有去封裝。我的以爲不封裝更方便你們使用。react

 

接下來看看效果圖:vuex

   

 

相比效果你們都看到了,接下來看看代碼學習

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>移動端滾屏效果</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
        <style type="text/css">
            body,html{
                width: 100%;
                height: 100%;
                margin: 0;
                padding: 0;
            }
            .g-fullPage{
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
            .g-fullPage div{
                width: 100%;
                height: 100%;
                text-align: center;
                line-height: 100%;
                transition: 0.5s ease-in;
            }
            .g-fullPage div:nth-child(1){
                background-color: #D5F1FD;
            }
            .g-fullPage div:nth-child(2){
                background-color: aquamarine;
            }
            .g-fullPage div:nth-child(3){
                background-color: mediumseagreen;
            }
        </style>
    </head>
    <body>
        <div class="g-fullPage">
            <div class="f-pageFirst">1</div>
            <div>2</div>
            <div>3</div>
        </div>
    </body>
    <script type="text/javascript">
        /*
             mainClass      滑動父容器類名
             firstClass  第一頁的類名
             num                  總頁數
        */
        function fullPage(mainClass, firstClass, num) {
            var startX = 0,                //初始橫座標
                    startY = 0,                //初始縱座標
                    marginTop = 0,        //上下滑動變量
                    touchNum = 0,            //上滑極限,是否能夠上滑
                    touchFlag = true, //可滑動標誌 true 可滑動,false 不可滑
                    bodyHeight = document.body.offsetHeight,
                    page = document.getElementsByClassName(mainClass)[0],
                    pageFirst = document.getElementsByClassName(firstClass)[0];
                
            //獲取觸摸的初識座標
            page.addEventListener("touchstart",function(e){
                 e.preventDefault();
                startX = e.targetTouches[0].clientX;
                startY = e.targetTouches[0].clientY;
            })
            //重置觸摸的座標值
            page.addEventListener("touchend",function(e){
                 e.preventDefault();
                startX = 0;
                startY = 0;
                touchFlag = true;
            })
            
            //監聽並實現 上、下 滑動效果
            page.addEventListener("touchmove",function(e){
                 e.preventDefault();
                var newX = e.targetTouches[0].clientX,
                        newY = e.targetTouches[0].clientY;
                if (newY - startY > 50) {
                    if (touchFlag == true && touchNum > 0) {
                        console.log("下滑");
                        touchFlag = false;
                        marginTop += 1;
                        touchNum -= 1;
                        pageFirst.style.marginTop = marginTop * bodyHeight+"px";
                    }
                } else if (newY - startY < -50) {
                    if (touchFlag == true && marginTop > -num+1) {
                        console.log("上滑");
                        touchFlag = false;
                        marginTop -= 1;
                        touchNum += 1;
                        pageFirst.style.marginTop = marginTop * bodyHeight+"px";
                    }
                }
            })
        }
        
        fullPage("g-fullPage", "f-pageFirst",3);
    </script>
</html>

 

很簡單的一個功能,如今簡略解釋一下代碼:spa

1. 監聽 touchstart ,獲取觸摸初始座標; 監聽 touchmove,獲取活動過程當中的觸摸點座標,兩者作差.  >0 下滑;<0 上滑插件

2. 當滑動縱座標差值超過50 ,調節div的 marginTop,顯示不一樣div內容

 

這裏面有幾個注意點:

1. margin、top等樣式,若是寫在樣式表裏,js獲取不到,能取到兼容性也很差。具體緣由這裏不細說了。可是內聯樣式能夠取到。 這裏僅作提醒,避免同志們入坑。

2. 記得阻止默認事件。

 

好啦,我的能力有限,若代碼有問題,但願道友們指出,咱們共同窗習。 喜歡個人博客的朋友能夠關注我,近期會出幾篇 vue2.0+vuex 的博客(react的也會有,具體看時間啦),有須要的能夠過來看看吆!

相關文章
相關標籤/搜索