canvas鼠标在屏幕上的互动效果实现

2023-11-06

1.首先我们需要整屏画布(你也可以随机设置)

2.想要鼠标经过的时候有大小圆圈跟着鼠标动,故需要创建一个类来装圆的属性:随机的圆唯一的标识(id我这里用index),坐标(x, y),半径r,颜色color(因为要很多圆需要一个数组来装,上面变量中自行添加)

3.圆的所有属性有了,我想要把它画出来,故创建一个方法

 4.以上基本工作就做完了,因为我希望圆跟着我的鼠标运动,故需要过去鼠标移动过程中的坐标

5.接下来就需要做动画了,为了保证画面的流畅这里使用了requestAnimationFrame方法(备注很详尽)

 6.调用啊

 完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html, body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            background: black;
        }
    </style>
</head>
<body>
    <canvas id="canvas"></canvas>
    <script>
        var ctx = document.getElementById('canvas')
            context = ctx.getContext('2d')
            Width = document.documentElement.clientWidth
            Height = document.documentElement.clientHeight
            ctx.width = Width
            ctx.height = Height
            color = 55
            rounds = []
        function Round_item (index, x, y, r, color) {
            this.index = index
            this.x = x
            this.y = y
            this.r = r
            this.color = 'hsl('+ color +',100%,80%)'
        }
        Round_item.prototype.draw = function () {
            context.fillStyle = this.color
            context.beginPath()
            context.arc(this.x, this.y, this.r, 0, 2*Math.PI, false)
            context.closePath()
            context.fill()
        }
        window.onmousemove = function (event) {
            rounds.push({
                x: event.clientX,
                y: event.clientY,
                r: 3,
            })
        }
        function animate () {
            // 清空画布
            context.clearRect(0, 0, Width, Height)
            for (let i = 0; i < rounds.length; i ++) {
                // 半径每次增大0.9
                rounds[i].r += 0.9
                // 由于hsl的颜色范围是1-360
                if (color > 360) {
                    color = 55
                }
                // 颜色变化
                color += 0.1
                rounds[i] = new Round_item(i, rounds[i].x, rounds[i].y, rounds[i].r, color)
                rounds[i].draw()
                // 圆的半径大于10就在下一次勾勒得时候消失
                if (rounds[i].r > 10) {
                    rounds.splice(i, 1)
                }
            }
            requestAnimationFrame(animate)
        }
        animate()
    </script>
