【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍

  • 利用了 cnchar 库来进行汉字相关的信息查询,并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息
  • 用户输入一个汉字后,点击查询按钮,页面会展示该汉字的拼音、笔画数、笔画顺序,并绘制相应的笔画动画和测试图案

cnchar 库

cnchar 是一个用于处理汉字的 JavaScript 库,主要功能包括拼音查询、笔画数查询、笔画顺序、汉字书写动画等。这个库特别适用于中文学习和汉字处理,能够帮助开发者和学习者更好地理解和掌握汉字

主要功能:

  • 拼音查询: cnchar 可以为输入的汉字提供拼音查询,包括带音调和不带音调的拼音。
  • 笔画数查询: 该库可以返回汉字的笔画数,这对学习书写汉字的学生非常有帮助。
  • 笔画顺序: cnchar 可以展示汉字的正确笔画顺序,有助于用户学习如何正确书写汉字。它还可以提供笔画的图形展示(通过动画或普通笔画顺序的绘制)。
  • 汉字书写动画: 该库支持通过动画形式展示汉字的笔画顺序,让用户能够直观地理解每个字的书写流程。这对汉字初学者尤其有用。
  • 汉字绘制功能: 通过 cnchar.draw() 方法,可以绘制汉字的笔画,不仅可以绘制笔画顺序,还可以绘制练习用的汉字图案。
  • 汉字测试: cnchar 还提供了练习功能,用户可以通过绘制和测试图形来练习书写汉字。

使用方式:

  1. 网页调用:
    <script src="https://cdn.jsdelivr.net/npm/cnchar"></script>
  2. npm 导入:
    npm install cnchar
    import cnchar from 'cnchar';

HTML代码

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
 
<head>
    <meta charset="UTF-8">
    <title>汉字查询工具</title>
    <style>
        .result {
            margin-top: 20px;
        }
    </style>
 
    <script src="js/cnchar.min.js"></script>
    <script src="js/cnchar.order.min.js"></script>
    <script src="js/cnchar.draw.min.js"></script>
 
</head>
 
<body>
    <h1>汉字查询工具</h1>
    <input type="text" id="chinese-input" placeholder="请输入汉字" oninput="handleInput()">
    <button id="query-btn">查询</button>
 
    <div class="result" id="pinyin-result">拼音:</div>
    <div class="result" id="stroke-count-result">笔画数:</div>
    <div class="result" id="stroke-order-result">笔画顺序:</div>
    <div class="result">笔画:</div>
    <div id='drawStroke'></div>
    <div class="result">笔画-动画:</div>
    <div id='drawAnimation'></div>
    <div class="result">笔画-正常:</div>
    <div id='drawNormal'></div>
    <div class="result">练一练:</div>
    <div id='drawTest'></div>
</body>
</html>

JavaScript 代码

【引入库】

  1. cnchar.min.js:这是 cnchar 的核心库,提供了查询汉字拼音、笔画数等功能
  2. cnchar.order.min.js:用于获取汉字的笔画顺序
  3. cnchar.draw.min.js:提供绘制汉字笔顺动画和测试图案的功能。
  1. 查询汉字信息
  • spell():获取输入汉字的拼音
  • stroke():获取输入汉字的笔画数
  • cnchar.stroke():获取输入汉字的笔画顺序,返回一个字符串,表示汉字的笔画顺序
javascript 复制代码
function queryChineseInfo(chineseChar) {
    const pinyin = chineseChar.spell(); // 获取拼音
    const strokeCount = chineseChar.stroke(); // 获取笔画数
    const strokeOrder = cnchar.stroke(chineseChar, 'order', 'shape'); // 获取笔画顺序
}
  1. 更新页面的查询结果

将获取到的拼音、笔画数和笔画顺序显示在页面上相应的 div 元素中

javascript 复制代码
document.getElementById('pinyin-result').innerText = '拼音: ' + pinyin;
document.getElementById('stroke-count-result').innerText = '笔画数: ' + strokeCount;
document.getElementById('stroke-order-result').innerText = '笔画顺序: ' + strokeOrder;
  1. 绘制汉字的笔顺动画
  • cnchar.draw():用于绘制汉字的笔画
  • type: cnchar.draw.TYPE.STROKE:绘制笔画
  • type: cnchar.draw.TYPE.ANIMATION:绘制带动画效果的笔画
  • loopAnimate: true:设置动画循环播放
javascript 复制代码
cnchar.draw(chineseChar, {
    el: '#drawStroke',
    type: cnchar.draw.TYPE.STROKE,
    animation: {
        loopAnimate: true
    }
});
  1. 清除之前的查询结果
