0
私はファンのようなキャンバスにアニメーションを実装しようとしています。パスをクリックすると、画面のほぼ70%、2番目と3番目のパスが幅の15%になるはずです。キャンバス上のスムーズなクリックイベントアニメーション
はここに私のコードです:
var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');
var el1 = {
lineWidth: 1,
fill: "blue",
points: []
};
var el2 = {
lineWidth:1,
fill: 'red',
points: []
}
var el3 = {
lineWidth:1,
fill:'green',
points:[]
}
var paths = [];
paths.push(el1);
paths.push(el2);
paths.push(el3);
newPoint(50, 50, el1);
newPoint(100, 20, el1);
newPoint(100,180,el1);
newPoint(50,50,el2);
newPoint(90, 155,el2);
newPoint(0, 165, el2);
newPoint(50,50,el3);
newPoint(0, 165, el3);
newPoint(0,20, el3);
draw();
function newPoint(x, y, path) {
path.points.push({
x: x,
y: y
});
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (p = 0; p < paths.length; p++) {
var path = paths[p];
ctx.beginPath();
ctx.moveTo(path.points[0].x, path.points[0].y);
for (pt = 1; pt < path.points.length; pt++) {
var point = path.points[pt];
ctx.lineTo(point.x, point.y);
}
//
ctx.fillStyle = path.fill;
ctx.lineWidth = path.lineWidth;
ctx.fill();
}
}
$('#redraw').click(function(){
paths[0].points[2].y = 300;
paths[1].points[1].y = 300;
draw();
});
https://jsfiddle.net/kaggqf94/4/
私はこれが(代わりに、それらの三角形のテキストや画像といくつかの要素になります)、このアニメーションを実装するための最良の方法であるかどうかわからないです、どのようにしてアニメーションをより遅くする必要があるのか分かりません。私はこのためにすべてのコードを変更する必要があります。
アドバイスありがとうございます。
おかげで、私は15の評判を持っていないので、私はあなたの答えを受け入れることはできません。 :(クリックイベントはキャンバスの幅と要素の幅を計算し、右の要素をアニメートすることで達成する必要がありますか? – codetheweb
あなたのパスは実際にはウェッジです(パイの部分のように)。ここでは[Q&A] //stackoverflow.com/questions/29034251/how-do-i-bind-onclick-event-to-piechart-segment/29040839#29040839)ウェッジ内でマウスを追跡する方法を示しています。 (あなたがあなたのプロジェクトに幸運をもたらすまで上向きの三角形をクリックすることによって)評判が上がるまであなたはアップヴォートできません。 – markE