</body>
</html>

 我学习的地址主要是菜鸟教程以及掘金,然后班门弄斧一下,有问题就指出哈,初学者一起加油

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canvas鼠标在屏幕上的互动效果实现 的相关文章

  • 使用 SASS 切换用户主题 - Ruby on Rails

    所以我有一个 Rails 管理系统 允许用户选择一个主题 基本上是一组 SASS 颜色变量 它将使用新颜色重新编译 application css scss 当用户从下拉菜单中选择并提交时 更改此设置的最佳方法是什么 我阅读了一些有关缓存和
  • onMouseEnter 和 onMouseLeave 未按预期运行

    我正在尝试为我的组件模拟悬停效果 然而 onMouseEnter Leave 事件没有按预期工作 现在我试图让它简单地 console log 一个字符串来检查它是否正常工作 但什么也没有发生 目的是我可以在悬停时更改其背景颜色 我尝试通过
  • 对(静态)CSS 文件所做的更改未反映在 Django 开发服务器中

    我正在使用 Django 制作一个 Web 应用程序 但在将 CSS 文件 存储在我的应用程序的静态目录中 中所做的更改反映到开发服务器上时遇到了一些问题 需要明确的是 服务器能够访问静态文件 但是 它目前停留在我的 CSS 文件的旧版本上
  • CSS 按钮将线性渐变背景转换为透明背景

    我有一个带有线性渐变背景 橙色边框和一些文本的按钮 当我将鼠标悬停在按钮上时 我希望背景变得透明 而不更改按钮的其他属性 我尝试将不透明度转换为 0 但显然 这会隐藏边框和文本 我也尝试过转换背景 但它不起作用 因为我没有要转换到的端点 因
  • 可以在 IE 中的表格行上添加渐变吗?

    当我将鼠标悬停在表格特定部分的表格行上时 我希望背景更改为线性渐变 CSS 很简单 tbody row links tr hover background typical multi browser linear gradient code
  • HTML 嵌入对象具有灰色背景。可以透明吗?

    我使用带有开源插件的 Firefox 来播放视频 视频被 尽可能好地 缩放以适应嵌入对象的宽度和高度中定义的可用空间 但有时右侧和 或底部会有一点灰色边框 看来这不是我的父 div 的背景颜色 因为更改它根本没有效果 这是 HTML div
  • 如何防止 Safari 滚动溢出:隐藏的 iframe?

    使用 Safari 您可以通过设置 style overflow hide 来禁用大多数 iframe 滚动 在 iframe 上 但是 如果您单击 iframe 并移动鼠标 内容无论如何都会滚动 Example 滚动内容 html
  • CSS - 为什么我无法设置 元素的高度和宽度?

    我正在尝试使用以下 html 标记创建 css 按钮 a href access php class css button red Forgot password a 但它最终不会比中间的文本大 即使我已经设置了班级的高度和宽度 顺便说一句
  • CSS 转换在toggleClass() 之后不起作用

    我创建了一个切换菜单 如图所示这个演示 http jsfiddle net 85Ryan Hrsdw 1 我添加了一个CSS过渡效果div nav menu 我用过max height 0 to max height 480px 当我单击菜
  • 使 css nth-child() 只影响可见

    有没有办法用这个CSS只影响可见元素 table grid tr alt nth child odd background ebeff4 table grid tr alt nth child even background ffffff
  • TYPO3 显示子页面的内容,包括 css 类

    使用以下打字稿 我从一页上的子页面获取所有内容 lib allPid COA lib allPid 10 HMENU 10 special directory special value 2 1 TMENU 1 expAll 1 NO do
  • 如何在 Mac 的任何 webkit 中隐藏父圆角的画布内容?

    我有一个父母div带有圆角 其中包含canvas div div
  • IE10中的图像插值

    这是我的用例 我有一个采用响应式设计的网页 该页面垂直分成两半 我想在右侧显示图像 呈现为 PNG 或 JPG 的 PDF 页面 调整窗口大小后 图像的大小应立即更改 我以为我已经解决了这个问题 我将服务器上的图像渲染得足够大 以适应最大可
  • Swift - 将图像插入 PDF 不再适用于 iOS 13

    目前正在开发在我的贷款计算器应用程序上导出 PDF 的功能 我有一个预览屏幕 可以在您保存 PDF 之前显示它 预览屏幕由带有 html 的 webView 组成 其中包含占位符 我能够成功地将图像插入到正确的占位符上 并将其显示在 PDF
  • 如何使用CSS将文本放在“框”的右上角或右下角

    我怎样才能得到here and and here位于右侧 与 lorem ipsums 位于同一行 请参阅以下内容 Lorem Ipsum etc here blah blah blah blah lorem ipsums and here
  • 如何在不设置动画的情况下突然更改 CSS 动画中的属性

    这是我试图弄清楚的 但没有使用 51 关键帧作为实现更改的黑客方法transform origin 这里有一个小提琴演示 http jsfiddle net p7pswnpq keyframes spin 0 transform origi
  • 媒体查询:如何定位桌面、平板电脑和移动设备?

    我一直在对媒体查询进行一些研究 但我仍然不太明白如何定位特定大小的设备 我希望能够针对台式机 平板电脑和移动设备 我知道会存在一些差异 但如果有一个可用于针对这些设备的通用系统 那就太好了 我发现的一些例子 Mobile only scre
  • 在桌面和移动设备上编写 2 列和 3 列的 Flexbox 代码(换行)

    我真的很难弄清楚这个 CSS flexbox 解决方案 基本上有两个问题 一个是 2 列布局 另一个是 3 列布局 2 列 我认为这可能非常简单 3 列 这可能更高级一些 容器类是 嗯 container 而孩子们只是 left right
  • 带缩略图的轮播和 bootstrap v4

    我看到了带有缩略图的轮播演示bootstrap 3 here http jsfiddle net talmand JS6JV 我正在尝试为 bootstrap v4 实现相同的功能 但无法弄清楚如何修复一些 UI 细节 例如左 右阴影覆盖整
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS

