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()
方法快速转换任何坐标。