站长资讯网
最全最丰富的资讯网站

canvas波浪效果的实现代码

本篇文章给大家带来的内容是关于canvas波浪效果的实现代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

基于canvas的三次贝塞尔曲线(bezierCurveTo)

<canvas id="myCanvas"></canvas>  <script>     var WAVE_HEIGHT = 200 //波浪变化高度     var SCALE = 0.5 // 绘制速率     var CYCLE = 360 / SCALE     var TIME = 0      function initCanvas() {         var c = document.getElementById("myCanvas")         var width = window.screen.width         var height = window.screen.height          var ctx = c.getContext("2d")         c.width = width         c.height = height          // start         window.requestAnimationFrame(function() {             draw(ctx, width, height)         })     }      function draw(ctx, width, height) {         ctx.clearRect(0, 0, width, height)          TIME = (TIME + 1) % CYCLE         var angle = SCALE * TIME // 当前正弦角度         var dAngle = 60 // 两个波峰相差的角度          ctx.beginPath()         ctx.moveTo(0, height * 0.5 + distance(WAVE_HEIGHT, angle, 0))         ctx.bezierCurveTo(             width * 0.4,             height * 0.5 + distance(WAVE_HEIGHT, angle, dAngle),             width * 0.6,             height * 0.5 + distance(WAVE_HEIGHT, angle, 2 * dAngle),             width,             height * 0.5 + distance(WAVE_HEIGHT, angle, 3 * dAngle)         )         ctx.strokeStyle = "#ff0000"         ctx.stroke()          ctx.beginPath()         ctx.moveTo(0, height * 0.5 + distance(WAVE_HEIGHT, angle, -30))         ctx.bezierCurveTo(             width * 0.3,             height * 0.5 + distance(WAVE_HEIGHT, angle, dAngle - 30),             width * 0.7,             height * 0.5 + distance(WAVE_HEIGHT, angle, 2 * dAngle - 30),             width,             height * 0.5 + distance(WAVE_HEIGHT, angle, 3 * dAngle - 30)         )         ctx.strokeStyle = "#0000ff"         ctx.stroke()          function distance(height, currAngle, diffAngle) {             return height * Math.cos((((currAngle - diffAngle) % 360) * Math.PI) / 180)         }          // animate         window.requestAnimationFrame(function() {             draw(ctx, width, height)         })     }      initCanvas() </script>

赞(0)
分享到: 更多 (0)

网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号