一个汉字笔画库 hanzi-writer 的小应用

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个汉字笔画库 hanzi-writer 的小应用相关的知识,希望对你有一定的参考价值。

背景

最近在教小朋友写字,令人惆怅的是我竟然弄不准有些常见汉字的笔画。百度搜了下,这么多年自己写“毕”的笔画竟然是错的,提笔先写的是竖勾,而正确的第一笔是一横,真有误导下一代的风险啊。

网上能找到有该功能的 APP ,但下载使用过程中看到广告超多,体验很不好。

今天在阮一峰先生每周分享的素材中看到了一个汉字笔画的项目 hanzi-writer,正好可以解决笔画查找的问题,所以玩了下这个项目,顺便写了一个小应用,把它发送到手机桌面上,成了小朋友日常爱玩的识字小游戏了。

项目地址

hanzi-writer 项目地址为:https://chanind.github.io/hanzi-writer/docs.html
看了下文档,使用很简单。

简单示例

依据官网的介绍, js 库还是很好用的,引入一个 js 就可以了。
我写了一个接受文本输入框的输入、并显示对应汉字笔画的 demo ,代码如下:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Generator" content="EditPlus®">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <title>展示汉字笔画的小页面</title>
    <script src="https://cdn.jsdelivr.net/npm/hanzi-writer@1.3/dist/hanzi-writer.min.js"></script>

    <script type="text/javascript">
        var writer = null;
        function show() 
            var x = document.getElementById("name");
            if(character.length>1)
               character = character.substring(0,1);
			

			//判断是否是汉字
			var re=/[\\u4E00-\\u9FA5]/;
			if (!re.test(character))
				$("#msg").text("请输入一个汉字!");
				return false ;
			
            //首次渲染,创建汉字
            if(writer == null)
                writer = HanziWriter.create('grid-background-target', x.value, 
                    width: 200,
                    height: 200,
                    padding: 5,
                    showOutline: true
                );
            else//非首次,则修改为新的汉字
                writer.setCharacter(x.value);
            
           
           //动画展示汉字笔画
            writer.animateCharacter();
        
    </script>
</head>
<body>

<p>文本框内输入一个汉字,并点击“笔画按钮”</p>
<input type="text" id="name"/>
<button id="animate-button" onclick="show();">Animate</button>
<span id="msg" style="color:red;">仅支持一个汉字</span>
<br/>
<br/>
<!--汉字所在的田字格背景图-->
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" id="grid-background-target">
    <line x1="0" y1="0" x2="200" y2="0" stroke="#DDD"/>
    <line x1="0" y1="0" x2="0" y2="200" stroke="#DDD"/>
    <line x1="0" y1="200" x2="200" y2="200" stroke="#DDD"/>
    <line x1="200" y1="0" x2="200" y2="200" stroke="#DDD"/>

    <line x1="0" y1="100" x2="200" y2="100" stroke="#DDD"/>
    <line x1="100" y1="0" x2="100" y2="200" stroke="#DDD"/>
    <line x1="0" y1="0" x2="200" y2="200" stroke="#DDD"/>
    <line x1="0" y1="200" x2="200" y2="0" stroke="#DDD"/>
</svg>

</body>
</html>

关键在于 setCharacter 方法,它用于二次渲染时重新渲染汉字区域,如果对已经渲染过的区域再次 create 时会出现汉字叠加的现象。

运行结果

汉字笔画演示地址,点击输入“毕”字,查看笔画结果:

后记

试了下这个汉字库,的确不错。突然发现有些字写了十几年竟然是错误的笔画,
比如“毕”、“爽”、“匝”。看来汉字笔画学习还是应该从娃娃抓起啊。

以上是关于一个汉字笔画库 hanzi-writer 的小应用的主要内容,如果未能解决你的问题,请参考以下文章

HTML5取汉字笔画数

C#中如何获取汉字的笔画数和汉字的拼音

当铺密码

SQL Server 计算汉字笔画函数

汉语-汉字:壎/埙

turtle库应用实例3-叠加等边三角形绘制(一笔画)