1、整體的自我理解
const trigger = new ScrollTrigger.default({
trigger: {
once: false, // 切換是否只是一次性
offset: {
// 元素的偏移量要加上視圖的偏移量才算整體偏移量
// 例如:現在的視圖高度是667,元素out的高度是228(還沒顯示用out元素高度,已經顯示用in元素的高度),所以現在的偏移量是228*0.2+667*02
element: {
x: 0,
y: (trigger: any, rect: any, direction: any) => {
// rect (整體scrollDOM容器的所有信息)
// trigger (內部已經添加的動畫)
// direction (方向,top,bottom等)
// 元素距離視圖層多少的偏移量就顯示元素
return 0.2
}
},
viewport: {
x: 0,
y: (trigger: any, frame: any, direction: any) => {
// trigger (內部已經添加的動畫)
// frame (視圖高寬)
// direction (方向,top,bottom等)
return trigger.visible ? 0 : 0.2
}
}
},
toggle: {
// 元素切換的class,可以數組顯示多個元素,也可以只是字符串
class: {
},
// 回調函數
callback: {
// 元素可見狀態變化的回調方法
visible: (trigger: any) => {
},
// 進入元素的回調方法
in: (trigger: any) => {
return new Promise((resolve, reject) => {
console.log('in')
console.log(trigger)
setTimeout(resolve, 10)
})
},
// 移出元素的回調方法
out: (trigger: any) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, 10)
})
}
}
},
},
scroll: {
// 滾動停止后,動畫繼續執行的毫秒數
sustain: 200,
// 滾動條的主體
element: document.getElementById('scroll'),
// 滾動中的回調函數
callback: (e: any) => { console.log(e) },
// 開始滾動的回調函數
start: () => { },
// 停止滾動的回調函數
stop: () => { },
// 滾動方向變化的回調函數
directionChange: () => { }
}
})
trigger.add('#an', {
toggle: {
class: {
in: ['animateIn'],
out: ['animateOut']
}
}
})
2、html
<div className={style.scrollView} id="scroll">
<div id="an"></div>
</div>
