如何用canvas画一条可以向左移动的曲线?

2023-12-11

我正在编写一个程序来绘制sine curve与画布。
HTML:

<canvas id="mycanvas" width="1000" height="100">
    Your browser is not supported.
</canvas>

JavaScript:

var canvas = document.getElementById("mycanvas");
if (canvas.getContext) {
    var ctx = canvas.getContext("2d");
    ctx.lineWidth = 3;
    var x = 0,
        y = 0;
    var timeout = setInterval(function() {
        ctx.beginPath();
        ctx.moveTo(x, y);
        x += 1;
        y = 50 * Math.sin(0.1 * x) + 50;
        ctx.lineTo(x, y);
        ctx.stroke();
        if (x > 1000) {
            clearInterval(timeout);
        }
    }, 10);
}

这真的很好用:http://jsfiddle.net/HhGnb/

但是,现在我只能提供 100px 的画布宽度,因此只能看到曲线最左边的 100px。http://jsfiddle.net/veEyM/1/
我想归档这个效果:当曲线的右点大于画布的宽度时,整个曲线可以向左移动,所以我可以看到曲线的最右点,有点像曲线向左流动。我可以这样做吗?


该组织的基本理念之一<canvas>元素是计算机“忘记”绘图命令,只保存像素,就像位图一样。因此,要将所有内容移至左侧,您需要清除画布并重新绘制所有内容。

我还想建议您一件事 - 您总是从 x = 0 和 y = 0 开始,但显然在 x = 0 时,y 不一定也等于 0。编辑:实现了这个。

无论如何,我最终得到了这段代码:http://jsfiddle.net/veEyM/5/

var canvas = document.getElementById("mycanvas");
var points = {}; // Keep track of the points in an object with key = x, value = y
var counter = 0; // Keep track when the moving code should start

function f(x) {
    return 50 * Math.sin(0.1 * x) + 50;
}

