找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 文档 工具 设计
查看: 25|回复: 0

钟表读数练习题生成器单文件 HTML 版可打印

[复制链接]

2万

主题

1331

回帖

2万

积分

超级版主

教育辅助界扛把子

附加身份标识
精华
1
热心
7
听众
1
威望
28
贡献
14972
违规
0
书币
50631
注册时间
2020-4-8

论坛元老灌水之王

发表于 2025-1-14 13:41 | 显示全部楼层 |阅读模式
描述:供小学生学习钟表表盘认读练习的HTML版程序源码,打开或刷新即可生成 50 个随机表盘,供练习,可以直接在电脑上使用或打印为纸质版练习



打开记事本,将代码复制粘贴进去,另存为"练习.html",注意扩展名必须为html或htm,不能是txt.用浏览器打开保存的网页即可



[AppleScript] 纯文本查看 复制代码
<!DOCTYPE html>
<html lang="zh_CN">

<head>
    <meta charset="UTF-8">
    <title>钟表读数练习</title>
    <style>
        svg {
            width: 200px;
            height: 200px;
            border: 1px solid #ccc;
        }
    </style>
</head>

<body>

    <script>
        function initClocks(num){
                // 创建一个DOM解析器
                const parser = new DOMParser();

                for(let id=0;id<num;id++){
                        const svgTemplate = `<svg id="clock${id}" viewBox="0 0 100 100"></svg>`;
                        // 将模板字符串解析为DOM文档
                        const svgDoc = parser.parseFromString(svgTemplate, 'text/html');
                        // 获取解析后的SVG元素
                        const svgElement = svgDoc.body.firstChild;
                        // 将SVG元素添加到当前HTML文档的body元素中
                        document.body.appendChild(svgElement);
                }
        }

        function drawClock(clockid, hour, minute) {
            // 获取SVG元素
            const svg = document.getElementById(clockid);

            // 清空之前可能存在的内容
            svg.innerHTML = '';
                        const r_in = 35;
                        const r_out = 50;

            // 绘制表盘外圆
            const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
            circle.setAttribute('cx', r_out);
            circle.setAttribute('cy', r_out);
            circle.setAttribute('r', r_out-10);
            circle.setAttribute('stroke', 'black');
            circle.setAttribute('fill', 'none');
            svg.appendChild(circle);

            // 绘制刻度
            for (let i = 0; i < 60; i++) {
                const angle = (i / 60) * 2 * Math.PI;
                const x = r_out + r_in * Math.sin(angle);
                const y = r_out - r_in * Math.cos(angle);
                                const x_t = r_out + (r_in-5) * Math.sin(angle);
                const y_t = r_out - (r_in-5) * Math.cos(angle);
                const innerX = r_out + (r_in+5) * Math.sin(angle);
                const innerY = r_out - (r_in+5) * Math.cos(angle);
                const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');

                                // 根据是否是5分钟刻度来设置不同的样式
                if (i % 5 === 0) {
                    line.setAttribute('stroke-width', '1');
                } else {
                    line.setAttribute('stroke-width', '0.2');
                }
                line.setAttribute('x1', x);
                line.setAttribute('y1', y);
                line.setAttribute('x2', innerX);
                line.setAttribute('y2', innerY);
                line.setAttribute('stroke', 'black');
                svg.appendChild(line);

                // 在12、3、6、9点位置添加数字标注
                if (i === 0 || i === 15 || i === 30 || i === 45) {
                    const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
                    text.setAttribute('x', x_t);
                    text.setAttribute('y', y_t);
                    text.setAttribute('text-anchor','middle');
                    text.setAttribute('dominant-baseline','middle');
                    text.style.fontSize = '9px';
                    text.textContent = i === 0? 12 : (i/5);
                    svg.appendChild(text);
                }
            }

            // 计算时针角度
            const hourAngle = ((hour % 12) + minute / 60) * (2 * Math.PI / 12);
            const hourX = r_out + 20 * Math.sin(hourAngle);
            const hourY = r_out - 20 * Math.cos(hourAngle);
            const hourHand = document.createElementNS('http://www.w3.org/2000/svg', 'line');
            hourHand.setAttribute('x1', r_out);
            hourHand.setAttribute('y1', r_out);
            hourHand.setAttribute('x2', hourX);
            hourHand.setAttribute('y2', hourY);
            hourHand.setAttribute('stroke', 'black');
            hourHand.setAttribute('stroke-width', '4');
            svg.appendChild(hourHand);

            // 计算分针角度
            const minuteAngle = (minute / 60) * 2 * Math.PI;
            const minuteX = r_out + 25 * Math.sin(minuteAngle);
            const minuteY = r_out - 25 * Math.cos(minuteAngle);
            const minuteHand = document.createElementNS('http://www.w3.org/2000/svg', 'line');
            minuteHand.setAttribute('x1', r_out);
            minuteHand.setAttribute('y1', r_out);
            minuteHand.setAttribute('x2', minuteX);
            minuteHand.setAttribute('y2', minuteY);
            minuteHand.setAttribute('stroke', 'black');
            minuteHand.setAttribute('stroke-width', '2');
            svg.appendChild(minuteHand);
        }

                let num=50;
                initClocks(num);
                function genInt(min, max){
                        const floatRandom = Math.random();
                        const difference = max - min;

                        // random between 0 and the difference
                        const random = Math.round(difference * floatRandom);

                        const randomWithinRange = random + min;

                        return Math.round(randomWithinRange);
                }
        for(let i=0;i<num;i++){
                        drawClock("clock"+i, genInt(0,12), genInt(0,59));
                }
    </script>
</body>

</html>


Great works are not done by strength, but by persistence! 历尽艰辛的飞升者,成了围剿孙悟空的十万天兵之一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@cdsy.xyz

QQ|Archiver|手机版|小黑屋|城东书院 ( 湘ICP备19021508号-1|湘公网安备 43102202000103号 )

GMT+8, 2025-1-18 13:06 , Processed in 0.042808 second(s), 28 queries .

Powered by Discuz! CDSY.XYZ

Copyright © 2019-2023, Tencent Cloud.

快速回复 返回顶部 返回列表