详解canvas在圆弧周围绘制文本的两种写法


Posted in HTML / CSS onMay 22, 2018

教程是直接按弧度进行编写的

自己又试着用角度重新编写了一份,有些差别,总结起来还是用弧度比较方便,当然两种哪种理解的容易可以自行斟酌

写代码有时候不一定要按照教程一板一眼的写,最佳实践固然是好,但是自己尝试些别的也许有些别的收获不是么~

效果如下图

详解canvas在圆弧周围绘制文本的两种写法

第一种是直接用弧度的

var canvas=document.getElementById("canvas")
    var context=canvas.getContext("2d")

    var TEXT_FILL_STYLE="rgba(100,130,240,0.5)"
    var TEXT_STROKE_STYLE="rgba(200,0,0,0.7)"
    var TEXT_SIZE=64;
    circle={
        x:canvas.width/2,
        y:canvas.height/2,
        radius:200
    }
    function drawCircularText(string,startAngle,endAngle){
      var radius=circle.radius //圆的半径
      var angleDecrement=(startAngle-endAngle)/(string.length-1)//每个字母占的弧度
      var angle=parseFloat(startAngle) //转一下数字
      var index=0;
      var character;

      context.save()
      context.fillStyle=TEXT_FILL_STYLE;
      context.strokeStyle=TEXT_STROKE_STYLE;
      context.font=TEXT_SIZE+"px Lucida Sans"

      while(index<string.length){
        character=string.charAt(index)
        context.save()
        context.beginPath()
        context.translate(circle.x+Math.cos(angle)*radius,circle.y-Math.sin(angle)*radius)
        context.rotate(Math.PI/2-angle)   //Math.PI/2为旋转90度  Math.PI/180*X为旋转多少度
        context.fillText(character,0,0)
        context.strokeText(character,0,0)
        angle-=angleDecrement
        index++
        context.restore()

      }
      context.restore()
    }
    context.textAlign="center"
    context.textBaseLine="middle"
   drawCircularText("clockwise around the circle",Math.PI*2,Math.PI/8)  //第三个参数表示文字首位是否相接 差了多少弧度

第二种是用角度带入的 请注意drawCircularText的第二个参数和第三个参数的不同

var canvas=document.getElementById("canvas")
    var context=canvas.getContext("2d")

    var TEXT_FILL_STYLE="rgba(100,130,240,0.5)"
    var TEXT_STROKE_STYLE="rgba(200,0,0,0.7)"
    var TEXT_SIZE=64;
    circle={
        x:canvas.width/2,
        y:canvas.height/2,
        radius:200
    }
    function drawCircularText(string,startAngle,endAngle){
      var radius=circle.radius //圆的半径
      var angleDecrement=(startAngle-endAngle)/(string.length-1)//每个字母占的弧度
      var angle=startAngle //
      
      var index=0;
      var character;

      context.save()
      context.fillStyle=TEXT_FILL_STYLE;
      context.strokeStyle=TEXT_STROKE_STYLE;
      context.font=TEXT_SIZE+"px Lucida Sans"

      while(index<string.length){
        character=string.charAt(index)
        context.save()
        context.beginPath()
        context.translate(circle.x+Math.cos((Math.PI/180)*angle)*radius,circle.y-Math.sin((Math.PI/180)*angle)*radius)
        context.rotate((Math.PI/2)-(Math.PI/180)*angle)   //Math.PI/2为旋转90度  Math.PI/180*X为旋转多少度
        context.fillText(character,0,0)
        context.strokeText(character,0,0)
        angle-=angleDecrement
        index++
        context.restore()

      }
      context.restore()
    }
    context.textAlign="center"
    context.textBaseLine="middle"
   drawCircularText("clockwise around the circle",360,10)  //第三个参数表示文字首位是否相接 差了多少弧度

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
详解CSS3 弹性布局快速入门
Jun 06 HTML / CSS
CSS3制作缩略图的详细过程
Jul 08 HTML / CSS
基于ccs3的timeline时间线实现方法
Apr 30 HTML / CSS
详解css3 flex弹性盒自动铺满写法
Sep 17 HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
Feb 24 HTML / CSS
浅谈HTML5新增及移除的元素
Jun 27 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
Jan 27 HTML / CSS
HTML5和CSS3实例教程总结(推荐)
Jul 18 HTML / CSS
详解前端HTML5几种存储方式的总结
Dec 27 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
Jul 11 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
Dec 04 HTML / CSS
Web前端:CSS最强总结 附详细代码
Mar 31 HTML / CSS
HTML5 device access 设备访问详解
May 24 #HTML / CSS
html5-canvas中使用clip抠出一个区域的示例代码
May 25 #HTML / CSS
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
May 28 #HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
Jun 03 #HTML / CSS
html5触摸事件判断滑动方向的实现
Jun 05 #HTML / CSS
使用Canvas操作像素的方法
Jun 14 #HTML / CSS
Html5移动端获奖无缝滚动动画实现示例
Jun 25 #HTML / CSS
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
python实现的防DDoS脚本
2011/02/08 Python
python条件和循环的使用方法
2013/11/01 Python
Python中操作符重载用法分析
2016/04/29 Python
python生成excel的实例代码
2017/11/08 Python
Python Socket使用实例
2017/12/18 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
网络事业创业计划书范文
2014/01/09 职场文书
房产继承公证书
2014/04/09 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
毕业生见习报告总结
2014/11/08 职场文书
青岛海底世界导游词
2015/02/11 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
Python实现byte转integer
2021/06/03 Python
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL