|
相抵路径CSS动画可以实现元素在任意指定路径上定位或移动,用到两个业已成熟、被现代浏览器广泛支持的CSS属性: offset-path CSS 属性指定一个供元素跟随的路径,并决定该元素在其父容器或 SVG 坐标系中的位置。这个路径可以是直线、曲线或几何图形,元素将沿着它定位或移动。在 offset-path 上定位或移动元素,通过 offset-distance CSS 属性实现。 给元素设置 offset-path,使用 path 函数,函数内的字符串用以描述路径细节,形式与含义等同于SVG <path> 元素的 d 属性值: offset-path: path('M 20 100 L200 160 L380 20');描述元素在 path 路径上的定位或移动位置,使用 offset-distance 属性,值通常用百分比表示: offset-distance: 30%;——这就是所谓的相抵路径动画的核心:约束元素的路径(offset-path)+ 元素在路径上的偏移距离(offset-distance)。 而 offset-path 路径来源于 SVG path 元素的 d 属性,路径描述的数据使用绝对单位(默认px),这样,当元素所在的父元素尺寸可以变大变小,CSS 初始设计的路径就不适用,需要动态改变,这得祭出JS,具体思路是: - 使用 ResizeObserver API 监听父元素尺寸变化
- 父元素尺寸发生变化时给子元素动态创建 offset-path 路径
ResizeObserver 接口允许监视 Element 的内容盒、边框盒或 SVGElement 的边界框尺寸的变化。这个接口提供了一种避免无限回调循环和循环依赖的方法,它通过在后续帧中处理更深层次的 DOM 元素来实现这一点。根据规范,resize 事件应该在绘制前和布局后调用。 以下实例通过 ResizeObserver 实现对 textarea 元素的尺寸变化实施实时观察,且任何时候任何变化都同步将尺寸展示在 textarea 内。可以尝试拖曳 textarea 右下角改变其尺寸:
|