react+canvas实现横跨整个页面的动态的波浪线(贝塞尔曲线)

news2024/11/29 11:54:40

本来写这个特效 我打算用css实现的,结果是一波三折,我太难了,最终没能用css实现,转战了canvas来实现。来吧先看效果图
在这里插入图片描述
当然这个图的波浪高度、频率、位置、速度都是可调的,请根据自己的需求调整,如果你讲波浪什么的调大一下 还有有摆动的效果哦。

以下是完整代码

import React, { useEffect, useRef } from 'react';
import classNames from 'classnames';
const WaveAnimation = () => {
  const canvasRef = useRef<HTMLCanvasElement | null>(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    if (canvas) {
      const ctx = canvas.getContext('2d');
      console.log('ctx', ctx);
      if (ctx) {
        const amplitude = 60;
        const frequency = 0.006;
        let phase = 0;
        const centerY = canvas.height / 2;
        const startX = -10;
        const speed = 0.2;
        const lineColor = 'rgba(255, 255, 255, 0.1)';

        const animate = () => {
          ctx.clearRect(0, 0, canvas.width, canvas.height);
          ctx.beginPath();
          ctx.moveTo(startX, centerY);

          for (let x = startX; x < canvas.width; x++) {
            const y = centerY + amplitude * Math.sin(frequency * x + phase);
            ctx.lineTo(x, y);
          }

          ctx.strokeStyle = lineColor;
          ctx.lineWidth = 10;
          ctx.stroke();

          phase -= speed;

          requestAnimationFrame(animate);
        };

        animate();
      }
    }
  }, []);

  return (
    <div className="wave-animation">
      <canvas ref={canvasRef} width="3000" height="300"></canvas>
    </div>
  );
};

export default WaveAnimation;

如果你想看vue的写法,请移步这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能&#xff08;Redis RabbitMQ&#xff09; 1.2.1、分析 1.2.2、案例实现 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 使用 redis 作为缓存&#xff0c; M…

EEG公开数据集介绍

EEG公开数据集介绍 0 引言1 项目简单介绍1.1 运动想象1.2 情绪识别1.3 误差相关电位 &#xff08;ErrP&#xff09;1.4 视觉诱发电位 &#xff08;VEP&#xff09;1.5 事件相关电位 [ERP]1.6 慢皮质电位 &#xff08;SCP&#xff09;1.7 静息状态1.8 音乐和脑电图1.9 眨眼/运动…

ruby语言怎么写个通用爬虫程序?

Ruby语言爬虫是指使用Ruby编写的网络爬虫程序&#xff0c;用于自动化地从互联网上获取数据。其中&#xff0c;CRawler是一个基于文本的小型地牢爬虫&#xff0c;它被设计为可扩展&#xff0c;所有游戏数据均通过JSON文件提供&#xff0c;程序仅处理游戏引擎。除此之外&#xff…

企业服务器数据库中了mkp勒索病毒怎么解决,勒索病毒解密数据恢复

在近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的服务器数据库遭到了勒索病毒攻击&#xff0c;导致企业的所有重要数据被加密。尤其是从10月份以来&#xff0c;勒索病毒的攻击频率越来越高&#xff0c;有很多企业都是二次被攻击&#xff0c;尤其是…

视频特效制作After Effects 2024 for Mac(ae)

After Effects 2024是一款由Adobe公司开发的专业的视频特效和动态图形设计软件&#xff0c;它可以帮助用户创建各种令人惊叹的视觉效果&#xff0c;例如粒子系统、合成特效、绿屏抠像等。该软件支持动画制作&#xff0c;包括关键帧动画、形状动画、运动跟踪等工具&#xff0c;可…

高浓度cod废水怎么处理

高浓度COD废水的处理方法主要有物理法、生物法和化学法。 物理法&#xff1a;一般通过加入絮凝剂&#xff0c;利用絮凝剂的吸附、电中和等作用将水中的颗粒物结团沉降下去&#xff0c;从而达到去除部分来自颗粒物的COD。此方法基本上只对浓度上万、上千的COD起作用&#xff0c…

跑步耳机哪个牌子好?最适合跑步用的耳机排名

在各式各样的耳机当中&#xff0c;运动耳机可以说是使用场景最广的一类了。毕竟运动耳机对于某些方面性能要求会比非运动耳机要高很多&#xff0c;就比如户外运动、健身、骑行等方面。面对这么多运动耳机&#xff0c;哪款更值得入手&#xff1f;今天就来给大家推荐几款很不错的…

