新闻详情
当前位置:首页-新闻中心

基于面向对象思想封装一个水球插件

{$itemInfo['publish_time']|date='Y-m-d H:i:s',_ _ _足球投注网贵宾通道专属玩家,存款、取款、优惠更快速到账,更快速有效地解决您的问题.足球网上投注是英国在线体育娱乐平台,创立于2000年,并曾获得英女王颁发杰出商业成就奖.球赛投注app专业的体育投注网站为2019世界杯助力,内置了多种体育赛事直播,世界杯分析,体育投注技巧分享,参与即可有机会获得世界杯大奖!}##} 来源:足球投注网-足球网上投注-球赛投注app 浏览次数 4
字体大小: 14px 16px 18px

[摘要] 117functiongetWater(options){18letid=options.id?options.id:"canvas";19lettext=options.text?options.text:"";20lettextC=options.textC?options.

  1

  17 function getWater(options) {

  18 let id=options.id ? options.id : "canvas";

  19 let text=options.text ? options.text : "";

  20 let textC=options.textC ? options.textC : "#000";

  21 let r=options.r ? options.r : 200;

  22 let lineW=options.w ? options.w : 1;

  23 let data=options.data ? options.data : 30;

  24 let progress=options.pC ? options.pC : "";

  25 let wc=options.wc ? options.wc : "#3B7BF8";

  26 let bg=options.bg ? options.bg : "#fff";

  27 canvas= document.getElementById(id);

  28

  29 this.ctx=canvas.getContext("2d");

  30

  31 M= Math;

  32 Sin= M.sin;

  33 Cos= M.cos;

  34 Sqrt= M.sqrt;

  35 Pow= M.pow;

  36 PI= M.PI;

  37 Round= M.round;

  38 oW=canvas.width= r;

  39 oH=canvas.height= r;

  40 if (options.bg !="") {

  41 canvas.style.borderRadius="50%";

  42 }

  43 canvas.style.background= bg;

  44 // 线宽

  45 lineWidth= lineW;

  46 // 大半径

  47 r=oW / 2;

  48 cR=r - 1 * lineWidth;

  49 this.ctx.beginPath();

  50 this.ctx.lineWidth= lineWidth;

  51 // 水波动画初始参数

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

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

  54 range=0.4; // 浪幅

  55 nowrange= range;

  56 xoffset=8 * lineWidth; // x 轴偏移量

  57 this.data=data / 100; // 数据量

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

  59 this.nowdata=0;

  60 waveupsp=0.006; // 水波上涨速度

  61 // 圆动画初始参数

  62 arcStack=[]; // 圆栈

  63 bR=r - 20 * lineWidth;

  64 soffset=-(PI / 2); // 圆动画起始位置

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

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

  67 for (var i=soffset; i < soffset + 2 * PI; i +=1 / (8 * PI)) {

  68 arcStack.push([r + bR * Cos(i), r + bR * Sin(i)]);

  69 }

  70 // 圆起始点

  71 cStartPoint= arcStack.shift();

  72 this.ctx.fill;

  73 this.ctx.moveTo(cStartPoint[0], cStartPoint[1]);

  74 this.ctx.fill();

  75 // 开始渲染

  76 this.drawSine=function() {

  77 this.ctx.beginPath();

  78 this.ctx.save();

  79 var Stack=[]; // 记录起始点和终点坐标

  80 for (var i=xoffset; i <=xoffset + axisLength; i +=20 / axisLength) {

  81 var x=sp + (xoffset + i) / unit;

  82 var y=Sin(x) * nowrange;

  83 var dx= i;

  84 var dy=2 * cR * (1 - that.nowdata) + (r - cR) - unit * y;

  85 this.ctx.lineTo(dx, dy);

  86 Stack.push([dx, dy]);

  87 }

  88 // 获取初始点和结束点

  89 var startP=Stack[0];

  90 var endP=Stack[Stack.length - 1];

  91 this.ctx.lineTo(xoffset + axisLength, oW);

  92 this.ctx.lineTo(xoffset, oW);

  93 this.ctx.lineTo(startP[0], startP[1]);

  94 this.ctx.fillStyle= wc;

  95 this.ctx.fill();

  96 this.ctx.restore();

  97 };

  98 this.drawText=function() {

  99 this.ctx.globalCompositeOperation="source-over";

  100 var size=0.4 * cR;

  101 this.ctx.font="bold " + size + "px Microsoft Yahei";

  102

  103 if (typeof text=="number") {

  104 txt=(that.nowdata.toFixed(2) * 100).toFixed(0) + "%";

  105 } else {

  106 txt= text;

  107 }

  108

  109 var fonty=r + size / 2;

  110 var fontx=r - size * 0.8;

  111 this.ctx.fillStyle= textC;

  112 this.ctx.textAlign="center";

  113 this.ctx.fillText(txt, r + 5, r + 20);

  114 };

  115 //最外面淡黄色圈

  116 this.drawCircle=function() {

  117 this.ctx.beginPath();

  118 this.ctx.lineWidth=15;

  119 this.ctx.strokeStyle= progress;

  120 this.ctx.arc(r, r, cR - 6.1, 0, 2 * Math.PI);

  121 this.ctx.stroke();

  122 this.ctx.restore();

  123 };

  124 //灰色圆圈

  125 this.grayCircle=function() {

  126 this.ctx.beginPath();

  127 this.ctx.lineWidth=1;

  128 this.ctx.stroke;

  129 this.ctx.arc(r, r, cR + 10, 0, 2 * Math.PI);

  130 this.ctx.stroke();

  131 this.ctx.restore();

  132 this.ctx.beginPath();

  133 };

  134 //橘黄色进度圈

  135 this.orangeCircle=function() {

  136 this.ctx.beginPath();

  137 this.ctx.stroke;

  138 //使用这个使圆环两端是圆弧形状

  139 this.ctx.lineCap="round";

  140 this.ctx.arc(

  141 r,

  142 r,

  143 cR - 4,

  144 0 * (Math.PI / 180.0) - Math.PI / 2,

  145 that.nowdata * 360 * (Math.PI / 180.0) - Math.PI / 2

  146 );

  147 this.ctx.stroke();

  148 this.ctx.save();

  149 };

  150 //裁剪中间水圈

  151 this.clipCircle=function() {

  152 this.ctx.beginPath();

  153 this.ctx.arc(r, r, cR - 10, 0, 2 * Math.PI, false);

  154 this.ctx.clip();

  155 };

  156 var that=this;

  157 this.render=function() {

  158 that.ctx.clearRect(0, 0, oW, oH);

  159 //最外面淡黄色圈

  160 that.drawCircle();

  161 //灰色圆圈

  162 that.grayCircle();

  163 //橘黄色进度圈

  164 that.orangeCircle();

  165 //裁剪中间水圈

  166 that.clipCircle();

  167 // 控制波幅

  168

  169 if (that.data >=0.85) {

  170 if (nowrange > range / 4) {

  171 var t=range * 0.01;

  172 nowrange -= t;

  173 }

  174 } else if (that.data <=0.1) {

  175 if (nowrange < range * 1.5) {

  176 var t=range * 0.01;

  177 nowrange += t;

  178 }

  179 } else {

  180 if (nowrange <= range) {

  181 var t=range * 0.01;

  182 nowrange += t;

  183 }

  184 if (nowrange >= range) {

  185 var t=range * 0.01;

  186 nowrange -= t;

  187 }

  188 }

  189 if (that.data - that.nowdata > 0) {

  190 that.nowdata += waveupsp;

  191 }

  192 if (that.data - that.nowdata < 0) {

  193 that.nowdata -= waveupsp;

  194 }

  195 sp +=0.07;

  196 // 开始水波动画

  197 that.drawSine();

  198 // 写字

  199 if (text !="") {

  200 that.drawText();

  201 }

  202 requestAnimationFrame(that.render);

  203 };

  204 this.render();

  205

  206 //渲染canvas

  207 }

本站导航
新葡京头条
Copyright © 1998 - 2015 足球投注网-足球网上投注-球赛投注app