swiper.js-全屏效果實現

bi3643 8年前發布 | 82K 次閱讀 JavaScript開發

來自: http://my.oschina.net/u/2352644/blog/614984


針對swiper.js的全屏動畫切換,我們已經簡單分析和介紹過一次:

http://my.oschina.net/u/2352644/blog/487902 這個里面非常簡單的分析了如何加入我們的動畫效果,swiper現在已經出現了3.0版本,我們這里就是使用swiper3.0去開發我們的更貼近真實的項目。

下載swiper3.0 http://www.swiper.com.cn/download/index.html 推薦下載演示包,這樣我們可以充分了解swiper都可以實現什么!

一,原理簡單分析

1.加入動畫

上一個博客只是分析了在active類名下加入我們的動畫樣式就可完成我們的效果呈現,這里我們二次的分析其中的更多知識,了解別人的原理我們在構建類似效果就可以自己動手了。

首先打開demo文件下,預覽這個html頁面,和復制此html頁面:

然后打開dist文件夾,把這個html重新命名自己喜歡的名稱,我的是demo2

demo2.html就是我們的實戰頁面,我們打開頁面,把css和js的引入路徑從全局改為dist下的css和js上:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>demo2</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
    <!-- Link Swiper's CSS -->
    <link rel="stylesheet" href="css/swiper.min.css">
    <!-- Demo styles -->
    <style>
    html, body {
        position: relative;
        height: 100%;
    }
    body {
        background: #eee;
        font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
        font-size: 14px;
        color:#000;
        margin: 0;
        padding: 0;
    }
    .swiper-container {
        width: 100%;
        height: 100%;
    }
    .swiper-slide {
        text-align: center;
        font-size: 18px;
        background: #fff;
        /* Center slide text vertically */
        display: -webkit-box;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
        -webkit-box-pack: center;
        -ms-flex-pack: center;
        -webkit-justify-content: center;
        justify-content: center;
        -webkit-box-align: center;
        -ms-flex-align: center;
        -webkit-align-items: center;
        align-items: center;
    }
    </style>
</head>
<body>
    <!-- Swiper -->
    <div>
        <div id="aa">
            <div>Slide 1</div>
            <div>Slide 2</div>
            <div>Slide 3</div>
            <div>Slide 4</div>
            <div>Slide 5</div>
            <div>Slide 6</div>
            <div>Slide 7</div>
            <div>Slide 8</div>
            <div>Slide 9</div>
            <div>Slide 10</div>
        </div>
        <!-- Add Pagination -->
        <div></div>
    </div>
    <!-- Swiper JS -->
    <script src="js/swiper.min.js"></script>
    <!-- Initialize Swiper -->
    <script>
    var swiper = new Swiper('.swiper-container', {
        pagination: '.swiper-pagination',
        paginationClickable: true,
        direction: 'vertical'
    });
 
 
    </script>
</body>
</html>

我們預覽測試,pc就可以查看,保證沒有任何問題,我們firebug查看是不是當前所在位置有active的類名:

2.顯示切換

同上次分析結果吻合,3.0同樣是這個加入動畫原理,我們進一步分析每次滑動是如何顯示當前div(這一屏內容)的:

我們利用firebug進一步分析:

 

 分別切換到1 2 3屏我們發現在父容器.swiper-wrapper 上改變的是transform: translate3d(0px, -618px, 0px);的屬性值,

變化3d效果中移動處理y軸在發上變化,從0到-309到-618,我們試想一下這個原理方式:

上面是初始狀態,默認變化3d的位移y軸值是0。

當我們向下切換時,y軸值就會變成-1*一屏高度,這樣就利用變化移動顯示了第二屏:

其實做過tab切換的就知道這個切換原理,不過以前是利用定位處理去改變left或者top的值實現切換,這里使用的是css3變換位移處理,我們把最外層父容器定好寬高和設置超出隱藏,那么就可以去切換我們的顯示內容了,我們firebug這個.swiper-container可以查看是不是有超出隱藏。

3.方向判斷

我們預覽頁面,從按下到抬起,會識別出我們是向上或者向下,然后去切換我們的顯示內容,

我們事件觸發的過程就是

1.按下

2.移動/沒有移動

3.抬起

我們針對這三個事件可以分別獲取event的pagex和pagey,我們根據抬起的x和y與按下的x與y去比較就可分析出操作方向:

我們針對抬起和按下的坐標,構造三角形可以去分析出移動的方位:

我們算數x1 x2的差值取整和y1 y2差值取整,如果x的差值/y差值大于1說明方向不是左就是右,當然跟具體的分析我們可以去具體研究。

4.彈性下拉分析

我們在第一屏,向下拖拽:

這個效果我們在app里面非常常見,在app就會刷新頁面,這里只是單純的彈動!

這個實現和我們的切換類似,也是改變3d變化位移處理y值,不過這個y值不是在根據屏幕高度就處理,而是帶有極限和時時改變的。

1.當前是第一屏(辦法很多,比如一個全局變量,根據y值改變而變化)

2.記住mousedown事件event的pagey

3.在mousemove中不斷獲取event的pagey和down的pagey做差值,然后復制到3d變換位移出的y上

4.設置一個極限值比如100,差值和100比較如果大于100了3d位移y一直賦值為100。

5.全屏css樣式

這個說的話太繞了,我們一張圖表示:

綠色代表瀏覽器窗口,也就是window

黃色就是html標簽,我們寬度設置為100%就等于窗口寬度,高度設置為100%就是窗口高度

橘黃色是body標簽,這個同html的設置,都設置為100%,寬高等于了窗口寬高

藍色就是我們作于切換容器的div,在寬高100%等于窗口基礎上,設置超出隱藏,首先保證了滾動條的不出現,然后里面的元素在這個div預覽時,這個div就起到了窗戶的作用,我們改變窗戶里面內容位置就可以看到不同的內容了。

使用百分比設置寬高是全局切換的方法。

6.pc和移動端的事件

我們上面一直說到,切換的觸發是在mousedown move up組合事件中產生的,在手機登移動設備上,dom提供了移動設備的一套處理,

touchstat對應mousedown

touchmove對應mousemove

touchend對應mouseup

我們針對蘋果和安卓系統這種兼容處理是沒有問題的,不過在wp8上,也就是微軟手機是不被支持的,要用另一套事件做兼容處理,我們查看swiper.js源碼,看這個位置:

 

pointer和mspointer是對ie瀏覽器的支持,能力監測來實現不同移動設備支持。

二,搭建全屏切換動畫

 

未完

 

 本文由用戶 bi3643 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!