1

2

3

4

5

test

6

7 body{

8 display:flex;

9 flex-flow:column wrap;

10 justify-content:center;

11 align-items:center;

12 }

13 #c{

14 margin-top:20px;

15 background:#435ae4;

16 }

17

18

19

20 当前浏览器不支持canvas 请升级!

21

22

23 canvas=document.getElementById("canvas");24 ctx=canvas.getContext("2d");25 datas= 100;26 M=Math;27 Sin=M.sin;28 Cos=M.cos;29 Sqrt=M.sqrt;30 Pow=M.pow;31 PI=M.PI;32 Round=M.round;33 oW=canvas.width= 250;34 oH=canvas.height= 250;35 canvas.style.borderRadius= "50%";36 //线宽

37 lineWidth= 1;38 //大半径

39 r=oW/ 2;40 cR=r- 1 *lineWidth;41 ctx.beginPath();42 ctx.lineWidth=lineWidth;43 //水波动画初始参数

44 axisLength= 2 *r- 16 *lineWidth;//Sin 图形长度

45 unit=axisLength/ 9;//波浪宽

46 range= 0.4;//浪幅

47 nowrange=range;48 xoffset= 8 *lineWidth;//x 轴偏移量

49 data=datas/ 100;//数据量

50 sp= 0;//周期偏移量

51 nowdata= 0;52 waveupsp= 0.006;//水波上涨速度

53 //圆动画初始参数

54 arcStack=[];//圆栈

55 bR=r- 20 *lineWidth;56 soffset= -(PI/ 2);//圆动画起始位置

57 circleLock= true;//起始动画锁

58 //获取圆动画轨迹点集