javascript 复制代码
function handleInput() {
    document.getElementById('pinyin-result').innerText = '拼音:';
    document.getElementById('stroke-count-result').innerText = '笔画数:';
    document.getElementById('stroke-order-result').innerText = '笔画顺序:';
}
  1. 按钮点击事件
javascript 复制代码
document.getElementById('query-btn').addEventListener('click', function () {
    const inputField = document.getElementById('chinese-input');
    const chineseChar = inputField.value;
    if (chineseChar) {
        queryChineseInfo(chineseChar);
    } else {
        alert('请输入汉字进行查询');
    }
});

完整代码

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
 
<head>
    <meta charset="UTF-8">
    <title>汉字查询工具</title>
    <style>
        .result {
            margin-top: 20px;
        }
    </style>
 
    <script src="js/cnchar.min.js"></script>
    <script src="js/cnchar.order.min.js"></script>
    <script src="js/cnchar.draw.min.js"></script>
 
</head>
 
<body>
    <h1>汉字查询工具</h1>
    <input type="text" id="chinese-input" placeholder="请输入汉字" oninput="handleInput()">
    <button id="query-btn">查询</button>
 
    <div class="result" id="pinyin-result">拼音:</div>
    <div class="result" id="stroke-count-result">笔画数:</div>
    <div class="result" id="stroke-order-result">笔画顺序:</div>
    <div class="result">笔画:</div>
    <div id='drawStroke'></div>
    <div class="result">笔画-动画:</div>
    <div id='drawAnimation'></div>
    <div class="result">笔画-正常:</div>
    <div id='drawNormal'></div>
    <div class="result">练一练:</div>
    <div id='drawTest'></div>
    <script>
        // 使用 cnchar 库查询汉字信息
        function queryChineseInfo(chineseChar) {
            const pinyin = chineseChar.spell(); // 获取拼音
            const strokeCount = chineseChar.stroke(); // 获取笔画数
            const strokeOrder = cnchar.stroke(chineseChar, 'order', 'shape'); // 获取笔画顺序
            
            document.getElementById('pinyin-result').innerText = '拼音: ' + pinyin;
            document.getElementById('stroke-count-result').innerText = '笔画数: ' + strokeCount;
            document.getElementById('stroke-order-result').innerText = '笔画顺序: ' + strokeOrder;
            // 绘制汉字的笔顺动画
            cnchar.draw(chineseChar, {
                el: '#drawStroke',
                type: cnchar.draw.TYPE.STROKE,
                animation: {
                    loopAnimate: true
                }
            });
            // 绘制汉字的笔顺动画
            cnchar.draw(chineseChar, {
                el: '#drawAnimation',
                type: cnchar.draw.TYPE.ANIMATION,
                animation: {
                    loopAnimate: true
                }
            });
            // 绘制汉字的笔顺正常
            cnchar.draw(chineseChar, {
                el: '#drawNormal'
            })
            // 绘制汉字的测试图案
            cnchar.draw(chineseChar, {
                el: '#drawTest',
                type: cnchar.draw.TYPE.TEST
            });
 
        }
 
        // 监听查询按钮的点击事件
        document.getElementById('query-btn').addEventListener('click', function () {
            const inputField = document.getElementById('chinese-input');
            const chineseChar = inputField.value;
            if (chineseChar) {
                queryChineseInfo(chineseChar);
            } else {
                alert('请输入汉字进行查询');
            }
        });
 
        // 监听输入框的输入事件,用于清除之前的查询结果
        function handleInput() {
            document.getElementById('pinyin-result').innerText = '拼音:';
            document.getElementById('stroke-count-result').innerText = '笔画数:';
            document.getElementById('stroke-order-result').innerText = '笔画顺序:';
        }
    </script>
</body>
 
</html>
相关推荐
我命由我1234527 分钟前
React Router 6 - 嵌套路由、路由传递参数
前端·javascript·react.js·前端框架·html·ecmascript·js
肖。35487870943 小时前
[html-13]js检测文本中是否只有一个等号,换个思路。
html
ZhengEnCi4 小时前
M1-如何转换为HTML
python·html
进击的雷神9 小时前
攻克JSON嵌套HTML的双重解析难题:基于多层数据提取的精准爬虫设计
爬虫·html·json·spiderflow
LJianK19 小时前
vxe-table 的 checkbox复选框
前端·html
圣光SG11 小时前
奶茶店网页(纯HTML和CSS)
前端·css·html
予你@。12 小时前
vue 使用html2canvas + jsPDF 将html导出为pdf (延伸问题)
vue.js·pdf·html
子比比12 小时前
域名解封 不成功不收费
经验分享·微信·html·程序员创富
reasonsummer12 小时前
【白板类-02-01】20260326找影子01(html+希沃白板)
css·html·css3
bug_rabbit13 小时前
pytest-html 中文乱码问题终极解决方案(Windows版)
windows·html·pytest