`
128kj
  • 浏览: 600125 次
  • 来自: ...
社区版块
存档分类
最新评论

HTML5 Canvas贝塞尔曲线动画

阅读更多
点击这里可以查看动画效果:
http://www.108js.com/article/article3/zip1/BezierAnim.html
欢迎访问博主的网站:http://www.108js.com

效果图:

代码:
<html>
  <head>
   <meta charset="gbk">
   <title>贝塞尔曲线动画</title>
  </head>
<body>
   <canvas id = "myCanvas" width="300" height="200">你的浏览器不支持canvas</canvas>
   <script>

    window.requestAnimFrame = (function(callback) { 
    return window.requestAnimationFrame ||  
     window.webkitRequestAnimationFrame ||  
        window.mozRequestAnimationFrame ||  
          window.oRequestAnimationFrame ||  
         window.msRequestAnimationFrame || 
           function(callback) { 
             window.setTimeout(callback, 1000 / 60); 
           }; 
      })(); 

    var canvas = document.getElementById("myCanvas");
    var context = myCanvas.getContext("2d");
             
    var  animpts=[];
    var  deltas=[];
    var  gradient;//线性渐变
    var w=canvas.width;
    var h=canvas.height;
  
    function main() { 
      context.clearRect(0, 0, w,h); 
      step(w,h);
      render(w, h, context);
      requestAnimFrame(function() { 
        main(); 
     }); 
   } 

     function init() {
         gradient = context.createLinearGradient(0,0,200,200);
         gradient.addColorStop(0,'red');
         gradient.addColorStop(1,'yellow');
     
        context.fillStyle = gradient;
        context.strokeStyle="blue";
        context.lineWidth=10;
        reset(w,h);
        render(w, h, context)
        main();
    }

function  animate(pts, deltas, index, limit) {
        var  newpt = pts[index] + deltas[index];
        if (newpt <= 0) {
            newpt = -newpt;
            deltas[index] =   (Math.random() * 4 + 2);
        } else if (newpt >=  limit) {
            newpt = 2 * limit - newpt;
            deltas[index] = - (Math.random() * 4 + 2);
        }
        pts[index] = newpt;
    }
  
    function reset(w,h) {
        for (var i = 0; i < 12; i += 2) {
            animpts[i + 0] =  (Math.random() * w);
            animpts[i + 1] =  (Math.random() * h);
             deltas[i + 0] =  (Math.random() * 6.0 + 4.0);
             deltas[i + 1] =  (Math.random() * 6.0 + 4.0);
            if (animpts[i + 0] > w / 2) {
                deltas[i + 0] = -deltas[i + 0];
            }
            if (animpts[i + 1] > h / 2) {
                deltas[i + 1] = -deltas[i + 1];
            }
        }
        gradient = context.createLinearGradient(0,0,w*0.7,h*0.7);
         gradient.addColorStop(0,'red');
         gradient.addColorStop(1,'yellow');
    }

    function step(w, h) {
        for (var i = 0; i < 12; i += 2) {
            animate(animpts, deltas, i + 0, w);
            animate(animpts, deltas, i + 1, h);
        }
    }


    function render(w, h, context) {
        var ctrlpts = animpts;
        var len = ctrlpts.length;
        var prevx = ctrlpts[len - 2];
        var prevy = ctrlpts[len - 1];
        var   curx = ctrlpts[0];
        var   cury = ctrlpts[1];
        var  midx = (curx + prevx) / 2;
        var   midy = (cury + prevy) / 2;
        context.beginPath();
        context.moveTo(midx, midy);
        for (var i = 2; i <= ctrlpts.length; i += 2) {
            var x1 = (midx + curx) / 2;
            var y1 = (midy + cury) / 2;
            prevx = curx;
            prevy = cury;
            if (i < ctrlpts.length) {
                curx = ctrlpts[i + 0];
                cury = ctrlpts[i + 1];
            } else {
                curx = ctrlpts[0];
                cury = ctrlpts[1];
            }
            midx = (curx + prevx) / 2;
            midy = (cury + prevy) / 2;
            var  x2 = (prevx + midx) / 2;
            var  y2 = (prevy + midy) / 2;
            context.bezierCurveTo(x1, y1, x2, y2, midx, midy);
        }
        context.closePath();
        context.stroke();
        context.fill();
    }

  window.onload=init;
   
  </script></boey></html>
   热情奉献:HTML5 Canvas绘图与动画学习59例源码:
http://www.108js.com/example.html
  • 大小: 5.6 KB
0
0
分享到:
评论

相关推荐

    贝塞尔曲线在Canvas中的实现

    在HTML5的Canvas API中,贝塞尔曲线被广泛用于创建动态、流畅的图形和动画效果。Canvas是一个二维绘图上下文,允许开发者通过JavaScript直接在网页上绘制图像。 首先,我们需要理解贝塞尔曲线的基本概念。一条...

    贝塞尔曲线实现直播点赞效果

    贝塞尔曲线在IT行业中,特别是在图形学和动画设计领域,是一种非常重要的数学工具。它能够帮助开发者创造出平滑、连续的曲线,广泛应用于UI设计、游戏开发、3D建模等多个场景。在直播点赞效果中,贝塞尔曲线的运用...

    2.23 quadraticCurveTo,二次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.23_quadraticCurveTo,二次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、

    html5 canvas绘制曲线动画特效.zip

    在这个“html5 canvas绘制曲线动画特效.zip”压缩包中,包含了一个名为“demo.html”的文件,我们可以推测这是一个展示如何使用Canvas API创建曲线动画特效的示例。 Canvas API是一个基于矢量图形的JavaScript接口...

    html5 canvas 贝赛尔曲线

    在HTML5 Canvas中,我们通常使用的是二次和三次贝塞尔曲线,它们分别通过`moveTo()`、`lineTo()`、`quadraticCurveTo()`和`bezierCurveTo()`方法来绘制。 1. **二次贝塞尔曲线(quadratic Bézier curve)**: - `...

    2.22 用canvas绘制一角弯月|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.22_用canvas绘制一角弯月|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全

    贝塞尔曲线高阶匀速运动算法 HTML5/JS 实现

    1. **canvas API**:HTML5中的&lt;canvas&gt;元素提供了绘图功能,我们可以通过JavaScript来操作canvas的绘图上下文(`CanvasRenderingContext2D`)绘制贝塞尔曲线。 2. **路径方法**:使用`beginPath()`开始新的路径,`...

    贝塞尔曲线做一个曲线动画框架

    ### 贝塞尔曲线在Android中的应用:构建曲线动画框架 #### 一、引言 在Android开发过程中,实现复杂的动画效果是提升用户体验的关键之一。本文将深入探讨如何利用贝塞尔曲线来创建一个灵活且强大的曲线动画框架。...

    html5 canvas绘制曲线动画特效源码.zip

    这个"html5 canvas绘制曲线动画特效源码.zip"文件显然包含了一个使用Canvas API实现的曲线动画示例。现在,我们将深入探讨HTML5 Canvas以及如何利用它来创建曲线动画。 首先,Canvas是一个基于矢量图形的元素,它...

    canvas基础贝塞尔曲线粒子背景效果

    在本文中,我们将深入探讨如何使用HTML5的`canvas`元素来创建一个基础的贝塞尔曲线粒子背景效果,这是在JavaScript开发中进行图片展示处理的一种常见技术。`canvas`是HTML5提供的一种强大的图形绘制工具,它允许我们...

    2.24 bezierCurveTo,三次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.24_bezierCurveTo,三次贝塞尔曲线|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开

    购物车动画-贝塞尔曲线

    实现购物车动画时,通常会使用编程语言如JavaScript、Swift或Unity等,结合相应的图形库(如HTML5的Canvas API、Unity的C#脚本或者Android的Canvas)来绘制和控制贝塞尔曲线。开发者可以设置时间参数(t),随着时间...

    java android 贝塞尔曲线计算

    贝塞尔曲线在计算机图形学中是一种非常重要的曲线表示方法,特别是在Android应用开发中,它广泛用于动画、游戏、用户界面设计等领域。Java Android贝塞尔曲线计算涉及到数学、图形学以及多线程编程等多个知识点。 ...

    canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)

    原生HTML5 Canvas API提供了对一阶、二阶和三阶贝塞尔曲线的支持,但不直接支持更高阶的贝塞尔曲线。三阶贝塞尔曲线已经可以绘制出相当复杂的形状,但对于某些需要更多控制点的高级应用,这样的限制可能会成为问题。...

    贝塞尔曲线动画

    贝塞尔曲线动画是一种在计算机图形学中广泛应用的技术,它能够创建出平滑、连续的曲线路径,被广泛用于UI设计、游戏开发、动画制作等领域。这种曲线因其视觉上的优雅和流畅性而备受青睐,尤其在移动应用中的过渡效果...

    Android实现贝塞尔曲线

    通过分析项目的代码,我们可以学习如何将上述概念应用于实际开发中,例如结合动画框架,实现平滑移动的贝塞尔曲线动画。 总之,掌握贝塞尔曲线的绘制是提升Android应用视觉效果的重要技能。无论是简单的UI过渡还是...

    贝塞尔曲线水波纹

    2. **绘制方法**:如`onDraw()`或`draw()`,在这个方法里,利用`Canvas`对象绘制贝塞尔曲线。 3. **定时器或动画框架**:可能使用了`Handler`、`Runnable`或Android的`Animator`类来定期更新和重绘波纹。 4. **数据...

    超炫酷HTML5 Canvas蝴蝶飞舞动画

    // 使用二次贝塞尔曲线模拟曲线 // 添加更多线段... ctx.closePath(); // 闭合路径 ctx.fillStyle = 'color'; // 设置填充颜色 ctx.fill(); // 填充路径 ``` 为了让蝴蝶飞舞起来,我们需要编写动画循环,通常使用`...

    android自定义控件贝塞尔曲线

    5. 如果需要动画效果,可以使用Handler或者ValueAnimator来更新控制点,让贝塞尔曲线动态变化。 6. 最后,别忘了在布局文件中添加自定义控件,并在Activity中找到并设置它。 这个过程只是一个基本示例,实际应用中...

Global site tag (gtag.js) - Google Analytics