3D圖片旋轉(zhuǎn)輪播

先上效果圖:

分析:
看效果圖,其實是好多些長方體在旋轉(zhuǎn)彤守。效果中一共有4幅圖徙融,把每幅圖都切割成一長條一長條洒缀,然后這四幅圖的每一長條都拼接成一個長方體,進行旋轉(zhuǎn)變換欺冀。

html模板:

<div class="box">
    <ul id="picList">
        <li>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
        </li>
    </ul>
</div>

結(jié)合之前的3D立方體效果帝洪。將代碼中的一些重用代碼利用.
剩下兩個邊用兩個span標(biāo)簽,填充黑色脚猾,來充當(dāng)左右兩個邊。

html:

<div class="box">
    <ul id="picList">
        <li>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <a href=""></a>
            <span></span>
            <span></span>
        </li>
    </ul>
</div>

css:

.box{ width: 800px; margin: 30px auto; }

#picList{ margin:0; padding: 0; height: 360px; -webkit-perspective:800px; }

#picList li{ width: 25px; height: 360px; position: relative; list-style: none; float: left;              -webkit-transform-style: preserve-3d;
             -webkit-transform: translateZ(-180px) rotateX(0deg);
             }

#picList a{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; }

#picList a:nth-of-type(1){ background: url(img/1.jpg) no-repeat;-webkit-transform: translateZ(180px); }

#picList a:nth-of-type(2){ background: url(img/2.jpg) no-repeat; -webkit-transform-origin:top; -webkit-transform: translateZ(-180px) rotateX(90deg);  }

#picList a:nth-of-type(3){ background: url(img/3.jpg) no-repeat;  -webkit-transform: translateZ(-180px); }

#picList a:nth-of-type(4){ background: url(img/4.jpg) no-repeat; -webkit-transform-origin:bottom; -webkit-transform: translateZ(-180px) rotateX(-90deg); }

#picList span{ width: 360px; height: 360px; background-color: #333; position: absolute; top: 0; }

#picList span:nth-of-type(1){ left: 0; -webkit-transform-origin: left; -webkit-transform:translateZ(180px) rotateY(90deg); }

#picList span:nth-of-type(2){ right: 0; -webkit-transform-origin: right; -webkit-transform:translateZ(180px) rotateY(-90deg);  }

此時砚哗,效果圖如下:

那接下去就是通過js代碼將圖片完整顯示出來龙助。

window.onload = function(){

    var oPicList = document.getElementById("picList");
    var iLiW = 25;
    var sHtml = "";
    var iLength = oPicList.clientWidth/iLiW;


    for(var i=0; i<iLength; i++){

        sHtml += '<li><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a><span></span><span></span></li>';
    }
    oPicList.innerHTML=sHtml;
}

此時,效果如下圖:

可以看出有一個問題:

從中間分開蛛芥,右邊的每個 li 元素中的左邊黑色面都顯示出來了提鸟。

原因:

li 元素使用 position屬性為relative,后面的元素層級會比前面的高仅淑。

第二個li元素會覆蓋第一個元素右側(cè)黑邊称勋; 第三個會遮住第二個的右側(cè)黑邊 ......

到中間分開了。右邊的 第二個元素左側(cè)黑邊遮住了第一個元素 ......
所以黑邊出來了涯竟。

解決辦法:

以中間為分界點赡鲜。左邊的層級越來越高空厌。右邊的li元素層級越來越低。

這樣银酬,右側(cè)的每個 li 元素的黑邊因為層級比前一個元素弱所以被前一個元素遮住了嘲更。

所以通過js設(shè)置樣式,給style標(biāo)簽設(shè)置 id 值揩瞪,并定義一個ostyle 變量赋朦,通過它來設(shè)置style樣式。

var oCss = document.getElementById("css");
var oStyle = "";
var index = 0;

for(var i=0; i<iLength; i++){

        i>iLength/2?index--:index++;

        oStyle += "#picList li:nth-of-type(" +(i+1)+ "){ z-index: " +index+ "}";
        oStyle += "#picList li:nth-of-type(" +(i+1)+ ") a{ background-position: -" +i*iLiW + "px 0px; }";

        sHtml += '<li><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a><span></span><span></span></li>';
}
oPicList.innerHTML=sHtml;
oCss.innerHTML += oStyle;

此時李破,效果如圖:

我們旋轉(zhuǎn)45度看一下效果:

正常宠哄,接下去設(shè)置下按鈕。
html模板改進:

<div class="box">
    <ul id="picList">
        <li>
        </li>
    </ul>
    <ol id="btns">
        <li class="active">1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ol>
</div>

css:

#btns{ padding: 50px; height: 30px; }

#btns li{ height: 30px; width: 30px; background-color: #000; color: #fff; font-size:16px; font-weight: bold; line-height: 30px; text-align:center; margin: 0 10px; border-radius: 50%; float: left; list-style: none; cursor: pointer;}

#btns .active{ background-color: #f60; }

效果如下:

分析:

  1. 獲取每個 li 元素
  2. 點擊1嗤攻,其實是旋轉(zhuǎn)-90度毛嫉;點擊2,旋轉(zhuǎn)-180度屯曹;點擊3狱庇,旋轉(zhuǎn)-270度;點擊4恶耽,旋轉(zhuǎn)-360度密任。

js代碼:

3D圖片旋轉(zhuǎn)輪播效果結(jié)束

不積跬步無以至千里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偷俭,隨后出現(xiàn)的幾起案子蟋定,更是在濱河造成了極大的恐慌嫩海,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冬骚,居然都是意外死亡,警方通過查閱死者的電腦和手機蓬推,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門婴渡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人川抡,你說我怎么就攤上這事辐真。” “怎么了崖堤?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵侍咱,是天一觀的道長。 經(jīng)常有香客問我密幔,道長楔脯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任胯甩,我火速辦了婚禮昧廷,結(jié)果婚禮上堪嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己麸粮,他們只是感情好溉苛,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弄诲,像睡著了一般愚战。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齐遵,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天寂玲,我揣著相機與錄音,去河邊找鬼梗摇。 笑死拓哟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伶授。 我是一名探鬼主播断序,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糜烹!你這毒婦竟也來了违诗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疮蹦,失蹤者是張志新(化名)和其女友劉穎诸迟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕乎,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡阵苇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了感论。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绅项。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖比肄,靈堂內(nèi)的尸體忽然破棺而出趁怔,到底是詐尸還是另有隱情,我是刑警寧澤薪前,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站关斜,受9級特大地震影響示括,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痢畜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一垛膝、第九天 我趴在偏房一處隱蔽的房頂上張望鳍侣。 院中可真熱鬧,春花似錦吼拥、人聲如沸倚聚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惑折。三九已至,卻和暖如春枯跑,著一層夾襖步出監(jiān)牢的瞬間惨驶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工敛助, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粗卜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓纳击,卻偏偏與公主長得像续扔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子焕数,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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