仿github404頁(yè)面

本文首發(fā)于我的博客烁巫,這是我的github,歡迎star蘑秽。

偶然看到github404頁(yè)面饺著,沒(méi)想到github404頁(yè)面也是做的很有心,就試著找了下源碼肠牲,打算仿一下這個(gè)效果幼衰。
??這個(gè)效果看上去是3d的,其實(shí)沒(méi)有用到css3里邊的任何一個(gè)與3d有關(guān)的屬性缀雳,這個(gè)頁(yè)面應(yīng)該在很早之前就被做出來(lái)了渡嚣,可能那時(shí)的css3兼容性還沒(méi)現(xiàn)在這么好。這個(gè)頁(yè)面是借用圖片錯(cuò)位俏险,以及圖片運(yùn)動(dòng)速度不一致严拒,給人一種立體感。下邊先看下html結(jié)構(gòu):

<div id="wrapper">
    <div id="field">
        ![](field.jpg)
    </div>
    <div id="pictures">
        ![](text.png)
        ![](cat.png)
        ![](cat_shadow.png)
        ![](speeder.png)                        
        ![](speeder_shadow.png)            
        ![](buliding_1.png)
        ![](building_2.png)                        
    </div>
</div>

圖片從網(wǎng)站上下載竖独,就放成這樣的結(jié)構(gòu)。現(xiàn)在的圖片還是平鋪在頁(yè)面上挤牛,我們用position: absolatez-index使得圖片放在一個(gè)合適的位置莹痢,確定它們的前后順序。

html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#field {
    position: absolute;
    top: 0;
    left: 0;
    overflow: hidden;
    width: 100%;
    height: 370px;
}
.img_bg {
    position: absolute;
    top: -11px;
    left: -20px;
    width: 120%;
    height: 425px;
}
.img_text {
    position: absolute;
    z-index: 8;
}
.img_cat {
    position: absolute;
    z-index: 7;
}
.img_speeder {
    position: absolute;
    z-index: 6;
}
.img_cat_shadow {
    position: absolute;
    z-index: 5;
}
.img_speeder_shadow {
    position: absolute;
    z-index: 4;
}
.img_building_1 {
    position: absolute;
    z-index: 3;
}
.img_building_2 {
    position: absolute;
    z-index: 2;
}

背景圖片需要拉伸寬于屏幕一些,因?yàn)楸尘皥D也是隨鼠標(biāo)的移動(dòng)而左右移動(dòng)的竞膳。下邊是圖片的數(shù)據(jù)結(jié)構(gòu):

window.onload = function() {
    var window_width, window_height,
        field_width, field_height,
        rate_w, rate_h,
        field, text, cat, cat_shadow, speeder, speeder_shadow, buliding_1, building_2;

    window_width = document.body.clientWidth;
    window_height = document.body.clientHeight;

    field = document.getElementById('field');
    field_width = field.offsetWidth;
    field_height = field.offsetHeight;

    rate_w = field_width / window_width;
    rate_h = field_height / window_height;

    var imgArray = {
        bg : { left: -780, top: -200 ,scale: 0.06, isFont: false },
        text : { left: -500, top: -120, scale: 0.03, isFont: true },
        cat : { left: -200, top: -100 ,scale: 0.02, isFont: true },
        cat_shadow : { left: -189, top: 100 ,scale: 0.02, isFont: true },
        speeder : { left: -70, top: -40 ,scale: 0.01, isFont: true },
        speeder_shadow : { left: -70, top: 75 ,scale: 0.01, isFont: true },
        building_1 : { left: 20, top: -111 ,scale: 0.03, isFont: false },
        building_2 : { left: 300, top: -60 ,scale: 0.05, isFont: false },
    };
}

首先我們先將圖片放到起始的位置航瞭,即模擬鼠標(biāo)放在屏幕中心位置的時(shí)候。頁(yè)面首次加載鼠標(biāo)不在瀏覽器中時(shí)就以這種方式布局圖片坦辟。

(function() {
    for( i in imgArray ) {
        var theImg = document.getElementsByClassName("img_" + i)[0];
        var offset_w = rate_w * window_width / 2 * imgArray[i].scale;
        var offset_h = rate_h * window_height / 2 * imgArray[i].scale;
        if( imgArray[i].isFont == true ) {
            theImg.style.left = field_width / 2 + offset_w + imgArray[i].left + "px";
            theImg.style.top = field_height / 2 + offset_h + imgArray[i].top + "px";
        } else {
            theImg.style.left = field_width / 2 - offset_w + imgArray[i].left + "px";
            theImg.style.top = field_height / 2 - offset_h + imgArray[i].top + "px";
        }
    }
})();