59 for(vari=soffset; i

63 cStartPoint=arcStack.shift();64 ctx.fillStyle= "transparent";65 ctx.moveTo(cStartPoint[0], cStartPoint[1]);66 ctx.fill();67 //开始渲染

68 render();69 functiondrawSine() {70 ctx.beginPath();71 ctx.save();72 varStack=[];//记录起始点和终点坐标

73 for(vari=xoffset; i<=xoffset+axisLength; i+= 20 /axisLength) {74 varx=sp+(xoffset+i)/unit;75 vary=Sin(x)*nowrange;76 vardx=i;77 vardy= 2 *cR*(1 -nowdata)+(r-cR)-unit*y;78 ctx.lineTo(dx, dy);79 Stack.push([dx, dy]);80 }81 //获取初始点和结束点

82 varstartP=Stack[0];83 varendP=Stack[Stack.length- 1];84 ctx.lineTo(xoffset+axisLength, oW);85 ctx.lineTo(xoffset, oW);86 ctx.lineTo(startP[0], startP[1]);87 ctx.fillStyle= "#3B7BF8";88 ctx.fill();89 ctx.restore();90 }91

92 functiondrawText() {93 ctx.globalCompositeOperation= "source-over";94 varsize= 0.4 *cR;95 ctx.font= "bold" +size+ "px Microsoft Yahei";96 txt=(nowdata.toFixed(2)* 100).toFixed(0)+ "%";97 varfonty=r+size/ 2;98 varfontx=r-size* 0.8;99 ctx.fillStyle= "#9E90EF";100 ctx.textAlign= "center";101 ctx.fillText(txt, r+ 5, r+ 20);102 }103 //最外面淡黄色圈

104 functiondrawCircle() {105 ctx.beginPath();106 ctx.lineWidth= 15;107 ctx.strokeStyle= "#3F1EB9";108 ctx.arc(r, r, cR- 6.1,0,2 *Math.PI);109 ctx.stroke();110 ctx.restore();111 }112 //灰色圆圈

113 functiongrayCircle() {114 ctx.beginPath();115 ctx.lineWidth= 1;116 ctx.strokeStyle= "transparent";117 ctx.arc(r, r, cR+ 10,0,2 *Math.PI);118 ctx.stroke();119 ctx.restore();120 ctx.beginPath();121 }122 //橘黄色进度圈

123 functionorangeCircle() {124 ctx.beginPath();125 ctx.strokeStyle= "#B0BAEE";126 //使用这个使圆环两端是圆弧形状

127 ctx.lineCap= "round";128 ctx.arc(129 r,130 r,131 cR- 4,132 0 *(Math.PI/ 180.0)-Math.PI/ 2,133 nowdata* 360 *(Math.PI/ 180.0)-Math.PI/ 2

134 );135 ctx.stroke();136 ctx.save();137 }138 //裁剪中间水圈

139 functionclipCircle() {140 ctx.beginPath();141 ctx.arc(r, r, cR- 10,0,2 *Math.PI,false);142 ctx.clip();143 }144 //渲染canvas

145 functionrender() {146 ctx.clearRect(0,0, oW, oH);147 //最外面淡黄色圈

148 drawCircle();149 //灰色圆圈

150 grayCircle();151 //橘黄色进度圈

152 orangeCircle();153 //裁剪中间水圈

154 clipCircle();155 //控制波幅

156

157 if(data>= 0.85) {158 if(nowrange>range/ 4) {159 vart=range* 0.01;160 nowrange-=t;161 }162 }else if(data<= 0.1) {163 if(nowrange=range) {173 vart=range* 0.01;174 nowrange-=t;175 }176 }177 if(data-nowdata> 0) {178 nowdata+=waveupsp;179 }180 if(data-nowdata< 0) {181 nowdata-=waveupsp;182 }183 sp+= 0.07;184 //开始水波动画

185 drawSine();186 //写字

187 drawText();188 requestAnimationFrame(render);189 }190

191

java封装插件,基于面向对象思想封装一个水球插件相关推荐

  1. python使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布)

    使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布) import random class Role: def init(self, name=None, score=0): self.name ...

  2. Python使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布)。

    [开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Python [开发目的]:这是老师布置的作业啦~ 供初学者参考学习 [开发者]:江西农业大学2 ...

  3. java 指代对象_06JAVA面向对象之封装

    一.面向对象 1.面向过程和面向对象 面向过程 分析问题的步骤,然后逐步实现. 面向对象 (1)面向对象基于面向过程 (2)面向对象是找出解决问题的人,然后分配职责. (3)对象中包含解决问题的步骤 ...

  4. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  5. 用面向对象思想设计一个中国邮政储蓄银行类

    定义一个中国邮政储蓄银行类, 属性:账号.密码.存款余额,银行名称. 方法:注册账号.存款.取款.查询. 创建该类对象并测试注册账号,存钱,取钱查询操作 要求:使用面向对象思想设计程序 public ...

  6. 【Java语言基础】面向对象之封装、继承、抽象类、接口、多态综合知识习题及总结day11

    这几天逐渐被idea所折服,越来越喜欢这个优雅又强大的代码编辑器,有很多人说idea对很多初学者不友好,但是在我看来,只要你足够自律,并且英语不会太差,语法上关键的几个单词没什么大问题,idea对初学 ...

  7. js面向对象思想封装拖拽功能,兼容pc和移动端

    我们在开发项目过程中,很可能会碰到页面上某块需要可以拖拽移动的功能需求,网上已经有不少前辈分享了相关功能的案例,插件或者代码,但是考虑到项目功能需求,我们可能仅需要实现拖拽移动功能就可以,不需要其他功 ...

  8. 面向对象思想封装狙击手狙击敌人

    需求:狙击手xxx使用xx枪,射击敌人xxx,敌人生命值归0,应声倒下 分析设计类: 封装狙击手类 属性: 名字 行为:捡枪 装弹 射击 封装枪类 属性: 型号 行为:射击 封装弹夹类 属性:弹夹容量 ...

  9. python函数封装图解_Python面向对象之封装

    前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...

最新文章

  1. 基于梯度方向、极化变换和聚类算法的图像主特征直线检测
  2. 【Python基础】超级详解系列-Python列表全面解析
  3. 可视化运行Python的神器Jupyter Notebook
  4. 吐血推荐 | 那些提升开发人员工作效率的在线工具
  5. 常用控件 winform
  6. SQL73 考试分数(二)
  7. vue获取麦克风_vue使用recorder.js实现录音功能
  8. zb_system login.php,zblog后台登录地址怎么修改?
  9. paip.提升效率---------文件搜索工具总结
  10. iPhone, iPad, 的Safari书签和阅读列表不同步问题
  11. [Azure][Event hub]Kafka无法同时连接到同一个namespace下的两个Event hub
  12. 市场营销学9——产品策略
  13. mysql的join查询和多次查询比较
  14. 瑞吉外卖项目——瑞吉外卖
  15. java 引用 引用的对象,Java 引用类型简述
  16. 海思hi3516EV300_4G图传模组防雷防静电推荐图
  17. php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例
  18. 南方科技大学计算机2020考研,南方科技大学电子与电气工程系2020年硕士研究生预调剂通知...
  19. 大数据知识点归纳总结
  20. 别再纠结页面设计!挑选小程序页面设计模板就对了

热门文章

  1. python 多线程编程之_thread模块
  2. 微信小程序长按事件触发点击事件的BUG处理
  3. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
  4. 角色权限(Role)和系统权限(System)的几个澄清实验
  5. 如何让Table显示滚动条
  6. 使用commons-dbutils
  7. .NET4.0并行计算技术基础(8)
  8. vim的文件中字符串的查找与替换
  9. sql sever avg保留小数_《数据库系统概念》笔记 (一)SQL
  10. java语言中if语句的基本语法_java中if语句有哪些形式和用法