跳过主要内容

InertiaPlugin.track

InertiaPlugin.track( target:元素 | 字符串 | 数组, props:字符串 ) : 数组

参数

  • 目标对象: 元素 | 字符串 | 数组

    需要跟踪的元素。可以是选择器文本、一个元素,或者元素的数组。

  • props:字符串

    要跟踪的属性名组成的逗号分隔列表,例如:"x"或者"x,y,rotation"

返回值 : 数组

VelocityTracker对象的数组(每个目标对象对应一个)。最有用的方法是它的get()方法,你传入属性名给它,例如:myTracker.get("y")来获取目标当前的y velocity。不过通常情况下,你完全不需要自己去跟踪这个VelocityTracker对象,因为内部已经完成了相关工作,并且InertiaPlugin知道如何找到它。

细节

可以跟踪特定对象的任意属性(或由逗号分隔的属性列表)的速度,这样你就可以执行以下任何操作:

  • 创建一个inertia补间动画,使用velocity: "auto",这会告诉InertiaPlugin自动查找相关的跟踪器并从中获取速度,而无需你自己提供具体数值/速度。
  • 如果你在任何时候都需要被跟踪属性的速度值用于其他用途,也很简单。InertiaPlugin.getVelocity(target, "property");

开始跟踪时,只需传入目标(可以是选择器文本或对象数组),以及你想跟踪的一组属性名称作为逗号分隔列表,如下所示:

InertiaPlugin.track(obj, "x,y");

// or selector text which could find multiple targets:
InertiaPlugin.track(".class", "x,y");

然后每次GSAP更新时,都会记录被跟踪的属性及其时间戳(最多保留两个这些值,并不断覆盖之前的值,因此不必担心内存累积问题)。即使是有getter和setter的函数式属性也一样有效!

接着,在至少经过100毫秒并且经历了两次“tick”(帧)之后(这样已经有了一些数据记录),你可以为这些属性创建inertia补间动画,并省略掉velocity值,它会在内部自动为你填充这些值。例如:

//first, start tracking "x" and "y":
InertiaPlugin.track(obj, "x,y");

//then, after at least 100ms, let's smoothly tween to EXACTLY x:200, y:300
gsap.to(obj, {
inertia: {
x: { end: 200 },
y: { end: 300 },
},
});

//and if you want things to use the defaults and have obj.x and obj.y glide to a stop based on the velocity rather than setting any destination values, just use "auto":
gsap.to(obj, {
inertia: {
x: "auto",
y: "auto",
},
});

以下是实际使用中进行跟踪的一个示例:

加载中...

因此"auto"是你正在跟踪的属性的一种有效选项。

可以跟踪哪些类型的属性?

几乎任何对象的数字类型属性都可以被跟踪,包括基于函数的属性。比如:obj.x或者obj.rotation或者甚至obj.customProp()。但是,像scrollTo, autoAlpha,或者physics2D这样的自定义插件相关值不能被跟踪,因为它们并不是对象的真实属性。你应该跟踪那些插件所影响的真实属性,比如:rotation, opacity, x,或者y.

重要

最好在完成对某些属性的跟踪后及时停止untrack()它们,以便最大化性能,并确保这些资源可以被释放以供垃圾回收机制处理。要取消跟踪,只需使用untrack()方法快速转换任何坐标。

无噪 Logo
无噪文档
中文文档 · 复刻官网
查看所有 ↗