热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

html5使用canvas绘制n角星

效果图:动态变换:五角星分析函数调用:drawNStar(ctx,{num:26,多少角星

效果图:

image

动态变换:

image

五角星分析

image

函数调用:

drawNStar(ctx, {
            "num": 26,//多少角星
            "R": 150,//中心到顶点距离
            "r": 50,//中心到凹点距离
            "x": 50,//左上角X坐标
            "y": 50,//左上角Y坐标
            "rot": 45// 旋转角度
        }, {
            "fs": "#F5E322",//填充色
            "lj": "round",//接头圆滑
            "lw": 2,//线宽
            "b": true,//有边线
            "f": true,//有填充
        });

函数体:

        /** * 绘制n角星 * @param ctx * @param num 星星数量 * @param R 中心到顶点距离 * @param r 中心到凹点距离 * @param x 左上角X坐标Y * @param y 左上角坐标 * @param rot 旋转角度 * @param configJson 配置信息 */
        function _drawNStar(ctx, num, R, r, x, y, rot, configJson) {
            b2c(ctx, function () {
                var border = configJson["lw"];
                for (var i = 0; i var perDeg = 360 / num;
                    var degA = perDeg / 2 / 2;
                    var degB = 360 / (num - 1) / 2 - degA / 2 + degA;
                    ctx.lineTo(Math.cos((degA + perDeg * i - rot) / 180 * Math.PI) * R + x + border + R * Math.cos(degA / 180 * Math.PI),
                        -Math.sin((degA + perDeg * i - rot) / 180 * Math.PI) * R + y + border + R);
                    ctx.lineTo(Math.cos((degB + perDeg * i - rot) / 180 * Math.PI) * r + x + border + R * Math.cos(degA / 180 * Math.PI),
                        -Math.sin((degB + perDeg * i - rot) / 180 * Math.PI) * r + y + border + R);
                }

            }, configJson);
        },
        //使用json格式传参
       function drawNStar(ctx, infoJson, configJson) {
            var num, R, r, x, y, rot;
            num = infoJson["num"];
            R = infoJson["R"];
            r = infoJson["r"];
            x = infoJson["x"];
            y = infoJson["y"];
            rot = infoJson["rot"];
            _drawNStar(ctx, num, R, r, x, y, rot, configJson)
        }

                /** * beginPath到closePath * @param ctx 上下文 * @param callback 回调函数 * @param configJson 配置信息 */
        function b2c(ctx, callback, configJson) {
            ctx.beginPath();
            if (callback && typeof(callback) === "function") {
                callback();
            }
            ctx.closePath();//会封闭图形

            ctx.lineWidth = configJson["lw"];
            ctx.strokeStyle = configJson["ss"];
            ctx.fillStyle = configJson["fs"];
            ctx.lineJoin = configJson["lj"];
            ctx.lineCap = configJson["lc"];

            if (configJson["f"]) {
                ctx.fill();
            }
            if (configJson["b"]) {
                ctx.stroke();//绘制
            }
        }

动态变换角数

        var count = 3;
        var timer = null;
        timer = setInterval(function () {
            ctx.fillStyle = "#fff";
            ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
            myCanvas.drawNStar(ctx, {
                "num": count,//多少角星f
                "R": 100,//中心到顶点距离
                "r": 50,//中心到凹点距离
                "x": 50,//左上角X坐标
                "y": 50,//左上角Y坐标
                "rot": 45// 旋转角度
            }, {
                "fs": "#FCFA31",//填充色
                "lj": "round",//接头圆滑
                "lw": 2,//线宽
                // "b": true,//有边线
                "f": true,//有填充
            });
            count++;
            console.log("{count}--{" + count + "}");
            if (count > 150) {
                clearInterval(timer);
            }
        }, 50);

推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 利用HTML5 Canvas构建商场监控系统的实践案例
    本文详细探讨了如何运用HTML5的Canvas技术来构建商场监控系统,旨在为相关领域的开发者提供实用的技术指导和灵感。文章不仅提供了具体的代码示例,还深入分析了实现过程中可能遇到的问题及解决方案。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 探讨在循环中调用$.post()时,回调函数为何会在循环结束后才开始执行,并提供解决方案和优化建议。 ... [详细]
  • 本文探讨了在 Vue 2.0 项目中使用 Axios 获取数据时可能出现的错误,并提供详细的解决方案和最佳实践。 ... [详细]
  • 探讨如何正确使用 Fetch API 进行参数传递,分析不同写法的差异及解决方案。 ... [详细]
  • 本文介绍如何在PostgreSQL数据库中正确插入和处理JSON数据类型,确保数据完整性和避免常见错误。 ... [详细]
author-avatar
手机用户2502929925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有