vue結(jié)合CSS3實現(xiàn)超炫3D翻書效果(一)

效果預(yù)覽

基礎(chǔ)知識儲備

-transform:CSS3新增的變形功能火诸,其優(yōu)點是全過程不改變DOM性能更高碱璃。在transform下有如下幾個變形樣式:
1).translate() --- 位置改變(平移)
2).scale() --- 縮放比例
3)rotate() --- 旋轉(zhuǎn)角度
4)skew() --- 傾斜(斜切)
以上的幾個形式都支持X軸、Y軸、Z軸的變換方向耗式。
但需要注意:
1)要使用3D變換,需要在其父級開啟3D空間:transform-style: preserve-3d;
2)在變形過程中趁猴,會出現(xiàn)“抖動”效果刊咳,這時我們需要在該元素的該變形屬性加初始值:transform:rotateY(0deg);
3)要想查看到超炫的3D效果還要設(shè)置下景深/透視,transform:perspective(800px) ;這個可以都當(dāng)前元素加或給其元素父級加
-當(dāng)設(shè)置transform:rotate(30deg);旋轉(zhuǎn)角度時可指定其旋轉(zhuǎn)的奇點儡司。transform-origin: x坐標(biāo) y坐標(biāo);

原理級思路

核心思想娱挨,這個展示區(qū)分為左右兩部分。

html布局如下:

<template>
    <!-- /* box為整個頁面展示區(qū) */ -->
        <div id="box" >
            <!-- /* page有前后兩面 */ -->
            <div class="page" @click="togoleRegister(true)">
                <div class="front"></div>
                <div class="back"></div>
            </div>
            <!-- /* page2為翻頁之后顯示的*/ -->
            <div class="page2" @click="togoleRegister(false)"></div>
        </div>
</template>

1.當(dāng)未翻頁前捕犬,頁面展示如下圖:

image

整個展示區(qū)(box)分為左右兩個部分跷坝,這里我們給box一個背景圖(0.png);然后再給page-front(正面)一個相同背景圖(0.png),并把front定在展示區(qū)的右側(cè)。其實我們看到的一張圖是由兩個相同(但大小原圖為一半)的圖組成碉碉。

2.當(dāng)未翻頁前柴钻,頁面展示如下圖:

image

當(dāng)翻頁后,整個展示區(qū)依然為兩部分誉裆,左部分為page-back(背面顿颅,背景圖(1.png))缸濒,右部分為page2背景圖(1.png)足丢。
需要注意的一點就是,當(dāng)page-front進行翻頁的旋轉(zhuǎn)奇點為左邊庇配。

css布局代碼如下:

/* 將頁面展示區(qū)box設(shè)置寬高背景 */
    #box {
        background: url("../assets/0.png") no-repeat;
        width: 700px;
        height: 400px;
        /* 此處是為了讓Box在中間顯示 */
        margin: 100px auto;
        position: relative;
    }

    /* 設(shè)定page的位置 */
    #box .page {
        /* 因為其在展示區(qū)右側(cè)斩跌,所以寬度為整個box的一般,并定在右側(cè) */
        width: 50%;
        height: 100%;
        top: 0;
        right: 0;
        position: absolute;
        /* 將開啟3d空間捞慌,方便翻頁后front和back的3d變換 */
        transform-style: preserve-3d;
        /* 奇點設(shè)為左邊 */
        transform-origin: left center;
        /* 設(shè)置翻書(旋轉(zhuǎn))的運動時間耀鸦,運動形式 */
        transition: 1s all ease;
        /* 提升層級否則會被蓋住 */
        z-index: 2;
        /* 設(shè)置景深來更好的展示3D效果,并給旋轉(zhuǎn)角度一個初始值,防止抖動發(fā)生 */
        transform: perspective(800px) rotateY(0deg);
    }

    /* 配置旋轉(zhuǎn)頁的前頁 */
    .page .front {
        /* 寬高與父級page一樣 */
        width: 100%;
        height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        /* 將背景設(shè)成為與前一頁相同的背景,并且只要右面的那部分袖订,與頁面左部分拼接 */
        background: url("../assets/0.png") right top no-repeat;
        /* backface-visibility屬性和3D transform效果相關(guān)氮帐,它決定當(dāng)一個元素的背面面是否可見 */
        backface-visibility: hidden;
        /* 提升層級否則會被蓋住 */
        z-index: 2;
    }

    /* 配置旋轉(zhuǎn)頁的后頁 */
    .page .back {
        /* 寬高與父級page一樣 */
        width: 100%;
        height: 100%;
        /* 將背景設(shè)成為與下一頁相同的背景,并且只要左面的那部分,與右部分的page2拼接 */
        background: url("../assets/1.png") left top no-repeat;
        position: absolute;
        left: 0;
        top: 0;
        /* 這里設(shè)置將back進行水平方向上的鏡像變化洛姑,因為當(dāng)page旋轉(zhuǎn)180°后上沐, back顯示的效果不對*/
        transform: scale(-1, 1);
        /* 改變層級避免蓋住其他頁面 */
        z-index: 1;
    }

    /* 配置pages展示區(qū) */
    #box .page2 {
        /* 因為其只在頁面右側(cè)展示所以寬為Box的一半 */
        width: 50%;
        height: 100%;
        top: 0;
        right: 0;
        position: absolute;
        /* 將背景設(shè)成為與下一頁相同的背景,并且只要右面的那部分,與左部分(.page .back)拼接 */
        background: url("../assets/1.png") right top no-repeat;
            /* 改變層級避免蓋住其他頁面 */
            z-index:1;
    }
      #box:before {
            content: "";
            position: absolute;
            top: 0%;
            right: 0%;
            width: 0px;
            height: 0px;
            background-color: #fff;
            background: linear-gradient(225deg, #ffffffD1 45%, #d2d2d2 50%, #cacaca 56%, #ffffffd9 80%);
            -webkit-box-shadow: -1px 1px 1px #f0f0f0;
            box-shadow: 3px 7px 15px #d8d8d8;
            -webkit-transition-duration: 0.3s;
            transition-duration: 0.3s;
            -webkit-transition-property: width, height;
            transition-property: width, height;
            z-index: 20;
        }
        #box:hover:before {
            width: 100px;
            height: 100px;
        }

