Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在vue中制作canvas波浪图

在vue中制作canvas波浪图

作者头像
子舒
发布于 2022-06-09 06:37:17
发布于 2022-06-09 06:37:17
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

新建组件 Canvas.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// @/components/Canvas.vue

<template>
  <div :style="{ height: waveAllHeight + 'px', background: bgColor }" class="wave">
    <canvas id="wave1"></canvas>
    <canvas id="wave2"></canvas>
    <canvas id="wave3"></canvas>
  </div>
</template>

<script>
export default {
  name: "Canvas",
  props: {
    bgColor: {
      default: "none",
    }, // 背景色
    waveAllHeight: { default: 160 }, // 波浪的整体高度
    waveCount: { default: 2 }, // 波峰个数
    waveHeight: { default: 50 }, // 波浪起伏高度
    // 波浪颜色
    waveColor: {
      default () {
        return [
          "#f3f3f3",
          "#f3f3f3",
          "#f3f3f3",
        ];
      },
    },
    // 波浪速率
    waveTime: {
      default () {
        return [4000, 4000, 4000];
      },
    },
  },
  data () {
    return {};
  },
  mounted () {
    this.wavePlay("wave1", 140, this.waveColor[0], this.waveTime[0]);
    this.wavePlay("wave2", 140, this.waveColor[1], this.waveTime[1]);
    this.wavePlay("wave3", 140, this.waveColor[2], this.waveTime[2]);
  },
  methods: {
    wavePlay ($canvasID, $progress, $maveColor, $time) {
      const that = this;
      let waveWidth = 3300, // 波浪长度
        offset = 0,
        waveHeight = that.waveHeight, // 波浪起伏高度
        waveCount = that.waveCount, // 波浪个数
        startX = -1200,
        startY = 212, // canvas 高度
        progress = $progress, // 波浪位置高度
        d2 = waveWidth / waveCount, // 单个波浪的宽度
        d = d2 / 2,
        hd = d / 2,
        c = document.getElementById($canvasID),
        ctx = c.getContext("2d");
      c.width = 1920; // 画布宽度
      c.height = that.waveAllHeight; // 画布高度
      function move () {
        offset -= 5;
        if (-1 * offset === d2) {
          offset = 0;
        }
        ctx.clearRect(0, 0, c.width, c.height);
        ctx.fillStyle = $maveColor; // 画布填充色
        ctx.beginPath();
        let offsetY = startY - progress;
        // 绘制贝塞尔曲线
        ctx.moveTo(startX - offset, offsetY); // 开始点
        for (let i = 0; i < waveCount; i++) {
          let dx = i * d2;
          let offsetX = dx + startX - offset;
          ctx.quadraticCurveTo(
            offsetX + hd,
            offsetY + waveHeight,
            offsetX + d,
            offsetY
          );
          ctx.quadraticCurveTo(
            offsetX + hd + d,
            offsetY - waveHeight,
            offsetX + d2,
            offsetY
          );
        }
        ctx.lineTo(startX + waveWidth, 3000);
        ctx.lineTo(startX, 0);
        ctx.fill();
        setTimeout(move, $time / 60); // 速度
      }

      move();
    },
  },
};
</script>

