0

包装信息

"@svgdotjs/svg.js": "^3.0.16",
"svg.easing.js": "svgdotjs/svg.easing.js"

问题

有人可以澄清如何使用 svg.js v3 库通过缓动函数正确地为旋转设置动画吗?

https://svgjs.dev/docs/3.0/animating/中的文档没有给出示例,我尝试了许多不同的方法来让它工作,但所有尝试都会导致默认行为,'>'(又名轻松-out 函数)。插件文档也不冗长(https://svgjs.dev/docs/3.0/plugins/),并且没有提供如何使用插件(例如 svg.easing.js 库)的指导。安装该软件包也不会改变结果。

我的尝试

const mySvg = SVG(<svg>...</svg>)
const rotatable = mySvg.find('#rotatable');

rotatable.animate(3000, '<>').rotate(360);
rotatable.animate(3000, 'easeInOut').rotate(360);
rotatable.animate({ duration: 3000, ease: '<>').rotate(360);
rotatable.animate({ duration: 3000, ease: 'easeInOut').rotate(360);

// Defining an actual easing function for easeInOut
rotatable.animate({ duration: 3000, ease: function(pos) { return (-Math.cos(pos * Math.PI) / 2) + 0.5; }}).rotate(360);

// Providing the function as a string, since that's what `animate` seems to expect
rotatable.animate({ duration: 3000, ease: 'function(pos) { return (-Math.cos(pos * Math.PI) / 2) + 0.5; }'}).rotate(360);

以上都没有按预期工作。我已经在 a <g>and<path>元素上使用了这些,并且两者都导致了相同的行为,只是缓出(而不是缓入和缓出 - 甚至只是缓入)。

任何帮助都非常感谢,因为这个库的使用肯定对所有其他方面都非常有帮助!

4

1 回答 1

1

即使文档滞后一个明确的例子(对不起),你可以找到这个:

动画的缓动可以通过运行器的 ease() 方法来改变。

所以你可以打电话el.animate(...).ease('<>'),这应该可以解决问题

于 2019-12-05T19:32:03.860 回答