java封装插件,基于面向对象思想封装一个水球插件
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封装插件,基于面向对象思想封装一个水球插件相关推荐
- python使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布)
使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布) import random class Role: def init(self, name=None, score=0): self.name ...
- Python使用面向对象思想开发一个人机对战的猜拳游戏(石头剪刀布)。
[开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Python [开发目的]:这是老师布置的作业啦~ 供初学者参考学习 [开发者]:江西农业大学2 ...
- java 指代对象_06JAVA面向对象之封装
一.面向对象 1.面向过程和面向对象 面向过程 分析问题的步骤,然后逐步实现. 面向对象 (1)面向对象基于面向过程 (2)面向对象是找出解决问题的人,然后分配职责. (3)对象中包含解决问题的步骤 ...
- java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...
- 用面向对象思想设计一个中国邮政储蓄银行类
定义一个中国邮政储蓄银行类, 属性:账号.密码.存款余额,银行名称. 方法:注册账号.存款.取款.查询. 创建该类对象并测试注册账号,存钱,取钱查询操作 要求:使用面向对象思想设计程序 public ...
- 【Java语言基础】面向对象之封装、继承、抽象类、接口、多态综合知识习题及总结day11
这几天逐渐被idea所折服,越来越喜欢这个优雅又强大的代码编辑器,有很多人说idea对很多初学者不友好,但是在我看来,只要你足够自律,并且英语不会太差,语法上关键的几个单词没什么大问题,idea对初学 ...
- js面向对象思想封装拖拽功能,兼容pc和移动端
我们在开发项目过程中,很可能会碰到页面上某块需要可以拖拽移动的功能需求,网上已经有不少前辈分享了相关功能的案例,插件或者代码,但是考虑到项目功能需求,我们可能仅需要实现拖拽移动功能就可以,不需要其他功 ...
- 面向对象思想封装狙击手狙击敌人
需求:狙击手xxx使用xx枪,射击敌人xxx,敌人生命值归0,应声倒下 分析设计类: 封装狙击手类 属性: 名字 行为:捡枪 装弹 射击 封装枪类 属性: 型号 行为:射击 封装弹夹类 属性:弹夹容量 ...
- python函数封装图解_Python面向对象之封装
前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...
最新文章
- 基于梯度方向、极化变换和聚类算法的图像主特征直线检测
- 【Python基础】超级详解系列-Python列表全面解析
- 可视化运行Python的神器Jupyter Notebook
- 吐血推荐 | 那些提升开发人员工作效率的在线工具
- 常用控件 winform
- SQL73 考试分数(二)
- vue获取麦克风_vue使用recorder.js实现录音功能
- zb_system login.php,zblog后台登录地址怎么修改?
- paip.提升效率---------文件搜索工具总结
- iPhone, iPad, 的Safari书签和阅读列表不同步问题
- [Azure][Event hub]Kafka无法同时连接到同一个namespace下的两个Event hub
- 市场营销学9——产品策略
- mysql的join查询和多次查询比较
- 瑞吉外卖项目——瑞吉外卖
- java 引用 引用的对象,Java 引用类型简述
- 海思hi3516EV300_4G图传模组防雷防静电推荐图
- php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例
- 南方科技大学计算机2020考研,南方科技大学电子与电气工程系2020年硕士研究生预调剂通知...
- 大数据知识点归纳总结
- 别再纠结页面设计!挑选小程序页面设计模板就对了
热门文章
- python 多线程编程之_thread模块
- 微信小程序长按事件触发点击事件的BUG处理
- 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
- 角色权限(Role)和系统权限(System)的几个澄清实验
- 如何让Table显示滚动条
- 使用commons-dbutils
- .NET4.0并行计算技术基础(8)
- vim的文件中字符串的查找与替换
- sql sever avg保留小数_《数据库系统概念》笔记 (一)SQL
- java语言中if语句的基本语法_java中if语句有哪些形式和用法