網際網路每天都在發生變化,新的技術層出不窮,已有的技術則會逐漸淡出人們的視線。因此,網頁設計師和前端開發人員必須掌握前沿的技術發展趨勢。如扁平化設計、單頁面網站、凍結行和滾動條響應,這些都是目前前端設計的趨勢。
在這個教程中,我們會介紹基於jQuery和CSS的Scroll-based Animations。
1.什麼是Scroll-based Animations?
Scroll-based Animations是基於滾動條的動畫效果,它是一個很新的技術,而且目前已經非常流行了,我們可以在各大視訊網站下拉滾動條時發現它們的蹤跡,播放視訊時,一旦原先的視訊展示位置被拉到顯示區外,視訊便開始隨著滾動條移動播放。如果你還不理解Scroll-based Animations,你可以在GBDebug中檢視它的Demo,地址如下。
http://www.gbtags.com/gb/debug/dd28a174-d262-4612-8943-9dba63c978b9.htm毫無疑問的,Scroll-based Animations使前端開發者可以很容易地建立友好的互動式Web頁面。它們在使用者向下滾動頁面時被觸發,我們可以很容易的通過CSS和jQuery來實現它們。
我們通過jQuery的scroll()方法來監聽用滾動條向下滑動事件。一旦監聽到使用者正在操作滾動條,我們就可以通過jQuery的 scrollTop()方法來得到滾動條當前的相對位置並做出相關的響應:
$(window).scroll(function() { if ($(this).scrollTop() > 0) { // apply effects and animations } });2.它是響應式的嗎?
如果我們想建立出響應式的Scroll-based Animation,我們必須定義以下兩個屬性:
- a..瀏覽器的width屬性
- b.瀏覽器的height屬性
如果沒有定義這兩個屬性,我們建立的Scroll-based Animations就是靜態的,當我們調動視窗大小的時候它就不會正常工作。
我們可以通過jQuery的width()和height()方法來得到這兩個屬性。
為了達到正常的效果,我們必須要做出如下的檢查:
$(window).scroll(function() { if ($(this).width() < 992) { if ($(this).height() <= 768) { if ($(this).scrollTop() < 500) { // apply effects } if($(this).scrollTop() > 1000) { // apply effects } } } });通過以上的簡介,我們已經大致瞭解了Scroll-based Animations, 下面我們通過四個不同的例子來具體的瞭解它的用法。
注:在實際專案中,我們可以使用物件快取和CSS Animations來代替jQuery的animate()方法,為了專注對Scroll-based Animations概念的理解,本文全部使用jQuery來演示。Example #1
這個效果是當滾動條離頂部位置超過60px的時進行響應,顯示banner子元素h2的內容,並將原本顯示的info元素隱藏,程式碼片段表示如下:
if ($(window).scrollTop() > 60) { $('.banner h2').css('display', 'none'); $('.banner .info').css('display', 'block'); } else { $('.banner h2').css('display', 'block'); $('.banner .info').css('display', 'none'); }這個例子也可以這樣寫:
if ($(window).scrollTop() > 60) { $('.banner h2').hide(); $('.banner .info').show(); } else { $('.banner h2').show(); $('.banner .info').hide(); }Example #2
這個例子不侷限於對滾動條距頂部位置的監聽,同時還可以對視窗寬度進行監聽。更具體地說,我們是在監聽如下事件:
- 1.視窗的寬度屬性值小於或等於549 px,滾動條距頂部位置超過600 px。
- 2.視窗的寬度屬性值在550 px和991 px之間,滾動條距頂部位置超過480 px。
- 3.視窗的寬度屬性值大於991 px,滾動條距頂部位置超過450 px。
程式碼片段表示如下:
if ($(window).width() <= 549) { if($(window).scrollTop() > 600) { // the animation that's executed firstAnimation(); } } else if ($(window).width() > 549 && $(window).width() <= 991) { if($(window).scrollTop() > 480){ // the animation that's executed firstAnimation(); } } else { if ($(window).scrollTop() > 450) { // the animation that should be executed firstAnimation(); } }響應的方法firstAnimation()如下:
var firstAnimation = function () { $('.clients .clients-info').each( function () { $(this).delay(500).animate({ opacity: 1, height: '180', width: '250' }, 2000); } ); };上面的程式碼改變了clients-info元素的透明度、高度和寬度這三個屬性。
Example #3
這個例子的效果不僅取決於視窗的滾動條的位置,同時還可以對視窗寬度進行監聽。更具體地說,我們是在監聽如下事件:
- 1.視窗的寬度屬性值小於或等於549 px,滾動條距頂部位置的位置超過1750 px。
- 2視窗的寬度屬性值在550 px和991 px之間,滾動條距頂部位置的位置超過1150 px。
- 3視窗的寬度屬性值大於991 px,觸發動畫只有在頂部視窗的滾動條的位置超過850 px。
程式碼片段表示如下:
if ($(window).width() <= 549){ if($(window).scrollTop() > 1750){ secondAnimation(); } } else if ($(window).width() > 549 && $(window).width() <= 991) { if ($(window).scrollTop() > 1150) { secondAnimation(); } } else { if ($(window).scrollTop() > 850) { secondAnimation(); } }響應的方法secondAnimation()如下:
var secondAnimation = function() { $('.method:eq(0)').delay(1000).animate({ opacity: 1 }, 'slow', function() { $(this).find('h4').css('background-color', '#b5c3d5'); } ); $('.method:eq(1)').delay(2000).animate({ opacity: 1 }, 'slow', function() { $(this).find('h4').css('background-color', '#b5c3d5'); } ); $('.method:eq(2)').delay(3000).animate({ opacity: 1 }, 'slow', function() { $(this).find('h4').css('background-color', '#b5c3d5'); } ); $('.method:eq(3)').delay(4000).animate({ opacity: 1 }, 'slow', function() { $(this).find('h4').css('background-color', '#b5c3d5'); } ); };上面的程式碼改變了method元素的背景顏色屬性。
Example #4
這個例子的影響不僅取決於視窗中滾動條距頂部位置,同時還可以對視窗寬度進行監聽。更具體地說,我們是在監聽如下事件:
- 1.視窗的寬度屬性值小於或等於549 px,滾滾動條距頂部位置的位置超過3500 px。
- 2.視窗的寬度屬性值在550 px和991 px之間,滾動條距頂部位置的位置超過2200 px。
- 3.視窗的寬度屬性值大於991 px,滾動條距頂部位置的位置超過1600 px。
程式碼片段表示如下:
if ($(window).width() <= 549) { if ($(window).scrollTop() > 3500) { thirdAnimation(); } } else if ($(window).width() > 549 && $(window).width() <= 991) { if ($(window).scrollTop() > 2200) { thirdAnimation(); } } else { if ($(window).scrollTop() > 1600) { thirdAnimation(); } }響應的方法thirdAnimation()如下:
var thirdAnimation = function() { $('.blogs').find('p').delay(1400).animate({ opacity: 1, left: 0 }, 'slow' ); $('.blogs').find('img').delay(2000).animate({ opacity: 1, right: 0 }, 'slow' ); $('.blogs').find('button').delay(2500).animate({ opacity: 1, bottom: 0 }, 'slow' ); };上面的程式碼改變了p,img,button元素的opacity, left, right 和 bottom 屬性。
英文原文地址:http://www.sitepoint.com/introduction-jquery-scroll-based-animations/
相關閱讀
評論(2)