1. 程式人生 > >視差滾動原理及實現

視差滾動原理及實現

作為一種優雅酷炫的頁面展示的方式,視差滾動(Parallax Scrolling)正受到越來越多前端設計師的寵愛,優設的2014年網頁設計趨勢中依然能夠看到它的影子,所以我們不得不來好好研究下視差滾動的原理和實現方式。

1.視差滾動

2.特性

視差滾動效果酷炫,適合於個性展示的場合。 視差滾動徐徐展開,適合於娓娓道來,講故事的場合。 視差滾動容易迷航,需要具備較強的導航功能。

3.原理

傳統的網頁的文字、圖片、背景都是一起按照相同方向相同速度滾動的,而視差滾動則是在滾動的時候,內容和多層次的背景實現或不同速度,或不同方向的運動。
有的時候也可以加上一些透明度、大小的動畫來優化顯示。

4.實現

4.1簡單實現

利用background-attachment屬性實現。 background-attachment: fixed || scroll || local
預設情況下,此屬性取值scroll,頁面滾動時,內容和背景一起運動,如果取值fixed,背景相對瀏覽器固定。借用Alloy Team的博文《視差滾動的愛情故事》的圖片和背景,來看看效果
<div class="article section1">
     每當我加班凌晨,獨自一人走在黑暗的回家路上
</div>
<div class="article section2">
     我會想起那天夕陽下的奔跑
</div>
<div class="article section3">
     那是我逝去的,青春
</div>
css非常簡單,
/*統一設定背景的background-attchment屬性*/
.article{
	width: 960px;
	margin: 0 auto;
	height: 800px;
	padding: 40px;
	font: 24px/1.5 'Microsoft YaHei';
	background-repeat: no-repeat;
	background-attachment: fixed;
	background-position: center center;
	background-size: cover;
	line-height:400px;
}
/*分別給每個部分設定不同的背景和顏色*/
.section1{
       color: white;
       background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section01.jpg);
}
.section2{
       color: #FF8500;
       background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section02.jpg);
}
.section3{
       color: #747474;
       background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section03.jpg);
}

4.2 加上動畫

上面的效果略顯呆板,我們在頁面滾動的時候,給文字加點動畫,看效果。我們來偵聽一下scroll事件,當頁面滾動某個地方時(),我們給元素新增動畫。
var articleHeight =800;
var section1 = document.getElementById('section1'),
section2 = document.getElementById('section2'),
section3 = document.getElementById('section3');
window.addEventListener('scroll',scrollHandler);

