全屏滾動效果H5FullscreenPage.js


前提:

介於現在很多活動都使用了 類似全屏滾動效果 尤其在微信里面 我自己開發了一個快速構建 此類項目的控件 與市面上大部分控件不同的是此控件還支持元素的動畫效果 並提供多種元素效果 基於zepto.js 

功能清單:

1 快速實現頁面全屏滾動效果。並提供多種翻頁效果,兼容大部分ios和android系統。

2 支持在頁面中添加多種動畫元素效果 來實現淡入,滑入等效果。

3 支持配置音樂功能。

4 支持搖一搖接口功能。

 

組件核心代碼原理:

1 頁面滾動

 在移動頁面上如果想使用滾動,如過沒有任何動畫效果,那么肯定大家首先想到的就是用滾動條來滾動,但這樣的滾動比較單調,實現動畫效果比較困難,於是就想出了利用css3和div的絕對定位來實現。

<body>
  <div class="item item1">
             
  </div>
  <div class="item item2">
             
  </div>
  <div class="item item3">
             
  </div>
</body>

然后給每個div設置絕對定位樣式

.item {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    background-position: center;
}

這樣頁面上的每個div都相當於一個頁面 只不過重疊了而已,接下來就要利用javascript和css讓這些頁面可以滾動(利用touch時間改變div的transform來實現滾動)

function touchStart(event) {
            if (dragStart !== null) return;
             
            if (event.touches) {
                event = event.touches[0];
            }
             //抓取時的所在位置
            dragStart = event.clientY;
 
         }
           
         function touchMove (event) {
             
            if (dragStart === null) return;
 
            if (event.touches) {
                event = event.touches[0];
            }
             //得到抓取開始時於進行中的差值的百分比
            percentage = (dragStart - event.clientY) / window.screen.height;//和屏幕高度做比較
              
            if (percentage > 0) {
                // //向上拖動
                var translateY = 1 - 0.4*percentage;//位置系數,可以微調
                $(event.target).next().css('-webkit-transform', 'translateY('+translateY*100+'%)'); //下一個item上移動
                  
            } else {
                //向下拖動
                var translateY = -(0.4*percentage);
                $(event.target).css('-webkit-transform', 'translateY('+translateY*100+'%)');//當前item下移動
            }
             
         }
           
         function touchEnd (event) {
             
            dragStart = null;//標志位值空
             
             
            //抓取停止后,根據臨界值做相應判斷
            if (percentage >= dragThreshold) {//向下滾動
                $(event.target).css('-webkit-transform', 'translateY(-100%)'); 
                $(event.target).next().css('-webkit-transform', 'translateY(0)');
            } else if ( Math.abs(percentage) >= dragThreshold ) {//向上滾動
                $(event.target).css('-webkit-transform', 'translateY(100%)');
            } else {//沒有達到臨界值 恢復原樣
                $(event.target).next().css('-webkit-transform', 'translateY(100%)'); 
            }
             //重置percentage
            percentage = 0;
 
         }

這里有幾點說明一下:

1)使用translate3d來替換translateY可以開啟硬件加速 在渲染上會好一些。

2)在執行下一頁或者上一頁時 可以給div添加css3動畫來使其滾動帶有一定的動畫效果,組件提供8中翻頁效果。

 

2 元素的淡入淡出:

元素入場的動畫效果主要是利用css3來實現

.fadeIn {
        animation-name: fadeIn;
        -webkit-animation-name: fadeIn; 
 
        animation-duration: 1.5s;   
        -webkit-animation-duration: 1.5s;
 
        animation-timing-function: ease-in-out; 
        -webkit-animation-timing-function: ease-in-out;     
 
         
    }
@keyframes fadeIn {
        0% {
            transform: scale(0);
            opacity: 0.0;       
        }
        60% {
            transform: scale(1.1);  
        }
        80% {
            transform: scale(0.9);
            opacity: 1; 
        }   
        100% {
            transform: scale(1);
            opacity: 1; 
        }       
    }
 
    @-webkit-keyframes fadeIn {
        0% {
            -webkit-transform: scale(0);
            opacity: 0.0;       
        }
        60% {
            -webkit-transform: scale(1.1);
        }
        80% {
            -webkit-transform: scale(0.9);
            opacity: 1; 
        }   
        100% {
            -webkit-transform: scale(1);
            opacity: 1; 
        }       
    }
.fadeIn {
        animation-name: fadeIn;
        -webkit-animation-name: fadeIn; 
 
        animation-duration: 1.5s;   
        -webkit-animation-duration: 1.5s;
 
        animation-timing-function: ease-in-out; 
        -webkit-animation-timing-function: ease-in-out;     
 
         
    }
@keyframes fadeIn {
        0% {
            transform: scale(0);
            opacity: 0.0;       
        }
        60% {
            transform: scale(1.1);  
        }
        80% {
            transform: scale(0.9);
            opacity: 1; 
        }   
        100% {
            transform: scale(1);
            opacity: 1; 
        }       
    }
 
    @-webkit-keyframes fadeIn {
        0% {
            -webkit-transform: scale(0);
            opacity: 0.0;       
        }
        60% {
            -webkit-transform: scale(1.1);
        }
        80% {
            -webkit-transform: scale(0.9);
            opacity: 1; 
        }   
        100% {
            -webkit-transform: scale(1);
            opacity: 1; 
        }       
    }

該元素首先是隱藏的,在頁面滑入視窗時將其顯示,就會應用上css3設定的動畫效果,延伸出來不僅fadeIn效果,許多效果都可以設定,另外可以給元素添加data-delay屬性來控制元素的執行順序。

 

組件使用方法:

 

 組件使用方法:

{
    'type' : 1,//翻頁的動畫效果 共有8種可以使用
    'pageShow' : function(page){},
    'pageHide' : function(page){},
    'useShakeDevice' : {//是否使用手機搖一搖接口
        'speed' : 30,
        'callback' : function(page){}
    },
    'useParallax' : true,//是否使用parallax效果可參看demo第六頁
    'useArrow' : true,//是否使用箭頭
    'useAnimation' : true,//是否使用元素動畫效果
    'useMusic' : {//是否使用音樂
        'autoPlay' : true,
        'loopPlay' : true,
        'src' : 'http://mat1.gtimg.com/news/2015/love/FadeAway.mp3'
    }
 };

 

 

原文地址:https://github.com/lvming6816077/H5FullscreenPage

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM