javascript - 請(qǐng)教一個(gè)關(guān)于頁面視差效果的實(shí)現(xiàn)
問題描述
頁面效果:
驚蟄
關(guān)于這個(gè)效果的模仿:
我起初是在知乎獲知了一個(gè)叫 skrollr.js 的庫,并且學(xué)習(xí)并應(yīng)用到自己的頁面,由于我的頁面不像上面的是靜態(tài)節(jié)點(diǎn),文章和圖片都是請(qǐng)求得到,并且是分步請(qǐng)求依賴于 img 的 onload 事件來渲染一套(文章+背景圖)的模板,并 append 到頁面中。剛開始的實(shí)現(xiàn)是把背景圖全部用 fixed 定位層疊到屏幕,利用 skrollr 的根據(jù)參照物做出 css 屬性狀態(tài)變化來達(dá)到效果。但實(shí)際上哪怕不寫效果,只要一個(gè) skrollr.js 的初始化函數(shù),在安卓機(jī)上就卡得不行。 skrollr.js 作者也有指出,如下圖:
后來又仔細(xì)觀察了下樓上驚蟄頁面的效果,發(fā)現(xiàn):
容器內(nèi)的每個(gè)父塊都是 absolute 定位,并且都是 left:0 top: 0 right: 0 bottom: 0
容器采用了類似kinetic庫利用 touch 事件使用 translate 模擬滾動(dòng)。。。 效果 demo: demo
疑問:
他是如何達(dá)到視差效果,雖然看到有 z-index 屬性
他的 translate 基本上是移除一屏的高度,然后后面的頁面就上來了。。。 這種如何做到了,求具體解釋
問題解答
回答1:全部絕對(duì)定位,右邊的滾動(dòng)條是模擬的。在同樣的z-index高度下,后面的元素會(huì)自動(dòng)的覆蓋前面的元素。
所以只要把根據(jù)滾動(dòng)狀態(tài)來把后面的translate改變就行了,你可以理解成一個(gè)卡片覆蓋另一個(gè)卡片。
簡(jiǎn)單來說,最開始滾動(dòng)時(shí)把第二屏的元素往上移動(dòng),知道超過一屏則開始第二屏,以此類推。
后面就是一些背景圖放大縮小之類的效果了。
相關(guān)文章:
1. 點(diǎn)擊頁面就自動(dòng)輸入到mysql.求解2. node.js - nodejs使用formidable上傳文件問題3. node.js - 帶有node_modules目錄的項(xiàng)目,用phpstorm打開速度極慢,怎么解決?4. javascript - windos下第一次用Django無法正確創(chuàng)建工程目錄5. java - IDEA從SVN檢出項(xiàng)目 并在tomcat上運(yùn)行 求詳細(xì)流程6. java - 多叉樹求值,程序高手,算法高手看過來7. form表單中的label標(biāo)簽8. 單擊登錄按鈕無反應(yīng)9. mysql索引的疑問10. 主從復(fù)制 - MySQL 主從延遲 300s 以上,求大神解答
