如何在 html5 canvas 中对齐文本?

2023-11-23

如何在 html5 画布中对齐文本以“对齐”?在下面的代码中,文本可以左/右/中心对齐。我需要设置align="justify"。请建议如何做到这一点?

HTML:

<body onload="callMe()">
    <canvas id="MyCanvas"></canvas>
</body>

JS:

function callMe() {
    var canvas = document.getElementById("MyCanvas");
    var ctx = canvas.getContext("2d");
    var txt = "Welcome to the new hello world example";
    cxt.font = "10pt Arial";
    cxt.textAlign = "left";

    /* code to text wrap*/
    cxt.fillText(txt, 10, 20);
}

HTML5 的画布不支持多行文本绘制,因此对对齐类型没有实际影响。

如果你想支持换行,你必须自己支持,你可以在这里看到之前的讨论:HTML5 Canvas - 我可以在 fillText() 中使用换行吗?

这是我对自动换行/换行的实现:

    function printAtWordWrap(context, text, x, y, lineHeight, fitWidth) {
        fitWidth = fitWidth || 0;
        lineHeight = lineHeight || 20;

        var currentLine = 0;

        var lines = text.split(/\r\n|\r|\n/);
        for (var line = 0; line < lines.length; line++) {


            if (fitWidth <= 0) {
                context.fillText(lines[line], x, y + (lineHeight * currentLine));
            } else {
                var words = lines[line].split(' ');
                var idx = 1;
                while (words.length > 0 && idx <= words.length) {
                    var str = words.slice(0, idx).join(' ');
                    var w = context.measureText(str).width;
                    if (w > fitWidth) {
                        if (idx == 1) {
                            idx = 2;
                        }
                        context.fillText(words.slice(0, idx - 1).join(' '), x, y + (lineHeight * currentLine));
                        currentLine++;
                        words = words.splice(idx - 1);
                        idx = 1;
                    }
                    else
                    { idx++; }
                }
                if (idx > 0)
                    context.fillText(words.join(' '), x, y + (lineHeight * currentLine));
            }
            currentLine++;
        }
    }

那里不支持对齐或理由,您必须将其添加到

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

如何在 html5 canvas 中对齐文本? 的相关文章

  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 扩展位置绝对div超出溢出隐藏div

    我已经好几个月没有做过CSS了 所以我可能会错过一些简单的东西 但无论解决方案是什么 我都无法弄清楚 所以问题就在这里 这是我的代码的简化版本 div style height 100 width 200px div style margi
  • Jquery 在 DIV 中进行多重加载

    这是我的代码 right load textes html nicolas right load textes html antoine 问题是内容divantoine覆盖了右边div nicolas加载的内容div div right l
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • Angular JS 中的数组

    我是 Angular JS 新手 我正在将元素推送到数组中 然后想使用 ng repeat 在 html 中显示 scope groupedMedia Adding elements through a for loop scope gro
  • .Net 中是否有与 HTML 等效的 XmlReader?

    我用过Html敏捷包 http html agility pack net z codeplex过去在 Net 中解析 HTML 但我不喜欢它只使用 DOM 模型 在大型文档和 或具有大量嵌套的文档上 可能会遇到堆栈溢出或内存不足异常 另外
  • Javascript 使事件点击和语音识别与多个按钮一起工作

    所以我正在使用 webkitSpeechRecognition 并且它工作得很好 但问题是我想同时在多个地方使用它 当我将它添加到页面上的另一个部分时 它无法正常工作 这是它自己工作的情况 var final transcript var
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • HTML:如何强制链接在新选项卡而不是新窗口中打开[重复]

    这个问题在这里已经有答案了 I use target blank 在新选项卡中打开链接 但在 IE 中它会打开一个新窗口 这是完全合乎逻辑的 因为这就是 blank应该做的 我不知道如何target blank 在其他浏览器中的行为 有什么
  • 如何使用 HTML 5 实现类似 gmail 的文件上传/附件

    我记得一些支持 Ajax 之类的选项 无回发世界 文件上传 隐藏的 iframe 使用 flash 对象 尽管我仍然好奇为什么使用 SWF 以及它提供什么优势 然而 通过查看博客 HTML 5 似乎很有前途 我尝试了一些小示例 它确实有效
  • JSP/Servlet HTTP 404 错误处理

    我想在我的网络应用程序中处理 HTML 404 错误 我可以这样写
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 如何通过 jQuery 中的类获取特定 html 元素的innerHTML?

    我有这样的 HTML 代码 div class a html value 1 div div class a html value 2 div 我怎样才能访问html value 1 and html value 2使用jquery 分别地
  • 如何使整个跨度落入新行?

    这个片段显示了我想要的 http jsfiddle net 945Df 3 http jsfiddle net 945Df 3 div class sup strong a href Rosario Santa Fe Argentina a
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒

