用10行JavaScript代碼製作一款漂亮的視差效果

2021-12-21 web前端開發

英文 | https://www.ibrahima-ndaw.com/blog/parallax-effect-with-10-lines-of-javascript/

翻譯 | web前端開發(web_qdkf)

在本文中,我們將使用HTML,CSS和僅10行JavaScript代碼來製作一個漂亮的視差效果。

首先,我們來看一下最終完成的視差效果的動畫圖:

接著,我們開始HTML的編寫。在HTML中,我們首先將其他元素包裹在main標記中,以下是HTML代碼。
<main>  <header>    <div>      <i></i>      <h3>Welcome</h3>      <p>Scroll to see how cool i am!</p>    </div>  </header>
<section> <h3>Cool like you</h3> </section></main>

然後,我們使用兩個標籤製作視差效果。第一個標記header包含頁面加載時顯示的元素,第二個標記section將在滾動時觸發以啟動效果。

CSS

在CSS這部分裡,我們需要先進行一些CSS的設置,然後將需要的字體進行導入進來,代碼如下:

@import url("https://fonts.googleapis.com/css?family=Courgette:400,700&display=swap");* {  margin: 0;  padding: 0;  box-sizing: border-box;}
body { background: linear-gradient(135deg, #0056a7, #165fa3, #477aaa); font-family: "Courgette", cursive;}
header { display: flex; justify-content: center; align-items: center; flex-direction: column; position: relative; height: 100vh; color: #eee; z-index: -1; text-align: center; animation: fadeIn 1.5s ease-in-out;}

接著,我們用position:relative控制header標籤的位置,當效果開始時,屬性z-index:-1會將header標籤放置在section元素後面。

section {  display: flex;  align-items: center;  justify-content: center;  z-index: 1;  height: 100vh;  font-size: 5rem;  background: #fcdb6d;  color: #0056a7;}

在這裡,我們為section選擇器使用了相反的方法,即當z-index屬性滾動為1時,則section標記裡面的字放置在header上方。

.animate-me {  animation: bounceIn 3s ease-in-out;}
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; }}
@keyframes bounceIn { 0% { transform: scale(0.1); opacity: 0; } 60% { transform: scale(1.2); opacity: 1; } 100% { transform: scale(1); }}

最後,雖然不是最不重要的一點,但我們為元素入口製作了一些動畫。section的反彈效果和header的褪色效果。該類animate-me將section通過JavaScript添加到後面。

JavaScript

最後,我們通過使用JavaScript,讓效果在滾動時產生視差效果。

window.addEventListener("scroll", function() {  const distance = window.scrollY  document.querySelector("header").style.transform = `translateY(${distance *    1}px)`  document.querySelector(    ".container"  ).style.transform = `translateY(${distance * 0.3}px)`  setTimeout(() => {    document.querySelector("section h3").classList.add("animate-me")  }, 400)})

如你在這裡看到的,我們收聽scroll事件以開始效果。
然後,我們將通過Y軸(垂直)distance的數量分配給常量scroll。然後從DOM中選擇所需的元素並訪問該transform屬性。這樣,我們現在就可以使用該translateY值動態地將賦值給translateY。該值header與其子元素之間有所不同container,只是效果更平滑。然後,通過添加彈跳效果標題的animate-me類來完成所有操作section。

相關焦點

  • JavaScript模擬輪播圖效果
    楚楓眼前一亮,第一次發現,世間還有長得如此奇葩的人。    巫九鼻孔一張,大嘴一咧,拍著那乾癟的肚子,得意洋洋的道:「老子就是巫九,你挑戰老子?」    「不是挑戰你,是要宰了你。」楚楓冷聲笑道。    「好,老子滿足你這個心願,長老,拿張生死狀來,老子今日在這裡了解了這小子。」巫九扯開嗓子,對著下方吼了一聲。
  • 0基礎學習JavaScript一定要知道如何使用VS2019去編寫代碼
    JavaScript代碼可以實現一些動態效果,且還可以從資料庫中拿數據,具有動態數據交互功能。JavaScript代碼的基本使用如下說明:一、代碼編寫位置<script type="text/javascript">----JavaScript代碼段</script&
  • 第一篇:JavaScript基本語法
    將上面的代碼保存為HTML網頁文件。在瀏覽器打開保存的HTML網頁文件,瀏覽器會顯示下圖所示的內容:在用戶名和登錄密碼輸入域隨意輸入內容,然後用滑鼠單擊【驗證】按鈕,瀏覽器會彈出對話框,顯示最近輸入的用戶名的名稱。
  • 利用OpenCV建立視差圖像
    視差因此,如果我們能在2D圖像中獲得與不同圖像層的相同效果,那麼我們可以在這些圖像中產生類似的感覺,並產生我們想要的酷效果。讓我們分解一下這個過程
  • 20個常用的JavaScript簡寫技巧
    任何程式語言的簡寫技巧都能夠幫助你編寫更簡練的代碼,讓你用更少的代碼實現你的目標。讓我們一個個來看看 JavaScript 的簡寫技巧吧。 1. 聲明變量 2.
  • BOOM:一款有趣的Javascript動畫效果
    實踐出真知,看看github大神如何用Javascript實現酷炫的動畫效果。
  • Bootstrap組件福利篇:幾款好用的組件推薦,你值得擁有!(一)
  • 花10分鐘用Vue 實現 1 個數字滾動效果
    前言快要雙十一了,然後公司要製作一個展示的電子大屏,其中總金額的數字需要滾動的切換效果,類似於這樣:思考&實現2.1 思考誒,作為十年代碼經驗常年摸魚的我,想起來vue中的transition-group可以實現類似的效果,首先來看看官網的案例[1]效果:
  • 高一保送清華,博一6篇Paper!他還用99行代碼實現了「冰雪奇緣」
    一己之力開發物理模擬程式語言用99行代碼實現介質模擬《冰雪奇緣》沒有真人出演,預算卻高達1.5億美元,每一秒的鏡頭都是經費在燃燒一般人想用電腦做出CG特效簡直不可想像。但是,清華姚班畢業,一位來自中國的MIT麻省理工博士,開發的一種新的CG特效程式語言:Taichi(太極)大大降低了CG製作的門檻。傳統方法需要千百行代碼的CG動畫,現在只用99行代碼,你也可以像《冰雪奇緣》裡的艾莎公主一樣擁有冰雪魔法。
  • 用html5製作音樂播放器,這3款就足夠了!
    用HTML5結合Jquery做一個簡易版的音樂播放器<!DOCTYPE HTML><html><head><title>三生草</title><script language="javascript" src="jquery-1.4.2.js"></script><script language="javascript
  • jquery中淡入淡出切換效果函數使用方法?
    jquery是javascript很常用和熱門的一個類庫,前端開發人員必須學習的一個js類庫,接下來來看看怎麼使用jquery中的怎麼切換使用淡入淡出方法。jquery最大的特點就是極大地簡化了 JavaScript 編程。而且使用起來也是很簡單的,比javascript更方便簡單。
  • 不懂代碼沒問題!15款網頁設計師必知的無代碼網站搭建平臺
    如果你想製作一款功能強大、可深度定製的網站,那麼Carrd 並不符合你的選擇。2.Hype 3.0同樣的,Hype 3.0 讓你可以無需編寫代碼而製作出漂亮的HTML 5的內容。不論你想創建嵌入網頁的內容還是信息圖,電子書或者演示文稿,都可以藉此獲得不錯的效果。10.
  • HTML網頁的代碼學習收藏,標識表示代碼大全
    :<pre>正文</pre>換帖子背景:<body background="背景圖片地址">固定帖子背景不隨滾動條滾動:<body background="背景圖片地址" body bgproperties=fixed>定製帖子背景顏色:<body bgcolor="#0000">(value值見10
  • ICEVE精選 | Lytro CTO Kurt Akeley:虛擬實境中的視差
    在以上10種裡我們會發現,大部分技巧是單眼技巧,也就是說只有一隻眼睛或閉上一隻眼睛也能得到的線索,例如,物體的大小、前後位置、明暗變化,以及和地平線之間形成的夾角,各種通過一隻眼睛就能得到的信息。接下來我會進行詳細的介紹。 大多數線索都是單眼線索,只有一兩個是雙眼線索——用兩隻眼睛才能得到信息。
  • 什麼是「視差」
    比如,當你伸出一個手指放在眼前,先閉上右眼,用左眼看它;再閉上左眼,用右眼看它,會發現手指相對遠方的物體的位置有了變化,這就是從不同角度去看同一點的視差。視差可用觀測者的兩個不同位置之間的距離(基線)在天體處的張角來表示。
  • 初學JavaScript應該清楚函數、事件、關鍵字和保留字、注釋的使用
    在HTML代碼中嵌入JavaScript代碼將JS代碼與Html代碼混合在一起編寫,如下代碼:<!DOCTYPE html><html><head><meta charset="utf-8" /> <title>一都編程,每個知識就是一個案例。
  • 三行代碼讓你的chrome小恐龍飛起來
    先上代碼,會javascript可以直接打開chrome的console去玩var dino = Runner.prototype//讓小恐龍可以永生Runner.instance_.setSpeed(299792458)//讓小恐龍飛上天,和太陽肩並肩Runner.instance_.tRex.setJumpVelocity(1000000)以下爭取寫的讓不會代碼的同學也能夠看得懂
  • (14/30)Blazor系列:JavaScript interop(互操作)
    接著將原本的ReturnPostId()改名為DeletePost(),類型改為Task,裡面的邏輯稍作修改,可以看到JavaScript 也是用EventCallback 的方式,除了會回傳值的InvokeAsync,還有不回傳值的InvokeVoidAsync可以用。
  • ;Hello, Android 10!;Javascript 的工作原理
    歡迎體驗 Android 10!Android • 2019-09-04經過一年多的開發和長達數月的早期使用者測試,Android 10 終於準備好和您見面了!Android 10 聚焦移動創新、安全隱私和數字健康三大主題,全面打造最佳用戶體驗。