圖片在場(chǎng)景中的位置是按照鼠標(biāo)在瀏覽器中的位置來(lái)按比例移動(dòng)的刊侯。鼠標(biāo)移動(dòng)的時(shí)候改變圖片的topleft值來(lái)使圖片移動(dòng)。離我們近的物體的移動(dòng)方向和鼠標(biāo)的滑動(dòng)方向相同锉走,離我們遠(yuǎn)的物體移動(dòng)方向和鼠標(biāo)滑動(dòng)方向相反滨彻。而且離中間的點(diǎn)的距離越遠(yuǎn),移動(dòng)速度越快挪蹭,使其具有立體感亭饵。
??圖片的scale屬性就是用來(lái)設(shè)置圖片的移動(dòng)速度的,即鼠標(biāo)移動(dòng)的距離乘以這個(gè)比例就是圖片移動(dòng)的距離梁厉。isFont屬性是圖片移動(dòng)的方向辜羊,確定圖片與鼠標(biāo)移向相同或相反。監(jiān)聽(tīng)鼠標(biāo)移動(dòng)事件词顾,每次移動(dòng)都重新定位圖片位置八秃。

var picMove = function(pageX, pageY) {
    for( i in imgArray ) {
        var theImg = document.getElementsByClassName("img_" + i)[0];
        var offset_w = rate_w * pageX * imgArray[i].scale;
        var offset_h = rate_h * pageY * imgArray[i].scale;
        if( imgArray[i].isFont == true ) {
            theImg.style.left = field_width / 2 + offset_w + imgArray[i].left + "px";
            theImg.style.top = field_height / 2 + offset_h + imgArray[i].top + "px";
        } else {
            theImg.style.left = field_width / 2 - offset_w + imgArray[i].left + "px";
            theImg.style.top = field_height / 2 - offset_h + imgArray[i].top + "px";
        }
    }
}

document.body.onmousemove = function(e) {
    picMove(e.pageX, e.pageY);
};

到這里github404頁(yè)面的效果就算是做好了,可以點(diǎn)擊這里預(yù)覽效果肉盹,如果沒(méi)翻墻可能訪問(wèn)不了喜德,你也可以在github直接查看源碼。如果你有興趣垮媒,歡迎在下方留言討論舍悯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睡雇,隨后出現(xiàn)的幾起案子萌衬,更是在濱河造成了極大的恐慌,老刑警劉巖它抱,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕豫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡观蓄,警方通過(guò)查閱死者的電腦和手機(jī)混移,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侮穿,“玉大人歌径,你說(shuō)我怎么就攤上這事∏酌” “怎么了回铛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵狗准,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茵肃,道長(zhǎng)腔长,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任验残,我火速辦了婚禮捞附,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘您没。我一直安慰自己鸟召,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布紊婉。 她就那樣靜靜地躺著药版,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喻犁。 梳的紋絲不亂的頭發(fā)上槽片,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音肢础,去河邊找鬼还栓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛传轰,可吹牛的內(nèi)容都是我干的剩盒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慨蛙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辽聊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起期贫,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跟匆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后通砍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玛臂,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年封孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迹冤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虎忌,死狀恐怖泡徙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呐籽,我是刑警寧澤锋勺,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布蚀瘸,位于F島的核電站狡蝶,受9級(jí)特大地震影響庶橱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贪惹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一苏章、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奏瞬,春花似錦枫绅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至珍昨,卻和暖如春县耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镣典。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工兔毙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兄春。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓澎剥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赶舆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哑姚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評(píng)論 25 707
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,418評(píng)論 7 249
  • 身體會(huì)生病宛乃,靈魂也一樣 六塵阻塞了心神 讓人聽(tīng)不清、看不到 身體里住著兩個(gè)靈魂 一個(gè)幼稚的犯錯(cuò) 一個(gè)冷冷的旁觀 一...
    成泥閱讀 312評(píng)論 2 0
  • 昨天在外面玩了一會(huì)兒之后蒸辆,我和幾個(gè)朋友一起決定先回住的地方休息一下征炼。在休息的過(guò)程中,我們拿出撲克躬贡,玩起了斗地主...
    阿寶的育兒寶典閱讀 3,836評(píng)論 0 3
  • 高三崴腳之前一直體育健將拂玻,跑步酸些?so easy宰译。運(yùn)動(dòng)會(huì)給你拿個(gè)名次過(guò)來(lái)。 那時(shí)的我超喜歡跑步魄懂,我喜歡跑步的感覺(jué)沿侈,那...
    不要垃圾閱讀 1,656評(píng)論 0 5