浏览器家园

TAG标签|网站导航| 手机访问:m.liulanqi.com

当前位置:首页开发学院JavaScript → 【动画】简易制作贝塞尔曲线动画(JS+CSS3+canvas)

【动画】简易制作贝塞尔曲线动画(JS+CSS3+canvas)

时间:2023-06-27 12:47:34来源:整理作者:浏览器知识手机版

一些废话(直接看代码的可跳过)

贝塞尔曲线:什么是贝塞尔曲线?用过PS的就知道,那破钢笔工具就是,什么,没用过?自行百度用法。

贝塞尔曲线

需要的工具

  • ctrl+c、ctrl+v

直接上代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style>
      body {
        position: fixed;
        background: black;
      }
      #flower {
        border: 1px solid red;
        width: 500px;
        height: 500px;
        position: relative;
      }
    </style>
  </head>
  <body>
    <div id="flower"></div>
  </body>
  <script>
    (function (data) {
      var _methods = {
        // 初始化
        init: function () {
          this.data = data.data
          this.e = data.e
          this.count = data.number
          this.color = data.color
          // number = 度数° --- this.count = 循环次数
          this.number = 360 / this.count
          for (var i = 0, j = .1; i < this.count; i++, j += .1) {
            var canvas = document.createElement('canvas')
            canvas.id = 'flower' + i
            canvas.height = data.height
            canvas.width = data.width
            canvas.style.position = 'absolute'
            canvas.style.transition = j + 's ease'
            this.$(this.e).appendChild(canvas)
            // 绘图
            this.painting(this.$('flower' + i))
          }
          // 动画
          this.handle()
        },
        // 绘图
        painting: function (e) {
          var ctx = e.getContext("2d")
          ctx.beginPath()
          // ----起始坐标(x, y)
          ctx.moveTo(this.data.start.x, this.data.start.y)
          // ----曲线坐标(x, y)--结束坐标(x, y)
          ctx.quadraticCurveTo(this.data.curve.x, this.data.curve.y, this.data.end.x, this.data.end.y)
          /* 轴对称 --- 只针对曲线左到右 */
          ctx.moveTo(this.data.start.x, this.data.start.y)
          ctx.quadraticCurveTo(this.data.start.x + this.data.curve.x, this.data.curve.y, this.data.end.x, this.data.end.y)
          ctx.fillStyle = this.color
          ctx.strokeStyle = this.color
          ctx.globalAlpha = 0.1
          ctx.fill()
          ctx.stroke()
        },
        // 动画
        handle: function () {
          var self = this
          var i = 0
          var timer = setInterval(function () {
            if (i > self.count) {
              clearInterval(timer)
              return
            }
            self.$('flower' + i).style.transform = 'rotate(' + i * self.number + 'deg)'
            i++
          })
        },
        $: function (dom) {
          return document.getElementById(dom)
        }
      }
      _methods.init()
    })({
      /* 配置项 */
      e: "flower",
      height: 500,
      width: 500,
      color: '#cc00ff',
      data: {
        // ----起始坐标(x, y)
        start: {
          x: 250,
          y: 0
        },
        // ----曲线坐标(x, y)
        curve: {
          x: 125,
          y: 125
        },
        // ----结束坐标(x, y)
        end: {
          x: 250,
          y: 250
        }
      },
      // 数量
      number: 15
    })
  </script>
</html>
复制代码
过渡中的动画

过渡中的动画


结束的动画

这里推荐一个网站可以免费手画贝塞尔曲线,可以复制里面的值: http://www.j–d.com/bezier


简单解释

1)坐标解释

// ----起始坐标(x, y)
start: {
  x: 250,
  y: 0
},
// ----曲线坐标(x, y)
curve: {
  x: 125,
  y: 125
},
// ----结束坐标(x, y)
end: {
  x: 250,
  y: 250
}

复制代码

这里真的是坑走多了得出的结论,稍微要解释的就是中间的曲线坐标,他就是两点之间的曲线角度

2)Y轴的坑

所有的Y轴为顶点到底部的距离值非左下角原点

3)过程解释

init(初始化遍历生成Dom结构并执行painting绘图Canvas) handle(生成动画)


一个完整的DEMO

github:https://github.com/gs3170981/JsCanvasCss3_rotate(好用的话记得加星哦!)


关于

make:o︻そ╆OVE▅▅▅▆▇◤(清一色天空)

blog:http://blog.csdn.net/mcky_love


结束语

什么,你说有啥用?这难道不像你的菊花吗?^_^哈哈……开玩笑 你试着修改下曲线任意的值看看效果,不够?那你修改下源代码,增加下颜色的随机性试试?\

相关文章

  • 谷歌浏览器pro,谷歌浏览器升级版,更快更稳定

    谷歌浏览器Pro——更快更稳定的升级版谷歌浏览器是广大网民日常使用的主流浏览器之一。经过多年的发展,现已推出了谷歌浏览器Pro——更快更稳定的升级版。此版本在速度、功能、安全性等方面都有了更为明显的提高。2.超快的页面加载速度谷歌浏览器Pro采用了全新的内核优化,使得页面加载速度更加快速。通过优化资源加载、缓存机制、页面渲染等多个方面,Pro版在速度上有了更加明显的提升。互联网时代的追求就是速度与效率,谷歌浏览器Pro升级版在速度上绝对是不错的选择。3.更稳定的运行体验谷歌浏览器Pro对于内存、CPU..
  • 防止火狐更新浏览器自动,火狐更新注意事项 防止自动覆盖浏览器设置

    为什么要防止火狐自动更新?在使用火狐浏览器时,我们经常会发现浏览器在未经允许的情况下自动更新到最新版本,这给我们带来了很大的不便。一些插件和扩展在新版本下无法使用,还有可能会影响浏览器的性能。因此,防止火狐自动更新浏览器已经成为了很多人的需求。2.防止自动更新的方法方法一:通过修改about:config设置。打开Firefox,输入about:config,在搜索框中输入app.update.auto,把值改为false。这样就禁止了Firefox的自动更新功能。方法二:通过修改更新选项。打开Fir..

Copyright 2019-2029 www.liulanqi.com 【浏览器家园】 版权所有

浏览器家园_下载浏览器就到浏览器家园 | 专注MAC浏览器和Windows浏览器下载和使用介绍

声明: 所有软件和文章收集整理来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告