function scrollHandler(e){
	var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
	if(scrollTop > 0 && scrollTop < articleHeight){
		section1.classList.add('anim');
	}else if(scrollTop >= articleHeight && scrollTop < articleHeight*2){
		section2.classList.add('anim');
	}else if(scrollTop >= articleHeight*2 && scrollTop < articleHeight*3){
		section3.classList.add('anim');
	}
}
html和css也要進行一些修改
/*統一設定背景的background-attchment屬性*/
.article{
	width: 960px;
	margin: 0 auto;
	height: 800px;
	padding: 40px;
	background-repeat: no-repeat;
	background-attachment: fixed;
	background-position: center center;
	background-size: cover;
        font: 24px/1.5 'Microsoft YaHei';
        line-height:400px; 
        text-indent:-25em;
}
/*分別給每個部分設定不同的背景和顏色*/
.section1{
        color: white;
        background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section01.jpg);
}
.section2{ 
        color: #FF8500;
        background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section02.jpg);
}
.section3{ 
        color: #747474;
        background-image: url( http://www.alloyteam.com/wp-content/uploads/2014/01/section03.jpg);
}
.anim{
       -webkit-transition : all 1s ease-in;
       -moz-transition : all 1s ease-in;
       -ms-transition : all 1s ease-in;
       transition : all 1s ease-in;
       text-indent:3em;
}
	

4.3 背景運動

剛剛兩個情況只是背景保持fixed的狀態,我們可以給包括背景在內的多層次元素新增運動,從而實現視差滾動。多背景時,需要確保上面的背景是透明的。看看nettuts上的一個效果,研究研究,看看實現過程。 html檔案裡面使用了data-speed和data-type向js裡傳遞引數。
<!-- Section #1 -->
<section id="home" data-speed="10" data-type="background">
  <article>I am Absolute Positioned</article>
</section>
<!-- Section #2 -->
<section id="about" data-speed="4" data-type="background">
  <article>Simple Parallax Scroll</article>
</section>
CSS檔案,
#home {
    background: url(http://nettuts.s3.amazonaws.com/2138_SimpleParallax/Demo/images/home.jpg) 50% 0 no-repeat fixed;
    height: 1000px;
    margin: 0 auto;
    width: 100%;
    max-width: 1920px;
    position: relative;
    box-shadow: 0 0 50px rgba(0, 0, 0, 0.8);
}
#about {
    background: url(http://nettuts.s3.amazonaws.com/2138_SimpleParallax/Demo/images/about.jpg) 50% 0 no-repeat fixed;
    height: 1000px;
    margin: 0 auto;
    width: 100%;
    max-width: 1920px;
    position: relative;
    box-shadow: 0 0 50px rgba(0, 0, 0, 0.8);
}
/* Introduction */
 #home article {
    background: url("http://nettuts.s3.amazonaws.com/2138_SimpleParallax/Demo/images/intro.png") no-repeat scroll center top transparent;
    height: 458px;
    position: absolute;
    text-indent: -9999px;
    top: 291px;
    width: 100%;
}
#about article {
    background: url("http://nettuts.s3.amazonaws.com/2138_SimpleParallax/Demo/images/parallax.png") no-repeat scroll center top transparent;
    height: 458px;
    position: absolute;
    text-indent: -9999px;
    top: 291px;
    width: 100%;
}
javascript,這裡用到了jquery
$(document).ready(function () {
    // Cache the Window object
    $window = $(window);
 
    $('section[data-type="background"]').each(function () {
        var $bgobj = $(this); // assigning the object
 
        $(window).scroll(function () {
 
            // Scroll the background at var speed
            // the yPos is a negative value because we're scrolling it UP!                              
            var yPos = -($window.scrollTop() / $bgobj.data('speed'));
 
            // Put together our final background position
            var coords = '50% ' + yPos + 'px';
 
            // Move the background
            $bgobj.css({
                backgroundPosition: coords;
            });
        }); // window scroll Ends
    });
});

5.教程、外掛、欣賞

請大家參閱一下資源 完工! 感謝閱讀,希望可以為您帶來些許幫助! ---------------------------------------------------------------

前端開發whqet,關注web前端開發技術,分享網頁相關資源。
---------------------------------------------------------------

相關推薦

視差滾動原理實現

作為一種優雅酷炫的頁面展示的方式,視差滾動(Parallax Scrolling)正受到越來越多前端設計師的寵愛,優設的2014年網頁設計趨勢中依然能夠看到它的影子,所以我們不得不來好好研究下視差滾動的原理和實現方式。 1.視差滾動 2.特性 視差滾動效果酷炫,適合於個性

視差滾動原理實現

1.視差滾動 視差滾動(Parallax Scrolling)指網頁滾動過程中,多層次的元素進行不同程度的移動,視覺上形成立體運動效果的網頁展示技術。 2.特性 視差滾動效果酷炫,適合於個性展示的場合。 視差滾動徐徐展開,適合於娓娓道來,講故事的場合。 視差滾動容易

全屏滾動原理實現

之前用fullpage外掛做過全屏滾動的頁面,今天用js自己實現了一下,還蠻簡單的. 首先html結構為 <div id="wrap"> <div id="main"> <div id="page1" class="pa

關於base64編碼的原理實現

一個 replace 編碼範圍 func nco 都是 style bit 如果 我們的圖片大部分都是可以轉換成base64編碼的data:image。 這個在將canvas保存為img的時候尤其有用。雖然除ie外,大部分現代瀏覽器都已經支持原生的基於base64的enco

java設計模式singleton原理實現

最新 不必要 -- 不同 適合 所有 引用 ati cnblogs 題外話:我要變強,要變強,變強,強。 1、 Singleton的應用場景以及為什麽要使用singleSingleton是一生只能有一個實例的對象。只能由singleton自身創建一個實例。外人是無法創建實例

決策樹原理實現

方式 -1 變化 log nbsp 導致 結點 以及 重要 1、決策樹原理 1.1、定義 分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種類型:內部節點和葉節點,內部節點表示一個特征或屬性,葉節點表示一個類。

