每次滾動到元素時,都顯示加載影片,如何添加?
元素添加初始引數
以上圖中的影片為例,添加倆個左右容器,將內容放置在容器內部,
添加初始資料,默認透明度0、左右分別移動100px,
1 //左側容器 2 .item-leftContainer { 3 opacity: 0; 4 transform: translateX(-100px); 5 } 6 //右側容器 7 .item-rightContainer { 8 opacity: 0; 9 transform: translateX(100px); 10 }
添加影片資料
在less中添加影片資料,這里只設定了to,也可以省略第1步中的初始引數設定而在影片里設定from,
執行后,透明度由0到1,倆個容器向中間移動100px回到原處,
1 //影片 2 @keyframes showLeft { 3 to { 4 opacity: 1; 5 transform: translateX(0px); 6 } 7 } 8 @keyframes showRight { 9 to { 10 opacity: 1; 11 transform: translateX(0px); 12 } 13 } 14 @keyframes hideLeft { 15 to { 16 opacity: 0; 17 transform: translateX(-100px); 18 } 19 } 20 @keyframes hideRight { 21 to { 22 opacity: 0; 23 transform: translateX(100px); 24 } 25 }
觸發影片
頁面加載/重繪觸發 - 在componentDidMount中執行
頁面滾動時觸發 - 在componentDidMount、componentWillUnmount添加監聽/注銷頁面滾動的事件
校驗當前滾動高度與元素的位置差異:
window.pageYOffset(滾動距離) + windowHeight(視窗高度) > leftElement.offsetTop (元素的相對位置)+ parentOffsetTop(父元素的相對位置) + 200
- 真正的滾動視覺位置 - window.pageYOffset(滾動距離) + windowHeight(視窗高度)
- 元素距離頂部的高度 - 這里使用了leftElement.offsetTop + parentOffsetTop,原因是父容器使用了absolute絕對定位,如果是正常布局的話,使用元素當前的位置leftElement.offsetTop即可
- 額外添加200高度,是為了優化視覺體驗,當超出200高度時才觸發影片
當頁面滾動到下方,觸發顯示影片;當頁面重新滾動到上方,觸發隱藏影片,
1 componentDidMount() { 2 this.checkScrollHeightAndLoadAnimation(); 3 window.addEventListener('scroll', this.bindHandleScroll); 4 } 5 componentWillUnmount() { 6 window.removeEventListener('scroll', this.bindHandleScroll); 7 } 8 bindHandleScroll = (event) => { 9 this.checkScrollHeightAndLoadAnimation(); 10 } 11 checkScrollHeightAndLoadAnimation() { 12 const windowHeight = window.innerHeight; 13 let parentEelement = document.getElementById("softwareUsingWays-container") as HTMLElement; 14 const parentOffsetTop = parentEelement.offsetTop; 15 let leftElement = (parentEelement.getElementsByClassName("item-leftContainer") as HTMLCollectionOf<HTMLElement>)[0]; 16 if (window.pageYOffset + windowHeight > leftElement.offsetTop + parentOffsetTop + 200) { 17 leftElement.style.animation = "showLeft .6s forwards" //添加影片 18 } else { 19 leftElement.style.animation = "hideLeft 0s forwards" //隱藏影片 20 } 21 let rightElement = (parentEelement.getElementsByClassName(".item-rightContainer") as HTMLCollectionOf<HTMLElement>)[0]; 22 if (window.pageYOffset + windowHeight > rightElement.offsetTop + parentOffsetTop + 200) { 23 rightElement.style.animation = "showRight .6s forwards" //添加影片 24 } else { 25 rightElement.style.animation = "hideRight 0s forwards" //隱藏影片 26 } 27 }
關鍵字:React 滾動、加載/出現影片
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/18282.html
標籤:Html/Css