力扣 寻找旋转排序数组中的最小值 二分

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f338; AC code class Solution { public int findMin(int[] nums){int res Integer.MAX_VALUE;int l 0;int r nums.length - 1;while (l < r){int mid l r >> 1;if (nums[mid] < res)res nums[mid];//中值 &…

What is 哈希?

哈希 ​ 前言&#xff1a;大一大二就一直听说哈希哈希&#xff0c;但一直都没有真正的概念&#xff1a;What is 哈希&#xff1f;这篇博客就浅浅聊一下作者认知中的哈希。 理解哈希 ​ 哈希&#xff08;Hash&#xff09;也可以称作散列&#xff0c;实质就是一种映射&#xf…

git更改远程仓库地址

1、输入命令【git remote -v】查看当前git远程仓库地址 2、输入命令【git remote set-url origin 新地址】替换成新地址 3、输入命令【git remote -v 】查看是否更新成功

Odoo 网站主题开发指南

Odoo 网站主题开发指南 下载根据本指南开发的主题模块源码 Odoo 网站生成器是一个灵活的工具&#xff0c;可以轻松构建与 Odoo 应用完全集成的网站。使用其提供的主题选项 (options) 和构建块 (blocks) 很容易定制网站。然而&#xff0c;你还可以更进一步深度定制。在本文中&a…

Zinx框架-游戏服务器开发002:按照三层结构模式重构代码功能-待续

文章目录 1 Zinx框架总览2 三层模式的分析3 三层重构原有的功能 - 头文件3.1 通道层Stdin和Stdout类3.1.2 StdInChannel3.1.2 StdOutChannel 3.2 协议层CmdCheck和CmdMsg类3.2.1 CmdCheck单例模式3.2.1.1 单例模式3.2.1.2 * 命令识别类向业务层不同类别做分发 3.2.2 CmdMsg自定…

Python+pandas将Excel文件xlsx批量转换xls(代码全注释)

文章目录 专栏导读背景安装的库代码部分(全注释)视频演示总结&#x1f44d; 该系列文章专栏&#xff1a;[Python办公自动化专栏]PS: xls转xlsx文章在这&#xff1a;【点我直达】 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的…

MySQL缩短查询时间小技巧

背景 今天我要统计数据表的最新更新时间&#xff0c;有些表数据量特别大&#xff0c;所以统计比较费时间&#xff0c;但是如果使用一下小技巧&#xff0c;就会极大加快查询时间&#xff0c;适合小白的调优手段。 查询更新时间 select max(update_time) from test大概表的行数…

外汇天眼:账户惨遭冻结?一招帮你解决问题!

在外汇交易中&#xff0c;难免会出现大大小小的问题&#xff0c;其中账户被冻结也是经常能够见到的。首先摒弃外汇黑平台&#xff0c;在正规的外汇平台&#xff0c;如果出现账户被冻结的问题&#xff0c;可能是以下几种原因&#xff1a; 第一种是使用平台禁止的辅助软件进行薅…

python-opencv写入视频文件无法播放

python-opencv写入视频文件无法播放 在采用Python写OpenCV的视频时&#xff0c;生成的视频总是无法播放&#xff0c;大小只有不到两百k&#xff0c;播放器提示视频已经损坏。网上搜了一些方法&#xff0c;记录下解决办法。 代码如下 fourcc cv2.VideoWriter_fourcc(*MJPG) fp…

CRM客户关系管理系统源码 PHP客户管理系统源码

CRM客户关系管理系统源码 PHP客户管理系统源码 系统采用&#xff1a;PHPMYSQL 开发&#xff0c;功能完善&#xff0c;界面美观。 功能介绍&#xff1a; 1.客户管理&#xff1a;客户列表、今日新增客户、近7天新增客户、本月新增客户、新增客户&#xff08;包括客户名称、所在…

青柚课堂|为3960余名学生解惑青春期

2023年10月30日-11月1日&#xff0c;益阳市海棠学校邀请益阳市蚂蚁社会工作服务中心的儿童性教育公益讲师们开展了以“我们的青春期”为主题的“青柚课堂”性教育公益讲座&#xff0c;授课初中部班级72个&#xff0c;受益青少年3960余人。 在热身游戏的活跃氛围中&#xff0c;讲…

投标之---信用中国查询信用

https://www.creditchina.gov.cn/ 挨个点 &#xff0c;有的需要跳转网页&#xff0c;输入企业信息就是可以的&#xff0c;具体按照招标要求&#xff0c;如果没有具体的&#xff0c;那就是多查询几个

【Python3】【力扣题】225. 用队列实现栈

【力扣题】题目描述&#xff1a; 栈&#xff1a;线性集合。后进先出。 队列&#xff1a;线性集合。先进先出。也有双端队列和循环队列。 【Python3】代码&#xff1a; 1、解题思路&#xff1a;两个队列。队列1存储元素&#xff0c;队列2辅助。元素从队尾进入队列2&#xff0c;…