1 |
|
2 | var BiGauge = function BiGauge(container, params) {
|
3 | |
4 |
|
5 |
|
6 | var defaults = {
|
7 | minValue: 0,
|
8 | maxValue: 360,
|
9 | currentValue: 0,
|
10 |
|
11 | maxPointRotate: 270,
|
12 |
|
13 |
|
14 | pointClass: '.gauge-pointer',
|
15 | waveClass: '.gauge-wave',
|
16 | valueClass: '.gauge-text',
|
17 |
|
18 |
|
19 | delay: 0,
|
20 | durationall: 2000
|
21 |
|
22 | |
23 |
|
24 |
|
25 |
|
26 |
|
27 | };
|
28 | for (var def in defaults) {
|
29 | if (params[def] === undefined) {
|
30 | params[def] = defaults[def];
|
31 | }
|
32 | }
|
33 | var s = this;
|
34 | s.params = params;
|
35 | s.container = typeof container === 'string' ? document.querySelector(container) : container;
|
36 | if (!s.container) {
|
37 | console.log('SeedsUI Error:未找到Gauge的DOM对象,请检查传入参数是否正确');
|
38 | return;
|
39 | }
|
40 | s.point = s.container.querySelector(s.params.pointClass);
|
41 | s.wave = s.container.querySelector(s.params.waveClass) || null;
|
42 | s.value = s.container.querySelector(s.params.valueClass);
|
43 |
|
44 | s.percent = (s.params.currentValue - s.params.minValue) / (s.params.maxValue - s.params.minValue);
|
45 |
|
46 | s.duration = Math.round(s.percent * s.params.durationall);
|
47 | if (s.duration > s.params.durationall) {
|
48 | s.duration = s.params.durationall;
|
49 | }
|
50 | s.bgLvl = Math.round(s.percent * 10) + 1;
|
51 | if (s.bgLvl < 1) s.bgLvl = 1;
|
52 | if (s.bgLvl > 10) s.bgLvl = 10;
|
53 |
|
54 | s.waveTop;
|
55 |
|
56 | |
57 |
|
58 |
|
59 |
|
60 | s.updatePoint = function () {
|
61 |
|
62 | s.pointRotate = s.params.maxPointRotate * s.percent;
|
63 |
|
64 |
|
65 | if (s.pointRotate > s.params.maxPointRotate) {
|
66 | s.pointRotate = s.params.maxPointRotate;
|
67 |
|
68 | if (s.params.onOut) s.params.onOut(s);
|
69 | }
|
70 |
|
71 |
|
72 | if (s.params.onChangeStart) s.params.onChangeStart(s);
|
73 |
|
74 | s.point.style.webkitTransitionDuration = s.duration + 'ms';
|
75 | };
|
76 |
|
77 | s.updateValue = function () {
|
78 | s.value.innerHTML = s.params.currentValue;
|
79 | };
|
80 |
|
81 | s.updateBg = function () {
|
82 | s.container.style.webkitAnimationDuration = s.duration + 'ms';
|
83 | };
|
84 |
|
85 | s.updateWave = function () {
|
86 | if (!s.wave) return;
|
87 | s.waveTop = 100 - Math.round(s.percent.toFixed(1) * 100);
|
88 | if (s.waveTop < 0) {
|
89 | s.waveTop = 0;
|
90 | }
|
91 | s.wave.style.webkitTransitionDuration = s.duration + 'ms';
|
92 | };
|
93 | s.updateDelay = function () {
|
94 | s.container.style.webkitAnimationDelay = s.params.delay + 'ms';
|
95 | s.point.style.webkitTransitionDelay = s.params.delay + 'ms';
|
96 | if (s.wave) s.wave.style.webkitTransitionDelay = s.params.delay + 'ms';
|
97 | };
|
98 | s.update = function () {
|
99 | s.updateBg();
|
100 | s.updatePoint();
|
101 | s.updateValue();
|
102 | s.updateWave();
|
103 | s.updateDelay();
|
104 | };
|
105 | s.update();
|
106 | s.play = function () {
|
107 |
|
108 | s.point.style.webkitTransform = 'rotate(' + s.pointRotate + 'deg)';
|
109 |
|
110 | var bgExpr = /bg[1-9]0?$/g;
|
111 | if (bgExpr.test(s.container.className)) {
|
112 | s.container.className = s.container.className.replace(bgExpr, 'bg' + s.bgLvl);
|
113 | } else {
|
114 | s.container.className += ' bg' + s.bgLvl;
|
115 | }
|
116 |
|
117 | if (s.wave) s.wave.style.top = s.waveTop + '%';
|
118 | };
|
119 | |
120 |
|
121 |
|
122 | s.events = function (detach) {
|
123 | var action = detach ? 'removeEventListener' : 'addEventListener';
|
124 | s.point[action]('webkitTransitionEnd', s.onTransitionEnd, false);
|
125 | };
|
126 |
|
127 | s.attach = function () {
|
128 | s.events();
|
129 | };
|
130 | s.detach = function () {
|
131 | s.events(true);
|
132 | };
|
133 | s.onTransitionEnd = function (e) {
|
134 |
|
135 | if (s.params.onChangeEnd) s.params.onChangeEnd(s);
|
136 | };
|
137 |
|
138 | s.init = function () {
|
139 | s.attach();
|
140 | };
|
141 | s.init();
|
142 | };
|
143 |
|
144 | export default BiGauge; |
\ | No newline at end of file |