详解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的一个简单导航栏实现
Aug 03 HTML / CSS
CSS3 @media的基本用法总结
Sep 10 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
Apr 28 HTML / CSS
css3实现二维码扫描特效的示例
Oct 29 HTML / CSS
html5 canvas实现跟随鼠标旋转的箭头
Mar 11 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
Jul 09 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
Jul 11 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
Nov 18 HTML / CSS
HTML5标签大全
Nov 23 HTML / CSS
iframe在移动端的缩放的示例代码
Oct 12 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
Nov 18 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
Jul 10 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
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
关于JS管理作用域的问题
2013/04/10 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
python检测是文件还是目录的方法
2015/07/03 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
应届生人事助理求职信
2013/11/09 职场文书
《乌塔》教学反思
2014/02/17 职场文书
社区健康教育实施方案
2014/03/18 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
体育教师个人总结
2015/02/09 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技