CSS 滚动驱动动画 scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis )

scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis )

scroll() 的最后我们遇到了因为定位问题导致滚动效果失效的情况, 当然 CSS 允许我们手动指定滚动容器, 也就是哪个容器来提供 scroll progress timeline. 我们需要在提供时间线的滚动容器上声明 scroll-timeline 属性.

再次重温 scroll progress timeline, 这个时间线(timeline)是通过滚动容器(scroller)上下或左右方向的滚动推进的. 开始滚动的位置表示时间线处在 0%, 滚动结束的位置表示时间线 100%. 如果 0%100% 的位置相同, 比如容器根本不滚动, 那么时间线不会推动.

解决问题

下面的代码是不生效, 原因很简单, 当 scroll() 采用默认值时, 其第一个默认参数是 nearest, 这时就会寻找离当前元素最近的父级滚动元素. 你可能以为是 .scroll, 但实际上不是.

因为在寻找滚动元素的时候需要这个滚动元素能够影响当前元素的位置和大小, 又因为当前元素的 positionabsolute, 所以可以影响其位置和大小的元素要么是 body, 要么是 positionstatic 的元素. 换言之, 最终找到的就是 .relative, 而 .relative 根本不会滚动, 所以我们不论怎么滑动 .scroll 都不会看到任何变化.

<div class="relative">
  <div class="scroll">
    <div class="absolute"></div>
  </div>
</div>
.relative {
  position: relative;
}
.absolute {
  position: absolute;
  animation: bg-color linear;
  animation-timeline: scroll();
}

修改之后

.scroll {
  scroll-timeline: --youHaveToBeThis;
}
.absolute {
  /* animation-timeline: scroll(); */
  animation-timeline: --youHaveToBeThis;
}

在这里插入图片描述

语法

animation-timeline 实际上包括 animation-timeline-nameanimation-timeline-axis 的简写属性, 后者是可选的.

如果同时制定两个值, 那么顺序一定是先 animation-timeline-nameanimation-timeline-axis

animation-timeline-name

  • none: 没有名字
  • 自定义名称: 其定义名称必须以 -- 开头. 这样可以避免与 CSS 关键字冲突.

animation-timeline-axis

可选的值是 block(默认值), inline, y, x, 具体的意思可以参考 scroll().

如果滚动容器在 animation-timeline-axis 方向上没有内容溢出, 或者溢出被隐藏, 那么将不会创建对应的时间线

谢谢你看到这里😊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于el-timeline组件的v-infinite-scroll使用,你可以通过以下步骤来实现: 1. 在el-timeline上添加v-infinite-scroll指令,并指定一个方法名,例如:`v-infinite-scroll="loadMoreData"`。 2. 在你的数据中添加一个变量来追踪是否还有更多数据可加载,例如:`hasMoreData: true`。 3. 在loadMoreData方法中,检查是否还有更多数据需要加载。如果有,你可以发送一个异步请求来获取更多数据。 4. 在请求成功后,将新获取的数据追加到现有数据中,并更新hasMoreData变量的值,告诉组件是否还有更多数据可加载。 5. 如果没有更多数据可加载,你可以调用v-infinite-scroll指令的`disable`方法来禁用滚动加载功能,例如:`v-infinite-scroll.disable()`。 下面是一个简单的示例代码: ```html <el-timeline v-infinite-scroll="loadMoreData"> <!-- timeline items --> </el-timeline> ``` ```javascript data() { return { timelineData: [], // 已有的数据 hasMoreData: true // 是否还有更多数据可加载 } }, methods: { loadMoreData() { if (this.hasMoreData) { // 发送异步请求来获取更多数据 // 在请求成功后追加到timelineData中 // 更新hasMoreData的值,判断是否还有更多数据可加载 // 如果没有更多数据可加载,禁用滚动加载功能:this.$refs.timeline.disableInfiniteScroll() } } } ``` 请根据你的实际需求进行适当的修改和调整。这只是一个简单的示例,具体的实现可能因你的项目结构和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值