• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    基于CSS3的WEBAPP橫向滑動模式演化

    前言

    隨著移動網絡速率和設備硬件水平的不斷提升,webapp的發展更加的native化,其表現效果和性能也會越來越好,在可預計的未來很有可能替代native或者平起平坐,那么我們研究更好的交互體驗是非常有必要的。

    目前我們所常見的webapp越來越多的是以SPA(single page application)的模式進行開發,同時嵌套在android或者ios本地殼里面,也就是hybrid應用,這種開發方式所帶來的優勢就不多討論,本文研究的重點是在SPA模式中,頁面間橫向滑動切換場景時模式是怎樣設計的。在這篇文章里,筆者將展示并闡述四種橫向滑動模式的架構布局及CSS設計方案,供大家參考(多圖請耐心加載)。

    一、容器整體滑動(DEMO只演示A-B-C-B,下同)

    模擬動畫效果見下圖(上),滑動分解見下圖(下):

    容器整體滑動

    整體容器滑動

    DEMO地址:http://nirvana.sinaapp.com/demo_slider/slider_1.html

    布局方式:父容器相對定位并撐滿整個device的viewport,子頁面絕對定位并依次并排排列在viewport中(從左到右)

    .view-container { // 父容器布局方式   position: relative;   width: 100%;   height: 100%;   padding-top: 44px;   box-sizing: border-box;   -webkit-transform: translate3d(0,0,0); //激活GPU 3D加速   -webkit-backface-visibility: hidden; } .page-container { // 子頁面布局方式   position: absolute;   z-index: 1;   top: 0;   left: 0; // 初始化為0,動態計算第N個page,并賦值(N-1)*100%   width: 100%;   height: 100%;   overflow: hidden;   background-color: #F8F8F8; }

    滑動方式:父容器利用CSS3的動畫transform3D進行X軸的滑動(JS控制直接噴到DOM節點中)

    -webkit-transform: translate3d(-100%, 0px, 0px); -webkit-transition: 300ms; transition: 300ms;

    二、單個頁面滑動

    模擬動畫效果,見下圖:

    單個頁面滑動

    DEMO地址:http://nirvana.sinaapp.com/demo_slider/slider_2.html

    布局方式:父容器高度100%,子容器正常文檔流布局(X軸隱藏,Y軸默認原生滾動)

    .view-container {   height: 100%; } .page-container {   position: relative;   width: 100%;   min-height: 100%;   overflow-x: hidden;   background-color: #F8F8F8; }

    滑動方式:利用class添加動畫樣式(keyframes animation),左右進出各一種

      @-webkit-keyframes sliderightout{from{-webkit-transform:translateX(0px);opacity:1}to{-webkit-transform:translateX(50%);opacity:0}}   @-webkit-keyframes slideleftin{from{-webkit-transform:translateX(-50%);opacity:0}to{-webkit-transform:translateX(0px);opacity:1}}   @-webkit-keyframes slideleftout{from{-webkit-transform:translateX(0px);opacity:1}to{-webkit-transform:translateX(-50%);opacity:0}}   @-webkit-keyframes sliderightin{from{-webkit-transform:translateX(50%);opacity:0}to{-webkit-transform:translateX(0px);opacity:1}}   .slideleftout{-webkit-animation:slideleftout 350ms ease-in-out;}   .slideleftin{-webkit-animation:slideleftin 350ms ease-in-out;}   .sliderightout{-webkit-animation:sliderightout 350ms ease-in-out;}   .sliderightin{-webkit-animation:sliderightin 350ms ease-in-out;}   .animatestart{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;overflow-x:hidden}   .animatestart.page-container{overflow-x:hidden;-webkit-transform:translate3d(0,0,0);-webkit-backface-visibility:hidden;background-color:#f5f5f5}

    三、雙頁聯動滑動

    模擬動畫效果,見下圖:

    DEMO地址:http://nirvana.sinaapp.com/demo_slider/slider_3.html

    布局方式:類似于第一種,父容器和子容器都絕對定位于viewport中,不同點是父類的上級布局更加細分,且大膽使用了webkit-box彈性盒子;子容器沒有并排顯示,而是重疊隱藏

    .view-container {   position: absolute;   width: 100%;   height: 100%;   top: 0;   left: 0; } .page-container {   position: absolute;   z-index: 1;   top: 0;   left: 0;   bottom: 0;   right: 0;   width: 100%;   height: 100%;   overflow: hidden;   background-color: #F8F8F8;   -webkit-transform:translate3d(0,0,0);   -webkit-backface-visibility:hidden; }

    滑動方式:滑動開始時先將隱藏的下一個子頁面拉到viewport右側與當前子頁面平行,然后緊接著兩個子頁面同步滑動,最后回歸樣式,中間的時間差事件均有JS控制(詳見demo邏輯)

    四、三舞臺雙頁視差滑動

    模擬動畫效果見下圖(上),分解邏輯圖見下圖(下):

    雙頁視差滑動

    三舞臺雙頁視差滑動

    DEMO地址:http://nirvana.sinaapp.com/demo_slider/slider_4.html

    布局方式:這里我設定了三舞臺(stage)的概念,其實就是當前viewport的左右側各虛擬一個同樣大小的viewport,當然,正常情況下我們只能看到當前舞臺的子頁面,leftstage是-100%的位置,rightstage是100%的位置,我們分別用三個class來定義:pageOld、pageInit、pageNew來代替

    .pageInt {   -webkit-transform: translateX(0);           transform: translateX(0);   } .pageOld {   -webkit-transform: translateX(-100%);           transform: translateX(-100%);   } .pageNew {   -webkit-transform: translateX(100%);           transform: translateX(100%);   } }

    滑動方式:
    1,定義正向(向左滑)和反向(向右滑)兩個概念,;
    2,定義快速和慢速兩個概念;

    則就是四種動態兩種組合:正向快速+正向慢速、反向快速+反向慢速

    .slideSlow {   -webkit-transition: -webkit-transform 400ms cubic-bezier(0.42, 0, 0.58, 1.0) 0.1s;       -ms-transition: transform 400ms cubic-bezier(0.42, 0, 0.58, 1.0) 0.1s; } .slideFast {   -webkit-transition: -webkit-transform 300ms cubic-bezier(0.42, 0, 0.58, 1.0);       -ms-transition: transform 300ms cubic-bezier(0.42, 0, 0.58, 1.0); } .slideSlowBack {   -webkit-transition: -webkit-transform 400ms cubic-bezier(0.42, 0, 0.58, 1.0);       -ms-transition: transform 400ms cubic-bezier(0.42, 0, 0.58, 1.0); } .slideFastBack {   -webkit-transition: -webkit-transform 300ms cubic-bezier(0.42, 0, 0.58, 1.0) 0.1s;       -ms-transition: transform 300ms cubic-bezier(0.42, 0, 0.58, 1.0) 0.1s;

     

    營銷型網站建設

     

     

     

     

    穩定

    產品高可用性高并發

    貼心

    項目群及時溝通

    專業

    產品經理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質開發
    • 返回頂部
    国产乱子精品免费视观看片| 久久精品女人毛片国产| 国产天堂亚洲精品| 亚洲欧美日韩久久精品| 日韩精品免费一级视频| 久久丫精品国产亚洲av不卡| 久久精品国产免费| 国产精品兄妹在线观看麻豆 | 久久久精品一区二区三区| 久久亚洲AV永久无码精品| 国产精品综合久久第一页| 亚洲国产精品第一区二区三区| 秋霞日韩一区二区三区在线观看| 国产精品免费小视频| 热99re久久精品2久久久| 久久久久亚洲精品无码网址色欲| 99精品众筹模特私拍在线| 精品福利视频一区二区三区| 91亚洲精品视频| 在线观看日韩精品| 91精品免费高清在线| 99久久er热在这里只有精品99| 久久精品国产亚洲| 久久国产精品久久精| 久久国产三级精品| 亚洲2022国产成人精品无码区 | 精品一区二区三区自拍图片区| 99热热久久这里只有精品166| 热re99久久精品国99热| 人人妻人人澡人人爽人人精品| 久久精品国产亚洲av麻豆| 久久久亚洲精品国产| 日韩人妻精品无码一区二区三区| 无码欧精品亚洲日韩一区| 蜜臀久久99精品久久久久久小说| 99精品热女视频专线| 久久精品www人人爽人人| 亚洲国产综合精品| 精品深夜AV无码一区二区老年| 伊人久久精品无码麻豆一区| 亚洲日韩一区精品射精|