【发布时间】:2019-12-28 03:14:26
【问题描述】:
如何为通过画布绘制的星星的不透明度设置动画?我试图在一座山后面画出多颗星星。到目前为止,我能想到 2 个选项。
我可以使用2层图像,将星星隐藏在山脉后面,并在星星的不透明度上使用css3关键帧动画。
通过画布绘制前景(山脉)和背景(星星)。这是我现在正在采取的方法。
我有 2 个问题。
星星的不透明度翻转/闪烁非常快,我可以在动画之间添加延迟吗?目前,我正在调用无限循环
window.requestAnimationFrame(this.animate);我尝试使用setInterval但动画不如requestAnimationFrame流畅我最终可以停止这种闪烁效果吗?
这是写在 react 组件里面的
// Animation Loop
animate = () => {
window.requestAnimationFrame(this.animate);
this.c.clearRect(0, 0, this.canvas.width, this.canvas.height);
// fill background
this.c.fillStyle = this.backgroundGradient;
this.c.fillRect(0, 0, this.canvas.width, this.canvas.height);
// createmountainRange
this.createMountainRange(1, this.canvas.height - 50, "#384551");
this.createMountainRange(2, this.canvas.height - 150, "#2B3843");
this.createMountainRange(3, this.canvas.height - 250, "#26333E");
this.backgroundStars.forEach(backgroundStar => {
this.draw(backgroundStar);
});
};
//draw function
draw = star => {
const opacity = 1 / utils.randomIntFromRange(1, 10);
this.c.save() // only affects code in between
this.c.beginPath();
this.c.arc(star.x, star.y, star.radius, 0, Math.PI * 2, false);
this.c.fillStyle = `rgba(227, 234, 239, ${opacity})`
this.c.shadowColor = '#e3eaef'
this.c.shadowBlur = 20
this.c.fill();
this.c.closePath();
this.c.restore()
console.log('opacity', opacity)
};
【问题讨论】:
标签: css reactjs animation canvas