2023年6月21日发(作者:)

htmlcss滚动到元素位置,显⽰加载动画每次滚动到元素时,都显⽰加载动画,如何添加?

元素添加初始参数以上图中的动画为例,添加俩个左右容器,将内容放置在容器内部。添加初始,默认透明度0、左右分别移动100px。

//左侧容器 .item-leftContainer { opacity: 0; transform: translateX(-100px); } //右侧容器 .item-rightContainer { opacity: 0; transform: translateX(100px); }

添加动画在less中添加动画。这⾥只设置了to,也可以省略第1步中的初始参数设置⽽在动画⾥设置from。执⾏后,透明度由0到1,俩个容器向中间移动100px回到原处。//动画 @keyframes showLeft { to { opacity: 1; transform: translateX(0px); } } @keyframes showRight { to { opacity: 1; transform: translateX(0px); } } @keyframes hideLeft { to { opacity: 0; transform: translateX(-100px); } } @keyframes hideRight { to { opacity: 0; transform: translateX(100px); } }

触发动画页⾯加载/刷新触发 - 在componentDidMount中执⾏页⾯滚动时触发 - 在componentDidMount、componentWillUnmount添加监听/注销页⾯滚动的事件校验当前滚动⾼度与元素的位置差异:ffset(滚动距离) + windowHeight(窗⼝⾼度) > Top (元素的相对位置)+parentOffsetTop(⽗元素的相对位置) + 2001. 真正的滚动视觉位置 - ffset(滚动距离) + windowHeight(窗⼝⾼度)2. 元素距离顶部的⾼度 - 这⾥使⽤了Top + parentOffsetTop,原因是⽗容器使⽤了absolute绝对定位。如果是正常布局的话,使⽤元素当前的位置Top即可3. 额外添加200⾼度,是为了优化视觉体验。当超出200⾼度时才触发动画当页⾯滚动到下⽅,触发显⽰动画;当页⾯重新滚动到上⽅,触发隐藏动画。componentDidMount() { crollHeightAndLoadAnimation(); ntListener('scroll', ndleScroll); } componentWillUnmount() { EventListener('scroll', ndleScroll); } bindHandleScroll = (event) => { crollHeightAndLoadAnimation(); } checkScrollHeightAndLoadAnimation() { windowHeight = eight; let parentEelement = mentById("softwareUsingWays-container") as Element; parentOffsetTop = Top; let leftElement = (mentsByClassName("item-leftContainer") as CollectionOf)[0]; if (ffset + windowHeight > Top + parentOffsetTop + 200) { ion = "showLeft .6s forwards" //添加动画 } else { ion = "hideLeft 0s forwards" //隐藏动画 } let rightElement = (mentsByClassName(".item-rightContainer") as CollectionOf)[0]; if (ffset + windowHeight > Top + parentOffsetTop + 200) { ion = "showRight .6s forwards" //添加动画 } else { ion = "hideRight 0s forwards" //隐藏动画 } }

2023年6月21日发(作者:)

htmlcss滚动到元素位置,显⽰加载动画每次滚动到元素时,都显⽰加载动画,如何添加?

元素添加初始参数以上图中的动画为例,添加俩个左右容器,将内容放置在容器内部。添加初始,默认透明度0、左右分别移动100px。

//左侧容器 .item-leftContainer { opacity: 0; transform: translateX(-100px); } //右侧容器 .item-rightContainer { opacity: 0; transform: translateX(100px); }

添加动画在less中添加动画。这⾥只设置了to,也可以省略第1步中的初始参数设置⽽在动画⾥设置from。执⾏后,透明度由0到1,俩个容器向中间移动100px回到原处。//动画 @keyframes showLeft { to { opacity: 1; transform: translateX(0px); } } @keyframes showRight { to { opacity: 1; transform: translateX(0px); } } @keyframes hideLeft { to { opacity: 0; transform: translateX(-100px); } } @keyframes hideRight { to { opacity: 0; transform: translateX(100px); } }

触发动画页⾯加载/刷新触发 - 在componentDidMount中执⾏页⾯滚动时触发 - 在componentDidMount、componentWillUnmount添加监听/注销页⾯滚动的事件校验当前滚动⾼度与元素的位置差异:ffset(滚动距离) + windowHeight(窗⼝⾼度) > Top (元素的相对位置)+parentOffsetTop(⽗元素的相对位置) + 2001. 真正的滚动视觉位置 - ffset(滚动距离) + windowHeight(窗⼝⾼度)2. 元素距离顶部的⾼度 - 这⾥使⽤了Top + parentOffsetTop,原因是⽗容器使⽤了absolute绝对定位。如果是正常布局的话,使⽤元素当前的位置Top即可3. 额外添加200⾼度,是为了优化视觉体验。当超出200⾼度时才触发动画当页⾯滚动到下⽅,触发显⽰动画;当页⾯重新滚动到上⽅,触发隐藏动画。componentDidMount() { crollHeightAndLoadAnimation(); ntListener('scroll', ndleScroll); } componentWillUnmount() { EventListener('scroll', ndleScroll); } bindHandleScroll = (event) => { crollHeightAndLoadAnimation(); } checkScrollHeightAndLoadAnimation() { windowHeight = eight; let parentEelement = mentById("softwareUsingWays-container") as Element; parentOffsetTop = Top; let leftElement = (mentsByClassName("item-leftContainer") as CollectionOf)[0]; if (ffset + windowHeight > Top + parentOffsetTop + 200) { ion = "showLeft .6s forwards" //添加动画 } else { ion = "hideLeft 0s forwards" //隐藏动画 } let rightElement = (mentsByClassName(".item-rightContainer") as CollectionOf)[0]; if (ffset + windowHeight > Top + parentOffsetTop + 200) { ion = "showRight .6s forwards" //添加动画 } else { ion = "hideRight 0s forwards" //隐藏动画 } }