if (canvas.getContext) {
    var ctx = canvas.getContext("2d");
    ctx.lineWidth = 3;
    var x = 0,
        y = f(0);
    var timeout = setInterval(function() {
        if(counter < 100) { // If it doesn't need to move, draw like you already do
            ctx.beginPath();
            ctx.moveTo(x, y);
            points[x] = y;
            x += 1;
            y = f(x);
            ctx.lineTo(x, y);
            ctx.stroke();
            if (x > 1000) {
                clearInterval(timeout);
            }
        } else { // The moving part...
            ctx.clearRect(0, 0, 100, 100); // Clear the canvas
            ctx.beginPath();
            points[x] = y;
            x += 1;
            y = f(x);
            for(var i = 0; i < 100; i++) {
                // Draw all lines through points, starting at x = i + ( counter - 100 )
                // to x = counter. Note that the x in the canvas is just i here, ranging
                // from 0 to 100
                ctx.lineTo(i, points[i + counter - 100]);
            }
            ctx.stroke();
        }
        counter++;
    }, 10);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用canvas画一条可以向左移动的曲线? 的相关文章

  • 暂停除了已激活的玩家之外的所有其他玩家。

    我有这个插件 它可以将不同的样式应用于 html5
  • 使用 jquery 远程图像属性

    目前我正在尝试获取远程图像宽度 高度 我正在开发一个链接共享模块 就像当你在 Facebook 上粘贴链接时 你可以看到标题 描述和图像 所以我尝试使用 php getimagesize 来获取图像宽度 高度 但速度非常慢 所以我正在考虑使
  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • Angular - CSS - 自定义类型=文件输入,如何使用按钮而不是标签?

    我制作了一个类型为 file 的自定义输入字段 因为我不喜欢默认的输入字段 为了实现这一目标 我做了
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery

随机推荐

  • 获取:“找不到 SessionsHelper,期望它在 helpers/sessions_helper.rb 中定义”

    加载 login 后 我在日志文件中收到以下内容 Started GET login for 120 138 93 108 at 2016 01 02 03 06 24 0000 ActionController RoutingError
  • 上传者收到“策略过期”消息发送到 S3 的某些情况

    我最近实施了 Fine Uploader 它基本上是成功的 然而 少数用户无法上传 他们都使用现代浏览器 IE10 FF 和 Chrome 其中一个让我远程访问他们的机器 我可以在 Chrome 和 FF 上尝试它 我在两者上都遇到了相同的
  • Java Swing:如何获取包括刚刚键入的字符在内的 TextArea 值?

    键入按键后获取 TextArea 值 包括该字符 的最佳方法是什么 如果我在事件侦听器中执行此操作 textarea getText 返回不带最终新字符的值 基本上我看到两种方法 使用 invokeLater 之类的方法推迟处理 我更喜欢没
  • 确定重叠范围 - R

    我有两个数据框 一份包含一个月内的购买情况 一份包含该月播放的广告 广告 要了解购买是否可以可靠地链接到广告 我想了解有多少购买日期是在广告后 4 天内发生的 我创建了一些 繁琐的 代码来执行此操作 基于广告数据库的每一行的扩展以覆盖相关的
  • 尝试比较递归算法和迭代算法

    我有两种算法可以解决这个问题 生成汉明距离 t 内的所有比特序列 现在我想从理论上比较它们 如果需要的话 我确实有时间测量 The 迭代算法其复杂度为 O n 选择 t n where n是位串的长度 t是所需的汉明距离 The 递归算法
  • CAGradientLayer 不自动调整大小

    我在 UIImageView 上添加了一个 CAGradientLayer 我已将 UIImageView 上的自动调整大小蒙版设置为跨边界灵活 灵活的高度 宽度等 但是 当 UIImageView 调整大小时 我添加在 imageView
  • Express.js 处理不匹配的路由

    各位 我开发了一个 Rest API 我希望当路由不存在时发送自定义消息 而不是express js 默认发送的 html 消息 据我搜索 我找不到办法做到这一点 我尝试这样做 app all function req res res st
  • 如何向新手解释 Python 中的属性

    谁能用简单的话解释一下Python语言中的属性是什么 例如我能说些什么 list append x 使用直观 简单的日常生活示例在列表末尾添加一个对象 我发现属性描述了一个对象的属性 例如我的头发的属性是它们是棕色的和短的 很好 但如果是的
  • 实现自定义 u-boot 命令

    我想添加自定义命令命令u boot可以是一个简单的 hello world 命令 搜索后我发现了这个链接Yocto u boot 自定义命令它说看的地方timer命令输入cmd misc c作为起点 我怎么带这个timer命令到我的 u b
  • 使用 javascript 和 glsl 进行凹凸贴图

    A class creating buffers for a textured box to render it with WebGL class RasterTextureBox Creates all WebGL buffers for
  • 如何在DataGridView中突出显示搜索阿拉伯文本?

    我想突出显示 DataGridView 中给定的搜索文本 但数据是阿拉伯语的 我尝试使用 CellPainting 事件来查找搜索文本的边界并绘制 FillRectangle 但我无法准确获取搜索文本的边界 我使用的代码如下 private
  • 如何向 Google 工作表的每一行添加“发送电子邮件”按钮?

    我有一个 google 工作表 其中包含 4 列输入 用于编写电子邮件 我想 快速 为每一行创建一个按钮 全部添加到 D 列中 该按钮将利用该信息发送电子邮件only从按钮所在的行开始 我该怎么做呢 如何快速向每一行添加多个外观相同的按钮
  • MassTransit Consumer从未收到消息

    我正在按照在 ASP NET Core 应用程序中使用 MassTransit 与 RabbitMQ 和 Autofac 的文档构建一个演示应用程序 我的程序代码 namespace MessageDemo public class Pro
  • Mac OS X 上的 boot2docker、docker、django

    我想在 Mac OS X 上的 docker 中运行 Django 应用程序 我已经使用以下命令安装了 dockerget started教程 我参考docker library中的Django文档来构建镜像 https github co
  • 如何使用 numpy 复制数组的一行?

    我想在 python 中复制数组的最后一行 并在 numpy 文档中找到了以下代码行 gt gt gt x np array 1 2 3 4 gt gt gt np repeat x 1 2 axis 0 在上面的代码中 np repeat
  • 糟糕,在使用 Paramiko 连接 SFTP 时未处理类型 3(“未实现”)

    我试图使下面的脚本工作 以便从远程服务器 服务器1 读取特定目录中的CSV文件列表 并将数据移植到另一台服务器的PostgreSQL数据库中 我已经创建了一个 rsa SSH 密钥并将其复制到远程服务器 现在我可以仅使用用户名连接服务器 我
  • Android 代码和资源混淆

    Google 推荐并打包在 ProGuard 中以进行代码混淆 然而 它附带的默认配置似乎很小 并且可以在一定程度上进行逆向工程 大多数寻求逆向工程的人并不是真正在寻找详细代码 而可能是提取逻辑 是否有任何指导方针可以更有效地配置 ProG
  • 通过 Excel VBA 修复 PowerPoint 幻灯片中的文本框(右侧)

    我使用以下代码将一个单元格的内容放在 PowerPoint 幻灯片上 Set Sh Pres Slides 1 Shapes AddLabel Orientation msoTextOrientationHorizontal Left 80
  • React.js 中的冒泡和捕获示例

    我正在寻找在 React js 中处理冒泡和捕获的示例 我发现一个使用 JavaScript 的 但我很难找到 React js 的等效项 我如何在 React js 中创建冒泡和捕获的示例 React 支持冒泡和捕获 其方式与 DOM 规
  • 如何用canvas画一条可以向左移动的曲线?

    我正在编写一个程序来绘制sine curve与画布 HTML