キャンバスを使用してパスの一部をアニメーション化しようとしています。基本的に私は3つのリンクを通る直線を持っています。リンクの上にマウスを置くと、リンクの後ろのパスのセクションが正弦波にアニメートされます。キャンバスを使用してパスの一部をアニメーション化する
私は、正弦波の形状にパス全体をアニメーション化問題はありませんが、それはパスのセクションをアニメーションに来るとき、私は途方に暮れてよ:(
私は参照画像を添付しました以下、それは私が達成しようとしているかのアイデアを得ることができる。以下
私は、現在のパスをアニメーション化するために使用しているコードのjsfiddleである。私はキャンバスのnoobだので、私を許してそれがひどい場合...
https://jsfiddle.net/9mu8xo0L/
、ここのコードです:
class App {
constructor() {
this.drawLine();
}
drawLine() {
this.canvas = document.getElementById('sine-wave');
this.canvas.width = 1000;
this.ctx = this.canvas.getContext("2d");
this.cpY = 0;
this.movement = 1;
this.fps = 60;
this.ctx.moveTo(0, 180);
this.ctx.lineTo(1000, 180);
this.ctx.stroke();
this.canvas.addEventListener('mouseover', this.draw.bind(this));
}
draw() {
setTimeout(() => {
if (this.cpY >= 6) return;
requestAnimationFrame(this.draw.bind(this));
// animate the control point
this.cpY += this.movement;
const increase = (90/180) * (Math.PI/2);
let counter = 0;
let x = 0;
let y = 180;
this.ctx.beginPath();
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
for(let i = 0; i <= this.canvas.width; i += 6) {
this.ctx.moveTo(x,y);
x = i;
y = 180 - Math.sin(counter) * this.cpY;
counter += increase;
this.ctx.lineTo(x, y);
this.ctx.stroke();
}
}, 1000/this.fps);
}
}
感謝を。これは私が探していたものですが、唯一の問題はセクションがシームレスではないということです。この更新されたフィドルを見て、私の言いたいことを見てください。これは私が実際には分かっていなかった... https://jsfiddle.net/9mu8xo0L/3/ – Ashmore11
@ Ashmore11あなたは2/3に線を伸ばしてyを強制し、同じyで最後の線分を描くことができました。フィドルを更新しました:https://jsfiddle.net/epistemex/9mu8xo0L/4/ – K3N