花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 64|回复: 34

canvas画布:绘制旋转的五角星

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2024-5-9 12:22 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    效果

    评分

    参与人数 2威望 +80 金钱 +160 经验 +80 收起 理由
    南无月 + 30 + 60 + 30 很给力!
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 12:23 | 显示全部楼层

    代码

    <canvas id="canv" width="400" height="400"></canvas> <script>   var mov = true, raf = null; var ctx = canv.getContext('2d');   class fiveStar {     constructor(cx,cy,r,fillcolor='yellow',strokecolor='red') {         this.cx = cx;         this.cy = cy;         this.r = r;         this.points = [];         this.keys = [0,2,4,1,3];         this.fillcolor = fillcolor;         this.strokecolor = strokecolor;         this.deg = 0;     };     create() {         for(let i = 0; i < 5; i ++) {             var x = this.cx + this.r * Math.cos((72 * i - this.deg) * Math.PI/180),                 y = this.cy + this.r * Math.sin((72 * i - this.deg) * Math.PI/180);             this.points.push({x: x, y: y});         }     };     draw() {         ctx.beginPath();         this.points.forEach((_,key) => ctx.lineTo(this.points[this.keys[key]].x, this.points[this.keys[key]].y));         ctx.closePath();         ctx.lineWidth = 3;         ctx.strokeStyle = this.strokecolor;         ctx.fillStyle = this.fillcolor;         ctx.stroke();         ctx.fill();     };     rot() {         this.deg = (this.deg + 0.5) % 360;         ctx.save();         ctx.translate(this.cx, this.cy);         ctx.rotate(this.deg * Math.PI / 180);         ctx.translate(-this.cx, -this.cy);         star.draw();         ctx.restore();     }; };   var star = new fiveStar(200,200, 180); star.create();   var render = () => {     if (mov) raf = requestAnimationFrame(render);         else cancelAnimationFrame(raf);     ctx.clearRect(0, 0, canv.width, canv.height);     star.rot(); };   render();   canv.onclick = () => {     mov = !mov;     render(); };   </script>
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 12:23 | 显示全部楼层
    本帖最后由 马黑黑 于 2024-5-9 12:57 编辑

    本次绘制正五角星的方法,请参考:canvas画布绘制正五角星

    以下是对二楼代码的简单解释——

    第 5 行

        var mov = true, raf = null;

    mov 变量是控制动画的布尔开关,raf 变量是 requestAnimationFrame API 执行返回值。当 mov 为真,requestAnimationFrame 将运行从而产生动画,否则,当 mov 为假,取消 raf。

    第 8~45 行

    首先声明一个 fiveStar 类,代表五角星。其中,通过构造函数 constructor() 构造五角星的一些常规属性:圆心坐标(cx, cy)、半径(r)、描边颜色和填充颜色(strokecolor、fillcolor)、顶点坐标值数组(points)、顶点连接序列(keys)、变化的角度变量(deg)。其中,cx、cy、r 为必选,即在实例化五角星时必须要给出的参数,其余属性为可选,即在实例化应用时可以配置或不配置这些参数。

    接着给 fiveStar 这个类定义一些方法:

    一是 create() :代码在 19~25 行,其作用是计算五角星的顶点坐标值并存储起来;

    二是 draw() :代码在 26~35 行,功能是绘制五角星;

    三是 rot() :代码在 36~44 行,这个方法在 360 度范围内变更 fiveStar 的 deg 变量(变更系数 0.5),更改画布坐标系,然后调用 draw 方法绘制五角星。

    第 47~48 行

    实例化 fiveStar 类,圆心坐标为(200,200)、半径为(180);调用类的方法 create() 生成一个五角星。

    第 50~55 行

    这是渲染函数:依据 mov 变量决定运行还是注销 requestAnimationFrame API,每次清空画布(如果不清空在本例效果也挺好的),然后调用类的 rot() 方法。

    第 57 行  首次启动动画

    render();

    第 59~62 行

    画布点击事件:每次点击 mov 布尔变量值互反,并运行一下 render() 渲染函数,函数会根据 mov 的变量值决定是否渲染动画。

    评分

    参与人数 2威望 +80 金钱 +160 经验 +80 收起 理由
    南无月 + 30 + 60 + 30 很给力!
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 13:07 | 显示全部楼层
    当然,如果只是需要一个简单旋转的五角星功能,一楼的方法就显得劳民伤财了。我们可以只画一个静态的五角星,然后用 @keyframes 来驱动五角星的旋转。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-9 16:49 | 显示全部楼层
    不停重画五角星,肉眼看上去就是在转动了呢。这个厉害了
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-9 16:52 | 显示全部楼层
    这个把变更的角度调大,转动的速度就可以变快了吧。
    这个转动还能点击暂停呢。学习了,黑黑辛苦
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 17:10 | 显示全部楼层
    红影 发表于 2024-5-9 16:52
    这个把变更的角度调大,转动的速度就可以变快了吧。
    这个转动还能点击暂停呢。学习了,黑黑辛苦

    手掌更辛苦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 17:35 | 显示全部楼层
    马黑黑 发表于 2024-5-9 12:23
    本次绘制正五角星的方法,请参考:canvas画布绘制正五角星

    以下是对二楼代码的简单解释——

    好详细的解说,慢慢看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 17:36 | 显示全部楼层
    马黑黑 发表于 2024-5-9 13:07
    当然,如果只是需要一个简单旋转的五角星功能,一楼的方法就显得劳民伤财了。我们可以只画一个静态的五角星 ...

    代码旋转的更加高级
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 18:28 | 显示全部楼层
    南无月 发表于 2024-5-9 17:36
    代码旋转的更加高级

    都是代码的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 18:29 | 显示全部楼层
    南无月 发表于 2024-5-9 17:35
    好详细的解说,慢慢看

    看懂了木有
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 19:53 | 显示全部楼层

    对噢。。
    那叫做线条跑步旋转和驱动图片旋转。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 19:54 | 显示全部楼层

    烧脑得很。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 19:55 | 显示全部楼层
    南无月 发表于 2024-5-9 19:53
    对噢。。
    那叫做线条跑步旋转和驱动图片旋转。。

    哪有这种说法的?

    区别在于:CSS更简单地实现了简单的动画,JS更复杂地实现了复杂的动画
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 19:58 | 显示全部楼层

    按理,理解了时钟的实现原理,理解这个是三岁小盆友都可以的事情
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 20:01 | 显示全部楼层
    马黑黑 发表于 2024-5-9 19:55
    哪有这种说法的?

    区别在于:CSS更简单地实现了简单的动画,JS更复杂地实现了复杂的动画

    我说的形象,你说的专业。角度不同
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 20:03 | 显示全部楼层
    马黑黑 发表于 2024-5-9 19:58
    按理,理解了时钟的实现原理,理解这个是三岁小盆友都可以的事情

    主要是这个三岁小盆友睡了十个小时有点少~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 20:07 | 显示全部楼层
    南无月 发表于 2024-5-9 20:03
    主要是这个三岁小盆友睡了十个小时有点少~~

    嗯嗯,一般儿童睡眠的时间会在12个小时以上
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-9 20:14 | 显示全部楼层
    马黑黑 发表于 2024-5-9 20:07
    嗯嗯,一般儿童睡眠的时间会在12个小时以上

    这几天可烧脑了,所以动脑筋的事儿都变成灌水
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-9 20:20 | 显示全部楼层
    南无月 发表于 2024-5-9 20:14
    这几天可烧脑了,所以动脑筋的事儿都变成灌水

    也挺好
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-16 02:06 , Processed in 0.182526 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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