随机推荐

  • Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

    朴素贝叶斯是机器学习中比较常用的一种模型 尤其在文本分类的问题上是比较常用的baseline 朴素贝叶斯本身训练速度快 具有可并行化程度高 可解释性好的优点 但由于其对特征之间的独立性假设不是很符合某些需求场景 因此在实际的使用过程中往往需
  • MySQL运维篇之Mycat分片规则

    3 5 3 Mycat分片规则 3 5 3 1 范围分片 根据指定的字段及其配置的范围与数据节点的对应情况 来决定该数据属于哪一个分片 示例 可以通过修改autopartition long txt自定义分片范围 注意 范围分片针对于数字类
  • 宋浩概率论与数理统计-第一章-笔记

    概率论与数理统计 引言 1 1 1 随机事件 1 1 2 样本空间与事件的集合表示 1 1 3 事件间的关系 包含 并 和 交 积 差 互不相容事件 对立事件 完备事件组 运算律 事件的概率 1 2 1 概率的初等描述 1 2 2 古典概型
  • Elasticsearch学习笔记

    第1章 Elasticsearch概述 01 开篇 结构化数据 非结构化数据 半结构化数据含义 结构化数据 结构化数据是按照预定义的模式和格式进行组织的数据 它通常以表格 关系数据库或者类似的数据存储形式存在 具有固定的字段和数据类型 结构
  • node中为什么会出现这个问题UnhandledPromiseRejectionWarning

    大哥不想看详细的就直接看最后 在使用validate js规则验证时把所有字段都加入值后结果报这个问题UnhandledPromiseRejectionWarning 在服务层使用validate js规则验证 进行测试 终于发现设置的时间
  • Docker 学习笔记之基础命令

    1 Docker search image name搜索镜像 2 Docker pull image name下载镜像 3 Docker images 查看镜像 4 Docker run 启动容器 5 Docker ps 查看容器 6 Do
  • 【KEIL-MDK】系列——如何使用PC-Lint代码检查工具

    系列文章目录 01 KEIL MDK 系列 主题配色 文章目录 前言 一 PC Lint 是什么 二 在 KEIL MDK 中集成 PC Lint 工具 1 安装 PC Lint 工具 2 打开 KEIL MDK 进行简单设置 三 使用 P
  • 伯努利模型的极大似然估计和贝叶斯估计

    定义随机变量A为一次伯努利试验的结果 A A A的取值为 0 1 概率分布为 P A P A
  • @PostConstruct注解说明

    PostConstruct 是在Java中使用的注解 用于标识一个方法在一个bean被实例化和初始化之后 但在其投入使用之前应该被执行 它通常在Spring框架应用中使用 当一个bean在Spring应用上下文中被创建时 容器会通过调用其构
  • mssql 远程无法连接mysql_如何开启SqlServer 远程访问

    当Microsoft Sqlserver 2012 安装好后 接下的的工作需要配置Sqlserver数据库允许远程访问 只有配置了Sqlserver远程访问 其他ip客户端才能访问 配置sqlserver远程访问大致分为三步 即配置SQL
  • Android开发中如何添加自定义开机广播

    Android开发中如何添加自定义开机广播 在Android开发中 我们经常需要在设备开机完成后执行一些特定的操作 比如初始化应用程序或者启动服务 为了实现这样的需求 我们可以通过添加自定义开机广播来实现 首先 我们需要创建一个广播接收器类
  • 修改windows的默认编码

    修改windows的默认编码 环境 win10 问题背景 使用7z解压缩一个 zip文件之后 发现文件包内的文件名是乱码 但是使用同版本的7z在另一个win10系统下解压缩 没有这个问题 问题原因 是win10默认编码的问题 由于这次的电脑
  • 【深度学习】基于华为MindSpore和pytorch的卷积神经网络LeNet5实现MNIST手写识别

    1 实验内容简介 1 1 实验目的 1 熟练掌握卷积 池化概念 2 熟练掌握卷积神经网络的基本原理 3 熟练掌握各种卷积神经网络框架单元 4 熟练掌握经典卷积神经网络模型 1 2 实验内容及要求 请基于pytorch和mindspore平台
  • csdn积分怎么查看

    csdn积分怎么查看 博客积分查询 https mp csdn net mp blog analysis article all 下载积分查询 https mp csdn net mp download analysis download
  • js 与 jsc 文件不能混用

    不然会出现莫名bug 转载于 https www cnblogs com guomengkai p 11511410 html
  • WORD软件安装

    WORD插件Aurora安装及下载 准备软件下载 正式安装 常见问题 准备软件下载 安装包下载地址 链接 https pan baidu com s 1gsTSDL0KPdeXdiucE3HGlA 提取码 vbi5 正式安装 按照流程安装即
  • 视频恢复软件哪个好用?推荐这几款恢复率高的软件

    如果你意外删除了电脑保存的视频文件 无论是单击回收站 还原 还是通过电脑系统备份 还原 它都无法恢复 如何解决这个问题 此时 你需要寻求文件删除恢复软件的帮助 推荐下面这几款恢复率高的视频恢复软件 如何操作呢 你可以看看下面的详细解说 第一
  • MongoDB分片

    MongoDB分片 集群搭建 环境准备 mongo1 127 0 0 1 mongo2 127 0 0 1 mongo3 127 0 0 1 config1 端口 27018 config2 端口 27028 config3 端口 2703
  • 如何实现动态代理

    1 动态代理和静态代理的区别 静态代理 在编译之前就已经确定好代理对象 代理方法等等 动态代理 在编译后才明确代理对象以及代理方法等等 2 JDK代理原理 使用JDK动态代理方法 我们需要代理类和被代理类同时继承同一个接口才能进行增强 3
  • canvas鼠标在屏幕上的互动效果实现

    1 首先我们需要整屏画布 你也可以随机设置 2 想要鼠标经过的时候有大小圆圈跟着鼠标动 故需要创建一个类来装圆的属性 随机的圆唯一的标识 id我这里用index 坐标 x y 半径r 颜色color 因为要很多圆需要一个数组来装 上面变量中