什麼是Animate On Scroll (AOS)?
連結:Animate on scroll
這是一個名叫Michał Sajnóg的波蘭工程師發表的js庫(Library),在他的Github也提供了CDN引入以及npm安裝(或yarn)兩種方式去使用AOS.js。該網站展示了利用aos滾動捲軸時,觸發div進場的效果。
加入自己網頁的方法很簡單,在<body>
嵌入js
1 | <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> |
並且在<head>
裡嵌入CSS
1 | <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet"> |
再來就是照官網的範例把想要的特效加到<div>
內即可,例如:
1 | <div data-aos="fade-up"></div> |
也可以加入其他不同的控制屬性,例如:
(留意每個數值有上限,超過就不會作用)
1 | <div |
另外,如果是用React.js、Vue.js等專案,可以使用npm安裝aos
package來管理,安裝方法如下:
yarn add aos@next
- 或
npm install --save aos@next
再來於Index.js內引入即可:
1 | import AOS from 'aos'; |
進入正題,我遇到什麼問題?
教學完後,今天要進入我們的正題,我在使用aos.js
的時候遇到的問題,那就是:會出現多餘的空白!
目前發現這個BUG的觸發條件是:
- 該頁面任一
<div>
使用了data-aos="fade-left"
- 使用Responsive裝置
馬上我就發現這個專案的Github Issues裡有人遇到跟我一樣的問題,就是這篇White Space on Mobile #626。這篇文章裡有人提供了幾個不錯的方法,不過我自己實測只有在CSS檔內加上以下程式碼有用:
1 | html, body{ |
另外我發現overflow-x設置成hidden會讓position: sticky
失效,例如Navbar就常使用這個position配置。那這個失效基本上也有解法,就是在position處加上相容性程式碼:
1 | .yourclass{ |
不過如果是利用React styled-components去做css樣式的話,目前不支援-webkit-sticky
的語法,所以styled-components目前還沒有解法,只能先放棄使用fade-left
了,等之後有找到別的方法再來更新吧!