随机推荐

  • 编辑 UITextField 时如何关闭键盘

    我知道当我想关闭键盘时 我需要告诉我的 UITextField 退出第一响应者 但我不确定如何知道用户何时按下键盘上的 完成 键 有我可以留意的通知吗 我设置了代表UITextField to my ViewController class
  • 多维长度数组反射java

    如何在java上使用反射找到多维数组的长度 多维数组没有 长度 这个概念 它可能不是矩形的 我猜你说的是维数 您需要迭代地深入其中并进行计数 public int getDimensionCount Object array int cou
  • 在SSH.NET中执行长时间命令并在TextBox中连续显示结果

    有没有办法在 Windows 应用程序 如 PuTTY 中执行 Linux 命令并将结果显示在文本框中 例如我正在尝试执行以下命令 wget http centos webpanel com cwp latest sh cwp latest
  • Web API 中的异常处理

    在我的 Web API 项目中 我创建了子项目 类库 在其中处理实际的数据处理操作 我的后端数据库是DocumentDB 我的问题是如何告诉我的 Web API 操作方法我在类库的数据方法中可能遇到的任何错误 一旦我的 Web API 方法
  • 当应用程序处于后台时,NSTimer 的行为是什么?

    我知道当您后台应用程序时 计时器会停止运行 然而 当你从后台回来时 行为是什么 定时器是否保持原来的状态fireDate 我遇到了一个问题 即从后台返回并设置十分钟后触发的 NSTimer 时 有时我会立即让计时器在之前触发applicat
  • 在 RawContacts 中找不到 Facebook 联系人

    我正在尝试构建一个联系人管理应用程序 我的手机上有多个帐户的联系人 包括 Facebook 和 HTC Facebook 由于某种原因 我无法从RawContacts表的ContactsContract managedQuery Conta
  • 在 Google Chrome 中打印表格时,内容与标题重叠

    我在打印包含 HTML 代码的表格时使用 Google Chrome 遇到问题 我需要创建一个带有标题的文档 为了实现这一点 我使用带有 thead 元素的表格 因此浏览器将为打印文档的每个页面复制它 问题是当我在页面中有分页符时 内容与标
  • 获取Windows消息名称[重复]

    这个问题在这里已经有答案了 我有一个使用 DLL 扩展的 Windows 程序 我通过调试流对象包含调试代码 这些对象通过 OutputDebugString 进行打印 并且可以使用 DebugView 进行查看 接口的一部分是消息处理函数
  • 多相机图像拼接

    我一直在运行一个从多个摄像机拼接图像的项目 但我认为我遇到了瓶颈 我对这个问题有一些疑问 我想将来尝试将它们安装在车辆上 这意味着相机的相对位置和方向是固定的 另外 由于我使用多个相机并尝试使用同位图来缝合它们的图像 我会将相机放置得尽可能
  • Android底部导航查看项目文本颜色?

    我开始研究 Android 底部导航视图 但我面临一个问题 如果我向底部导航视图添加 5 个项目 则只有选定的项目显示项目文本 如果我添加 3 个项目 它就可以正常工作 任何人请告诉我如何显示所有 5 个项目的项目文本 先感谢您 菜单 xm
  • JsonMappingException 没有单字符串构造函数/工厂方法 Jackson

    我正在尝试使用 Spring 构建 Jackson 支持来解析从控制器中的 UI 发送的 JSON 数据 这是我的代码 final Map
  • 使用 Interface Builder 进行绑定(适用于 iPhone 应用程序)

    如何使用 Interface Builder 绑定 iPhone SDK 控件 例如 UISlider 与常规 Cocoa 应用程序不同 当使用 Interface Builder 打开 iPhone 应用程序 XIB 时 绑定选项卡似乎不
  • 使用 doxygen 的 \link 命令

    我有一个外部 HTML 文件 我想从我的 doxygen 相关页面 选项卡或左侧框架中链接 看来我需要使用 link命令 但我找不到如何使用它或在哪里使用它的好例子 我目前正在使用 doxywizard 生成 HTML So is link
  • jQuery 中的并行 JSONP 请求不会触发多个“回调事件”?

    当我执行多个 jsonp 请求时 我在 jQuery 中遇到问题 所有请求都使用相同的 jsonpCallback 函数 似乎只有其中之一才会触发回调函数 JSONP 请求是否会以某种方式相互覆盖 下面是向 github 发出 2 个 js
  • 自动实现属性的 C# 协变返回

    如你所知 C 9 0 Net 5 现在允许协变返回 我需要帮助将其应用于一组具有自动实现属性的类 我有两个代表金融银行账户和交易的抽象类 我将它们抽象化 因为我将从各种数据源中提取数据 虽然主要属性在所有源中都是通用的 但每个源可能有我想要
  • JCenter 弃用;对 Gradle 和 Android 的影响

    我应该担心吗JCenter被弃用 为什么我应该将我的库从JCenter到其他 Maven 存储库 我可以继续使用吗jcenter 在我的 Gradle 构建脚本中 Replace jcenter 有了这个 mavenCentral
  • 如何定义 shell 脚本变量使其具有脚本之外的作用域

    我正在使用 Ubuntu Natty 我有一个 shell 脚本 已保存到 etc init d qstart shell脚本包含以下内容 apt get y update apt get y upgrade apt get y insta
  • JQuery/Javascript 或其他方式静默打印仅一次

    任何人都知道如何在跨浏览器 API 或 jQuery 或 javascript 等库中打印文件而不显示打印预览 打印内容而无需打印预览 仅静音打印 打印一次 当打印软拷贝时 软拷贝就会过期 因为出于安全原因 我想避免用户重新打印不止一份软拷
  • 测试框架表示实体没有为内置实体定义键

    Castle Proxies IdentityUserLogin EntityType IdentityUserLogin has no key defined Define the key for this EntityType 我正在尝
  • 如何在 html5 canvas 中对齐文本?

    如何在 html5 画布中对齐文本以 对齐 在下面的代码中 文本可以左 右 中心对齐 我需要设置align justify 请建议如何做到这一点 HTML