J'ai trouvé les codes sur codepen et modifié comme suit:couleur de commutation (context.fillStyle) lors de l'élaboration des cercles avec <canvas>
<canvas id="heatmap" width=300 height=150></canvas>
var canvas;
var context;
var screenH;
var screenW;
var circles = [];
var numcircles = 30;
$('document').ready(function() {
canvas = $('#heatmap');
screenH = canvas.height();
screenW = canvas.width();
canvas.attr('height', screenH);
canvas.attr('width', screenW);
context = canvas[0].getContext('2d');
for(var i = 0; i < numcircles; i++) {
var x = Math.round(Math.random() * screenW);
var y = Math.round(Math.random() * screenH);
var opacity = Math.random();
var circle = new Circle(x, y, opacity);
circles.push(circle);
}
drawCircles();
});
function drawCircles() {
var i = 0, me = this;
if (!circles.length) return;
(function loop() {
var circle = circles[i++];
circle.draw(context);
if (i < circles.length)
setTimeout(loop, 16);
})();
}
function Circle(x, y, opacity) {
this.x = parseInt(x);
this.y = parseInt(y);
this.opacity = opacity;
}
Circle.prototype.draw = function(){
context.save();
context.translate(this.x, this.y);
context.beginPath()
context.arc(0,0,Math.floor(Math.random() * (40 - 10)/10) * 10 + 10,0,2*Math.PI);
context.closePath();
context.fillStyle = "rgba(25, 35, 50, " + this.opacity + ")";
context.shadowBlur = 5;
context.shadowColor = '#ffffff';
context.fill();
context.restore();
}
J'ai 30 maintenant cirlces. Je voudrais avoir 5 derniers cercles de couleur rouge (25 en bleu, rouge 5)
context.fillStyle = "rgba (190, 60, 80," + this.opacity + ").";
Quelle est la meilleure pratique pour atteindre cet objectif?
Quelques notes sans rapport: éviter '' save' et restore' autant que vous le pouvez, il vous fera économiser ** toutes ** propriétés de contexte. Ici vous pouvez le remplacer par l'absolu 'ctx.setTransform (1,0,0,1, this.x, this.y)' au lieu du relatif 'ctx.translate()'. 'closePath()' est juste un 'lineTo (lastPointofCurrentPath)' il est complètement inutile après un 'arc (x, y, r, 0, Math.PI * 2)' cercle aka. N'utilisez pas une boucle setTimeout pour faire des animations, vous allez manquer ou dessiner des cadres inutiles, utilisez plutôt la méthode 'requestAnimationFrame'. – Kaiido