canvas中的三角运动(4) —— 脉冲运动
forever
8年前
<h2>需求:</h2> <p>模拟球形的脉冲运动。</p> <p>小球的构造函数如下:</p> <pre> <code class="language-java">// 圆球的构造函数 function Ball(radius, color) { if(radius === undefined) { radius = 40; } if(color === undefined) { color = "#ff0000"; } this.x = 0; this.y = 0; this.radius = radius; this.rotation = 0; this.scaleX = 1; this.scaleY = 1; this.color = color; this.lineWidth = 1; } Ball.prototype.draw = function(context) { context.save(); context.translate(this.x, this.y); context.rotate(this.rotation); context.scale(this.scaleX, this.scaleY); context.lineWidth = this.lineWidth; context.fillStyle = this.color; context.beginPath(); context.arc(0, 0, this.radius, 0, Math.PI * 2, true); context.closePath(); context.fill(); if(this.lineWidth > 0) { context.stroke(); } context.restore(); }</code></pre> <h2>二. 思路分析:</h2> <p>使用正弦值改变球形的比例,即可制造出脉冲效果。</p> <p>如下:</p> <pre> <code class="language-java"><canvas id="canvas" width="200" height="200" style="background: #ccc;"></canvas> var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), ball = new Ball(), angle = 5, centerScale = 1, range = 0.5, speed = 0.05; ball.x = canvas.height / 2; ball.y = canvas.height / 2; ball.lineWidth = 0; (function drawFrame() { window.requestAnimationFrame(drawFrame, canvas); context.clearRect(0, 0, canvas.width, canvas.height); ball.scaleX = ball.scaleY = centerScale + Math.sin(angle) * range; angle += speed; ball.draw(context); })();</code></pre> <p>演示如下: <a href="/misc/goto?guid=4959677072568858255" rel="nofollow,noindex">http://codepen.io/dengzhirong/pen/PzgygG</a></p> <p> </p> <p>来自:http://www.dengzhr.com/js/959</p> <p> </p>