- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Canvas (html5) 中绘制了一个点。然后我希望这个点在圆形路径中设置动画。
我看到了一个使用时间差来设置 x 和 y 变量的示例,与时间有关。使用的一些变量和公式非常模糊,我忘记了我的物理学,d*mn。但是我对圆周运动研究了很多,所以我能理解一些。这是我的 codepen关于它是如何完成的。
基本上这里是我到目前为止确定的部分:
this.orbit = 100; // this is the radius of the circular orbit
this.radius = 5; // orbiting object's radius
this.velocity = 50; // yeah velocity but without direction, should be speed (agree?)
var angle = 0; starting angle of the point in the orbit inside the canvas's quadrant,
设置相对于 Canvas 坐标的x
和y
坐标首先通过将宽度和高度除以 2 得到 Canvas 的中心然后加上轨道半径与 x
和 y
位置的乘积关于轨道中的初始位置( Angular ),并且由于数学三 Angular 函数函数使用弧度,我们应该将它乘以 PI
和 180
的商。
this.x = _width / 2 + this.orbit * Math.cos(angle * Math.PI / 180)
this.y = _height / 2 + this.orbit * Math.sin(angle * Math.PI / 180)
// by doing the above, we now get the initial position of x and y in the orbit.
对我来说非常微不足道的是下一个变量 _dx
和 _dy
以及 _magnitude
。
这是点动画的方式:
Point.prototype.update = function(dt) {
var dps = this.orbit * 2 * Math.PI / this.velocity;
var angle = (360 / dps) * dt / 1000 * -1;
this.vx = this.vx * Math.cos(angle * Math.PI / 180) - this.vy*Math.sin(angle * Math.PI / 180);
this.vy = this.vx * Math.sin(angle * Math.PI / 180) + this.vy*Math.cos(angle * Math.PI / 180);
var _magnitude = Math.sqrt( this.vx * this.vx + this.vy * this.vy);
this.vx = this.vx / _magnitude * this.velocity;
this.vy = this.vy / _magnitude * this.velocity;
this.x += this.vx * dt / 1000;
this.y += this.vy * dt / 1000;
}
下面是脚本的执行:
function animate () {
dt = new Date() - ldt;
if (dt < 500) {
// context.clearRect(0, 0, canvas.width, canvas.height);
point.update(dt);
point.draw(context);
};
ldt = new Date();
setTimeout(function() {
window.requestAnimationFrame(animate);
}, 1000 / 30)
}
ldt = new Date();
animate();
由于变量不明确,比如 _dx _dy _magnitude
我无法理解它是如何工作的以及变量的计算方式,vx vy
我假设速度相对于 x和 y。
我想为动画使用 greensock tweenlite,它是这样完成的:
Point.prototype.update = function(p){
var _to = {
x: , // change the value of x
y: , // change the value of y
ease: Cubic.easeInOut,
onComplete: function () { this.update(p) }
}
TweenLite.to(point, 2, _to)
}
如您所见,第一个参数是当前对象(点),然后第二个参数是时间,我假设这是速度,第三个参数是对象属性 x 和 y 的变化。
我制作了 codepen,现在如何使用 gsap tweenlite 像我所做的那样为圆圈制作动画,我想使用 tweenlite 会使它变得有点简单。
最佳答案
在您的情况下,您正尝试使用 TweenLite 在乌鸦飞翔时为点设置动画,并为点的每个新位置触发 TweenLite.to() 函数。这种使用 TweenLite.to() 函数的方法没有任何意义和性能,因为点的 2 个位置之间的距离太短了。因此,此方法只会减慢您的动画速度,因为您不只是在新位置绘制点,而是要为其设置动画。在这种情况下最好的解决方案是尝试使用 TweenLite 的方法来制作整个圆圈的动画。看看这篇文章:Tween around circle
尤其是这些例子:1) http://codepen.io/GreenSock/pen/jCdbq (不是 Canvas ,但它显示了主要思想)
TweenMax.to("#logo", 4, {rotation:360, transformOrigin:"40px -100px", repeat:10, ease:Linear.easeNone});
关于javascript - javascript中的圆形动画,greensock tweenlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501642/
我想知道如何在 GreenSock JavaScript 库中制作无限动画。我知道JavaScript当时只能进行1次操作,但我希望一些SVG图像能够不停地移动。对我来说,它看起来像无限循环,但我知道
我正在尝试对齐所有子补间的开始,希望它们立即开始,没有任何延迟,但似乎是按顺序完成的,一个 child 完成,然后第二个开始,第三个在第二个之后开始等等...不知道我在这里做错了什么? var tim
我正在尝试按以下顺序使用介绍文本和箭头制作介绍页面的动画: 背景图像来回移动两次。之后,箭头应从 1 缩放到 1.5,并再次重新缩放到原始大小 介绍文本也应缩放至 1.5 并重新缩放至其原始大小 由于
有一个 speed test在 greensock 网站上与其他动画库、JQuery 甚至 CSS Transitions 比较速度。它通过为数百/数千个分体设置动画来对 FPS 进行基准测试。 gr
我有以下代码: var mainTimeLine = new TimelineLite({paused:true}); var whiteGlow = "0px 0px 30px rgba(255,2
我想在 HTML 元素上一一添加类。 TweenMax.staggerTo(".some-class-name", 0.5, { className: "+=animation-class" }, 0
我以前从未使用过GreenSock。背景图像变化很好,它会切换和缩放,但是我面临的问题如下: Sprite 上显示的第一个背景图像不会缩放,但其他所有图像都会缩放,我该如何解决此问题? 它似乎会改变背
我正在尝试使用 Greensock 文本插件。我可以更改文本的颜色,但无法更改文本。我正在使用 jQuery 3.2.1 和 Greensock TweenMax 1.20.3 我的代码会将文本颜色更
我正在尝试使搜索栏具有动画效果。我能够在您单击时使其绘制,当您再次单击时它会返回到原始位置(使用 greensock - drawSVG)。 我希望能够在不刷新页面的情况下再次点击,并且一切正常。到目
我在鼠标事件上调用了两个函数: function menuBtnOver(e){ var b = e.data; b.setPosition(b.x, b.y+5); } functi
我正在尝试使用 JavaScript 和 Greensock 创建一个单击时滑入和滑出的导航栏。由于某种原因,当以不同尺寸单击时,单击操作随机不起作用,但有时它工作得很好。 我的代码如下,您可以在以下
我有一个正在使用 Greensock 的动画。当该动画完成并且用户单击按钮时,动画将反向播放。我遇到的问题是我希望动画反向播放的速度比最初播放时快 3 倍。我对如何做到这一点感到困惑。 我当前的代码工
我一直在使用javascript制作动画,但出现了我似乎无法解决的错误。 Link to Codepen Uncaught SyntaxError: Unexpected token '.' at
所以我正在尝试使用 Greensock 库为雪佛龙制作动画。我的目标是让 进入: 我在 Codepen https://www.codepen.io/Brushel/pen/boryZP 上有一个工作
我正在使用 GreenSock( https://greensock.com/get-started-js ) 进行动画。 问题是,当我向下滚动鼠标滚轮时,动画将从右向左工作。这不是一种权利。我需要当
我想将先前定义的 x/y 坐标数组传递给 greensock 贝塞尔曲线插件,如下所示: var ball = document.querySelector('#ball') var startCir
我正在尝试按照scrollmagic示例实现视差滚动。 greensock 文档说,像 TimelineMax.to 这样的东西定义了该场景中元素的最终位置(而不是定义初始位置的 .from)。 但是
我一直在尝试让动画在点击时触发,我已经通过 TimelineMax 创建了动画。我不明白为什么,但它一直触发这个动画的第一个实例,有 5 个 .blackout-panel 并且它为第一个 .blac
我正在尝试找到一种方法,将任意数量的元素添加到时间轴,然后在添加它们之后,同时开始运行它们。我尝试在添加到时间线之前调用 .pause() 并在之后播放,但它总是在我调用播放之前开始。 我目前正在运行
我正在嵌套时间线。 代码如下: timeLine.to(obj1,1.2,{css:{display:"block"}}) nestedTimeline1 = new TimelineMax({re
我是一名优秀的程序员,十分优秀!