下面我們通過js來控制page進行翻頁(沿著Y軸反向旋轉(zhuǎn)180°)就可以了

js代碼如下:

  togoleRegister(val) {
                    var oBox = document.getElementById('box');
                    var oPage = document.querySelector('.page');
                    console.log("oPage.style", oPage.style)
                    if (val == true) {
                        oPage.style.WebkitTransform = 'perspective(1600px) rotateY(-180deg)';
                        // oPage.style.opacity = '0'
                    } else {
                        oPage.style.WebkitTransform = 'perspective(1600px) rotateY(0)';
                        // oPage.style.opacity = '1'
        
                    }
                },
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楞艾,一起剝皮案震驚了整個濱河市参咙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硫眯,老刑警劉巖蕴侧,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異两入,居然都是意外死亡净宵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門裹纳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塘娶,“玉大人,你說我怎么就攤上這事痊夭〉蟀叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵她我,是天一觀的道長虹曙。 經(jīng)常有香客問我,道長番舆,這世上最難降的妖魔是什么酝碳? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮恨狈,結(jié)果婚禮上疏哗,老公的妹妹穿的比我還像新娘。我一直安慰自己禾怠,他們只是感情好返奉,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吗氏,像睡著了一般芽偏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弦讽,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天污尉,我揣著相機與錄音,去河邊找鬼。 笑死被碗,一個胖子當(dāng)著我的面吹牛某宪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锐朴,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缩抡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了包颁?” 一聲冷哼從身側(cè)響起瞻想,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娩嚼,沒想到半個月后蘑险,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡岳悟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年佃迄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贵少。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡呵俏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滔灶,到底是詐尸還是另有隱情普碎,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布录平,位于F島的核電站麻车,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斗这。R本人自食惡果不足惜动猬,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望表箭。 院中可真熱鬧赁咙,春花似錦、人聲如沸免钻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伯襟。三九已至猿涨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姆怪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稽揭,地道東北人俺附。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像溪掀,于是被迫代替她去往敵國和親事镣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 基礎(chǔ)知識儲備 -transform:CSS3新增的變形功能揪胃,其優(yōu)點是全過程不改變DOM性能更高璃哟。在transfor...
    諾奕閱讀 8,025評論 4 6
  • 效果預(yù)覽 上回書,我們已經(jīng)簡單實現(xiàn)如何翻一頁喊递。好随闪,現(xiàn)在我們復(fù)習(xí)一下。翻書效果的基本原理骚勘,請看下html布局: 簡單...
    一只正在成長的程序猿閱讀 943評論 0 1
  • 上回書铐伴,我們已經(jīng)簡單實現(xiàn)如何翻一頁。好俏讹,現(xiàn)在我們復(fù)習(xí)一下当宴。翻書效果的基本原理,請看下html布局: 簡單再次說明下...
    諾奕閱讀 2,764評論 0 3
  • CSS里transform變形這個屬性有點學(xué)習(xí)難度泽疆,尤其在CSS3里加上了3D效果之后户矢,2維變3維學(xué)習(xí)成本更是成倍...
    BULL_DEBUG閱讀 872評論 0 1
  • CSS里transform變形這個屬性有點學(xué)習(xí)難度,尤其在CSS3里加上了3D效果之后殉疼,2維變3維學(xué)習(xí)成本更是成倍...
    張歆琳閱讀 27,846評論 5 81