<style scoped lang="scss">
.wave {
  width: 100%;
  height: 100%;
  position: relative;
  top: 0;
  left: 0;
  margin-top: -8%;
  canvas {
    width: 100%;
    opacity: 1;
    position: absolute;
    top: 0;
    left: 0;
  }
}
@media (max-width: 900px) {
  .wave {
    display: none;
  }
}
</style>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 03 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Canvas 绘图技术:实现原生柱状图以及定制化开发特殊功能
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将介绍如何利用Canvas实现柱状图以及定制化开发特殊功能。
Front_Yue
2024/01/25
1.2K4
Canvas 绘图技术:实现原生柱状图以及定制化开发特殊功能
【CSS】1140- Canvas 制作水波图实现原理
在项目中自己使用 Canvas 实现了一下水波图,在这里给大家分享一下它的实现原理。一开始看到波浪,可能不知道从何入手,我们来看看波浪的特征就会有灵感了。
pingan8787
2021/11/17
1.1K0
canvas 系列学习笔记二《绘制图形》
strokeRect(x, y, width, height) 绘制一个矩形的边框
星宇大前端
2022/09/08
2960
canvas 系列学习笔记二《绘制图形》
如何利用HTML5 Canvas和JavaScript创建交互式和动画图形的指南
全栈若城
2024/02/29
1860
如何利用HTML5 Canvas和JavaScript创建交互式和动画图形的指南
Canvas监测雷达
已经很晚了,祝愿大家做个好梦。如果你也如我一般,对Canvas 或者 Css 有着独有的情愫,加入我,让手中的代码变得生机勃勃,我是 “ 我不是费圆 ”,一个正在努力的前端程序员。
我不是费圆
2020/10/09
9200
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.1K0
Canvas
使用vue实现一个电子签名组件
想要绘制图形,第一步想到的就是使用canvas标签,在之前的文章里我们使用canvas实现了一个前端生成图形验证码的组件,被吐槽不够安全,那么这个电子签名组件想必不会被吐槽了吧~
我的小熊不见了丶
2020/01/15
2.1K0
使用vue实现一个电子签名组件
绚丽烟花:HTML5 Canvas 烟花效果实现(文末附完整代码)
在节日或特殊场合,绚丽的烟花总能带来无尽的欢乐和惊喜。今天,我们将通过 HTML5 Canvas 实现一个绚丽的烟花效果,让你的网页也能绽放出美丽的烟花。
码事漫谈
2025/01/27
9201
绚丽烟花:HTML5 Canvas 烟花效果实现(文末附完整代码)
canvas实现在线签名
<body> <div style="margin:20px auto; text-align:center;">签名版</div> <canvas id="canvasbox" width="500" height="250" style="border:1px solid green; margin:20px auto;display:block;"></canvas> <div class="btn" style="margin:0 auto; text-align:center;
用户1349575
2022/01/26
8890
树状图js的实现方法
本文是基于决策树的需求做的前期demo实现,所以以二叉树为实现目标。基本术语如下:
用户5317830
2021/01/19
4.1K0
树状图js的实现方法
给pugjs的stun主题添加canvas时钟
首先隔了这么久才继续进行更新的原因是网站备案和毕业设计,加上刚入职没有时间去进行内容更新,以后会继续更新了
impressionyang
2020/08/27
1.1K0
给pugjs的stun主题添加canvas时钟
CSS Houdini实现动态波浪纹
CSS Houdini 号称 CSS 领域最令人振奋的革新。CSS 本身长期欠缺语法特性,可拓展性几乎为零,并且新特性的支持效率太低,兼容性差。而 Houdini 直接将 CSS 的 API 暴露给开发者,以往完全黑盒的浏览器解析流开始对外开放,开发者可以自定义属于自己的 CSS 属性,从而定制和扩展浏览器的展示行为。
WecTeam
2019/12/16
1.3K0
CSS Houdini实现动态波浪纹
我希望按照我的思路尽可能将canvas基础讲明白
写在前面 canvas很多人写过,我之前的博客里面也写过关于canvas的教程,但是后面我觉得其实不太好,因为很多东西都是很模糊的,没有非常直观清晰的将canvas讲解明白,究其原因,还是这个属性使用的不够多,导致很多属性不够熟练,但是我希望这篇文章可以将这个属性彻底的讲明白,毕竟只是一个标签而已,怎么讲都不会太复杂,他之所以不太好学原因就在于他自带的方法太多,加上很多的效果都是需要方法之间的相互配合使用,所以难度和复杂度就直接升高了很多,它不像html的其他标签一样,比如p、span等都只是自带了一些样
何处锦绣不灰堆
2022/05/31
3670
我希望按照我的思路尽可能将canvas基础讲明白
JavaScript·Canvas 基础用法
<canvas> 标签只有两个可选的属性 width 和 height。当没有设置宽度和高度的时候,canvas 会初始化宽度为 300 像素和高度为 150 像素。宽高属性会自动忽略单位,以像素展示,所以使用 em 或 rem 等单位无效。
数媒派
2022/12/01
7820
html5 canvas画布
本文由用户 AnnettaMcca 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
用户7705674
2021/09/22
1.1K0
解锁前端难题:亲手实现一个图片标注工具
业务中涉及图片的制作和审核功能,审核人员需要在图片中进行标注,并说明存在的问题,标注过程中需要支持放大缩小,移动等交互,将业务剥离,这个需求,可以定义为实现一个图片标注功能。
winty
2024/04/15
1.1K0
解锁前端难题:亲手实现一个图片标注工具
创建canvas设置canvas尺寸绘制图形Canvas库
Canvas是常见的前端技术,但是由于API众多,使用复杂,且对程序员的数学功底、空间想象能力乃至审美都有一定要求,所以真正擅长canvas的前端并不多,但并不代表大家就学不好canvas。我在此将常用的canvas使用场景罗列出来希望能帮助到大家。
MudOnTire
2020/05/12
4.6K0
创建canvas设置canvas尺寸绘制图形Canvas库
HTML5 Canvas开发详解(实战一)
针对 HTML5 Canvas开发详解(基础一)的基础知识,写了一些实战案例,本节的案例代码是写在vue搭建的项目中的,引用了element-ui的按钮组件,如果大家要运行本节代码,以组件的形式引到自有vue项目的某个父组件即可。
爱学习的程序媛
2022/04/07
8910
Canvas基础-粒子动画Part4
在之前的文章 Canvas基础-粒子动画Part2 和 Canvas基础-粒子动画Part3 中分别讲了用图片和文字做粒子动画,今天我们来把代码简单整理一下,封装成一个类,能同时支持用图片和文字做粒子动画,而且有更好的灵活性。 封装类 HTML结构和上一篇的一样,这里从外部引入一个js文件,我们的类就写这里面。 <body> <div class="input-wrap"> <input id="txt" type="text" name="" valu
Bob.Chen
2018/05/02
1.1K0
Canvas基础-粒子动画Part4
通过canvas画板学习PointerEvent、MouseEvent和TouchEvent
最近想开发个草稿纸功能, 所以学习了下canvas实现简单的画板功能, 但是我们知道在PC端我们可以用MouseEvent来监听我们的鼠标点按相关操作, 移动端可以使用TouchEvent来监听我们手指触摸相关操作, 所以我们做画板的时候要想兼顾鼠标点按和手指触摸就得写两套逻辑. 但是别忘了, 还存在PointerEventer, 它可以监听鼠标, 手指触摸以及触摸笔, 支持多点触控, 它还有个特殊的参数, 即压感, 在压感屏上可以获取获取压感笔的压感值, 只要根据压感值, 我们可以控制笔画的粗细
治电小白菜
2021/04/27
1.8K0
通过canvas画板学习PointerEvent、MouseEvent和TouchEvent
相关推荐
Canvas 绘图技术:实现原生柱状图以及定制化开发特殊功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档