RPC原理實現

.get 版本 pcs 連接方式 正常 zookeepe list 接口 分布式計算 1 簡介 RPC 的主要功能目標是讓構建分布式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。為實現該目標,RPC 框架需提供一種透明調用機制讓使用者不必顯式的

SSO單點登錄原理實現

response dem nbsp boolean 配置文件 實現 有效 ucc ons 1.SSO分類   根據實現的域不同,可以把SSO分為同域SSO、同父域SSO、跨域SSO三種類型。 2.SSO實現原理 a.打開統一的登錄界面 b.登錄,同時向服務器寫入Cookie

線程池的原理實現

execute inter void date() 超過 緩沖 線程池大小 exceptio 調整 1、線程池簡介: 多線程技術主要解決處理器單元內多個線程執行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。 假設一個服務器完成一項任務所需時間為:T1

線程池原理實現

任務隊列 批量 not alt con 成了 代碼 pla extends 1、線程池簡介: 多線程技術主要解決處理器單元內多個線程執行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。 假設一個服務器完成一項任務所需時間為:T1

四.HashSet原理實現學習總結

throw map 所有 cti con name 保持 nts equal 在上一篇博文(HashMap原理及實現學習總結)詳細總結了HashMap的實現過程,對於HashSet而言,它是基於HashMap來實現的,底層采用HashMap來保存元素。所以如果對HashMa

五.HashTable原理實現學習總結

容量 區別 存儲 們的 如果 isn cte ash ref 有兩個類都提供了一個多種用途的hashTable機制,他們都可以將可以key和value結合起來構成鍵值對通過put(key,value)方法保存起來,然後通過get(key)方法獲取相對應的value值。一個是

CGLib動態代理原理實現

aop object col 子類 doc pos 輸出 intercept pub JDK實現動態代理需要實現類通過接口定義業務方法,對於沒有接口的類,如何實現動態代理呢,這就需要CGLib了。CGLib采用了非常底層的字節碼技術,其原理是通過字節碼技術為一個類創建子類,

sso簡單原理實現

登錄用戶 會話 例子 www 哪些 java類 pad adb 應對 轉自:http://www.cnblogs.com/ywlaker/ 一、單系統登錄機制 1、http無狀態協議   web應用采用browser/server架構,http作為通信協議。http是無

網站統計中的數據收集原理實現

fun 美的 置配 客戶 etc 分析 獲取 固定 open 網站統計中的數據收集原理及實現 網站數據統計分析工具是網站站長和運營人員經常使用的一種工具,比較常用的有谷歌分析、百度統計和騰訊分析等等。所有這些統計分析工具的第一步都是網站訪問數據的收集。目前主流的數據收

智能指針原理實現(1)- shared_ptr

red ++ 直接 初始 targe -- div urn 記錄 C++沒有內存回收機制,每次程序員new出來的對象需要手動delete,流程復雜時可能會漏掉delete,導致內存泄漏。於是C++引入智能指針,可用於動態資源管理,資源即對象的管理策略。 一、智能指針類別 智

智能指針原理實現(2)- unique_ptr

unique clas 結束 基礎 無法 body 智能指針 周期 文件 只允許基礎指針的一個所有者。 可以移到新所有者(具有移動語義),但不會復制或共享(即我們無法得到指向同一個對象的兩個unique_ptr)。 替換已棄用的 auto_ptr。 相較於 boost::s

分布式鎖原理實現方式

ack 常用 ima 個數 tar 刪除 不能 cap lock 本文轉自:http://www.hollischuang.com/archives/1716 目前幾乎很多大型網站及應用都是分布式部署的,分布式場景中的數據一致性問題一直是一個比較重要的

【數據結構】ArrayList原理實現學習總結(2)

!= 需要 但是 object count def 原理 arrays 位置 ArrayList是一個基於數組實現的鏈表(List),這一點可以從源碼中看出: transient Object[] elementData; // non-private to si

【數據結構】ArrayList原理實現學習總結

sset bsp perm arraylist 節點 article cell public arr 關於Java集合的小抄中是這樣描述的: 以數組實現。節約空間,但數組有容量限制。超出限制時會增加50%容量,用System.arraycopy()復制到新的數組,因此最好能