为什么此代码添加虚拟 DOM 元素以沿路径为三个对象设置动画?
why does this code add dummy DOM element for animating an three object along a path?
我正在尝试沿着 three.js 中的路径移动对象。
我可以从 gsap 网站上找到一个例子,代码正在做一些我不明白的事情。
查看下面的代码。
var path = [{x: 0, y: 0, z: -100}, {x: 100, y: 200, z: -200}, {x: 200, y: 200, z: -50}, {x: 240, y: 100, z: -250}];
var proxy = document.createElement("p");
console.log(proxy)
gsap.to(proxy, {
duration: 10,
repeat: -1,
motionPath: {
path, // equivalent to path: path
autoRotate: true,
useRadians: true
},
onUpdate: updateMesh
});
它创建了一个虚拟的 DOM 元素(我猜,这里叫做 'proxy')。
并按照如下路径对三个网格对象进行动画处理。
var setX = gsap.quickSetter(cube.position, "x");
var setY = gsap.quickSetter(cube.position, "y");
var setZ = gsap.quickSetter(cube.position, "z");
var setRot = gsap.quickSetter(cube.rotation, "z");
function updateMesh() {
setX(gsap.getProperty(proxy, "x"));
setY(gsap.getProperty(proxy, "y"));
setZ(gsap.getProperty(proxy, "z"));
setRot(gsap.getProperty(proxy, "rotation"));
}
为什么这会创建一个虚拟 DOM 元素?这对我来说似乎很奇怪。
有没有更好的方法来实现这个?
原代码在下面link。
https://codepen.io/GreenSock/pen/ZEGxzvJ?editors=1111
作为那支笔的原创者和它的来源 post,我相信我使用了一个代理元素,因为 MotionPathPlugin 不适用于直接的 WebGL 对象(目前)。因此,为了利用插件的超级便捷功能,我创建了一个不呈现到页面的“代理”元素并将其应用于该页面。然后将值传输到 WebGL 对象。
我正在尝试沿着 three.js 中的路径移动对象。
我可以从 gsap 网站上找到一个例子,代码正在做一些我不明白的事情。
查看下面的代码。
var path = [{x: 0, y: 0, z: -100}, {x: 100, y: 200, z: -200}, {x: 200, y: 200, z: -50}, {x: 240, y: 100, z: -250}];
var proxy = document.createElement("p");
console.log(proxy)
gsap.to(proxy, {
duration: 10,
repeat: -1,
motionPath: {
path, // equivalent to path: path
autoRotate: true,
useRadians: true
},
onUpdate: updateMesh
});
它创建了一个虚拟的 DOM 元素(我猜,这里叫做 'proxy')。
并按照如下路径对三个网格对象进行动画处理。
var setX = gsap.quickSetter(cube.position, "x");
var setY = gsap.quickSetter(cube.position, "y");
var setZ = gsap.quickSetter(cube.position, "z");
var setRot = gsap.quickSetter(cube.rotation, "z");
function updateMesh() {
setX(gsap.getProperty(proxy, "x"));
setY(gsap.getProperty(proxy, "y"));
setZ(gsap.getProperty(proxy, "z"));
setRot(gsap.getProperty(proxy, "rotation"));
}
为什么这会创建一个虚拟 DOM 元素?这对我来说似乎很奇怪。 有没有更好的方法来实现这个?
原代码在下面link。 https://codepen.io/GreenSock/pen/ZEGxzvJ?editors=1111
作为那支笔的原创者和它的来源 post,我相信我使用了一个代理元素,因为 MotionPathPlugin 不适用于直接的 WebGL 对象(目前)。因此,为了利用插件的超级便捷功能,我创建了一个不呈现到页面的“代理”元素并将其应用于该页面。然后将值传输到 WebGL 对象。