vislite 0.2.0 → 0.3.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +19 -1
  3. package/LICENSE +20 -20
  4. package/README.md +53 -53
  5. package/lib/Canvas/index.umd.js +91 -14
  6. package/lib/Canvas/index.umd.min.js +7 -3
  7. package/lib/Cardinal/index.umd.js +6 -2
  8. package/lib/Cardinal/index.umd.min.js +6 -2
  9. package/lib/Eoap/index.umd.js +6 -2
  10. package/lib/Eoap/index.umd.min.js +6 -2
  11. package/lib/Hermite/index.umd.js +6 -2
  12. package/lib/Hermite/index.umd.min.js +6 -2
  13. package/lib/Matrix4/index.umd.js +6 -2
  14. package/lib/Matrix4/index.umd.min.js +6 -2
  15. package/lib/Mercator/index.umd.js +6 -2
  16. package/lib/Mercator/index.umd.min.js +6 -2
  17. package/lib/OralCanvas/index.es.js +91 -14
  18. package/lib/OralCanvas/index.es.min.js +7 -3
  19. package/lib/OralWebGL/index.es.js +8 -2
  20. package/lib/OralWebGL/index.es.min.js +6 -2
  21. package/lib/SVG/index.umd.js +82 -62
  22. package/lib/SVG/index.umd.min.js +7 -3
  23. package/lib/WebGL/index.umd.js +6 -2
  24. package/lib/WebGL/index.umd.min.js +6 -2
  25. package/lib/animation/index.umd.js +6 -2
  26. package/lib/animation/index.umd.min.js +6 -2
  27. package/lib/getLoopColors/index.umd.js +6 -2
  28. package/lib/getLoopColors/index.umd.min.js +6 -2
  29. package/lib/index.umd.js +167 -74
  30. package/lib/index.umd.min.js +7 -3
  31. package/lib/rotate/index.umd.js +6 -2
  32. package/lib/rotate/index.umd.min.js +6 -2
  33. package/lib/ruler/index.umd.js +6 -2
  34. package/lib/ruler/index.umd.min.js +6 -2
  35. package/lib/viewHandler/index.umd.js +6 -2
  36. package/lib/viewHandler/index.umd.min.js +6 -2
  37. package/miniprogram/ui-canvas/index.json +4 -4
  38. package/miniprogram/ui-canvas/index.wxml +4 -4
  39. package/miniprogram/ui-canvas/index.wxss +5 -5
  40. package/package/Canvas/index.ts +1 -1
  41. package/package/Cardinal/index.ts +2 -2
  42. package/package/Eoap/index.ts +2 -2
  43. package/package/Hermite/index.ts +2 -2
  44. package/package/Matrix4/index.ts +2 -2
  45. package/package/OralCanvas/index.ts +1 -1
  46. package/package/OralWebGL/index.ts +1 -1
  47. package/package/SVG/index.ts +2 -2
  48. package/package/animation/index.ts +2 -2
  49. package/package/getLoopColors/index.ts +2 -2
  50. package/package/rotate/index.ts +2 -2
  51. package/package/ruler/index.ts +2 -2
  52. package/package.json +4 -4
  53. package/src/Matrix4/index.ts +76 -76
  54. package/src/Matrix4/move.ts +12 -12
  55. package/src/Matrix4/rotate.ts +15 -15
  56. package/src/Matrix4/scale.ts +11 -11
  57. package/src/Matrix4/transform.ts +64 -64
  58. package/src/animation.ts +99 -99
  59. package/src/common/canvas/arc.ts +50 -50
  60. package/src/common/canvas/config.ts +142 -61
  61. package/src/common/canvas/gradient.ts +29 -0
  62. package/src/common/canvas/index.ts +122 -82
  63. package/src/common/canvas/painter.ts +12 -0
  64. package/src/common/setStyle.ts +5 -5
  65. package/src/common/svg/config.ts +173 -128
  66. package/src/common/svg/index.ts +315 -266
  67. package/src/common/svg/tool.ts +43 -43
  68. package/src/getLoopColors.ts +42 -42
  69. package/src/interpolation/Cardinal.ts +91 -91
  70. package/src/interpolation/Hermite.ts +65 -65
  71. package/src/rotate.ts +7 -7
  72. package/src/ruler.ts +99 -99
  73. package/types/Canvas.d.ts +282 -221
  74. package/types/CanvasConfig.d.ts +3 -3
  75. package/types/Cardinal.d.ts +13 -13
  76. package/types/Gradient.d.ts +15 -0
  77. package/types/Hermite.d.ts +18 -18
  78. package/types/Matrix4.d.ts +42 -42
  79. package/types/SVG.d.ts +210 -210
  80. package/types/animation.d.ts +6 -6
  81. package/types/getLoopColors.d.ts +2 -2
  82. package/types/rotate.d.ts +2 -2
  83. package/types/ruler.d.ts +2 -2
  84. package/uni-app/ui-canvas.vue +22 -46
package/src/animation.ts CHANGED
@@ -1,100 +1,100 @@
1
- //当前正在运动的动画的tick函数堆栈
2
- let $timers: any[] = []
3
- //唯一定时器的定时间隔
4
- let $interval = 13
5
- //定时器ID
6
- let $timerId: any
7
-
8
- /**
9
- * 动画轮播
10
- * @param {function} doback 轮询函数,有一个形参deep,0-1,表示执行进度
11
- * @param {number} duration 动画时长,可选
12
- * @param {function} callback 动画结束回调,可选,有一个形参deep,0-1,表示执行进度
13
- *
14
- * @returns {function} 返回一个函数,调用该函数,可以提前结束动画
15
- */
16
- export default function (doback: (deep: number) => void, duration: number = 400, callback: (deep: number) => void = () => { }): Function {
17
-
18
-
19
- let clock = {
20
- //把tick函数推入堆栈
21
- "timer": function (tick: (deep: number) => void, duration: number, callback: (deep: number) => void) {
22
- if (!tick) {
23
- throw new Error('Tick is required!')
24
- }
25
- let id = new Date().valueOf() + "_" + (Math.random() * 1000).toFixed(0)
26
- $timers.push({
27
- "id": id,
28
- "createTime": new Date(),
29
- "tick": tick,
30
- "duration": duration,
31
- "callback": callback
32
- });
33
- clock.start()
34
- return id
35
- },
36
-
37
- //开启唯一的定时器timerId
38
- "start": function () {
39
- if (!$timerId) {
40
- $timerId = setInterval(clock.tick, $interval)
41
- }
42
- },
43
-
44
- //被定时器调用,遍历timers堆栈
45
- "tick": function () {
46
- let createTime: Date, flag: number, tick: (deep: number) => void, callback: (deep: number) => void, timer: any, duration: number, passTime: number,
47
- timers: any[] = $timers
48
- $timers = []
49
- $timers.length = 0
50
- for (flag = 0; flag < timers.length; flag++) {
51
- //初始化数据
52
- timer = timers[flag]
53
- createTime = timer.createTime
54
- tick = timer.tick
55
- duration = timer.duration
56
- callback = timer.callback
57
-
58
- //执行
59
- passTime = (+new Date().valueOf() - createTime.valueOf()) / duration
60
- passTime = passTime > 1 ? 1 : passTime
61
- tick(passTime)
62
- if (passTime < 1 && timer.id) {
63
- //动画没有结束再添加
64
- $timers.push(timer)
65
- } else {
66
- callback(passTime)
67
- }
68
- }
69
- if ($timers.length <= 0) {
70
- clock.stop()
71
- }
72
- },
73
-
74
- //停止定时器,重置timerId=null
75
- "stop": function () {
76
- if ($timerId) {
77
- clearInterval($timerId)
78
- $timerId = null
79
- }
80
- }
81
- };
82
-
83
- let id = clock.timer(function (deep: number) {
84
- //其中deep为0-1,表示改变的程度
85
- doback(deep)
86
- }, duration, callback)
87
-
88
- // 返回一个函数
89
- // 用于在动画结束前结束动画
90
- return function () {
91
- let i: string
92
- for (i in $timers) {
93
- if ($timers[i].id == id) {
94
- $timers[i].id = undefined
95
- return
96
- }
97
- }
98
- }
99
-
1
+ //当前正在运动的动画的tick函数堆栈
2
+ let $timers: any[] = []
3
+ //唯一定时器的定时间隔
4
+ let $interval = 13
5
+ //定时器ID
6
+ let $timerId: any
7
+
8
+ /**
9
+ * 动画轮播
10
+ * @param {function} doback 轮询函数,有一个形参deep,0-1,表示执行进度
11
+ * @param {number} duration 动画时长,可选
12
+ * @param {function} callback 动画结束回调,可选,有一个形参deep,0-1,表示执行进度
13
+ *
14
+ * @returns {function} 返回一个函数,调用该函数,可以提前结束动画
15
+ */
16
+ export default function (doback: (deep: number) => void, duration: number = 400, callback: (deep: number) => void = () => { }): Function {
17
+
18
+
19
+ let clock = {
20
+ //把tick函数推入堆栈
21
+ "timer": function (tick: (deep: number) => void, duration: number, callback: (deep: number) => void) {
22
+ if (!tick) {
23
+ throw new Error('Tick is required!')
24
+ }
25
+ let id = new Date().valueOf() + "_" + (Math.random() * 1000).toFixed(0)
26
+ $timers.push({
27
+ "id": id,
28
+ "createTime": new Date(),
29
+ "tick": tick,
30
+ "duration": duration,
31
+ "callback": callback
32
+ });
33
+ clock.start()
34
+ return id
35
+ },
36
+
37
+ //开启唯一的定时器timerId
38
+ "start": function () {
39
+ if (!$timerId) {
40
+ $timerId = setInterval(clock.tick, $interval)
41
+ }
42
+ },
43
+
44
+ //被定时器调用,遍历timers堆栈
45
+ "tick": function () {
46
+ let createTime: Date, flag: number, tick: (deep: number) => void, callback: (deep: number) => void, timer: any, duration: number, passTime: number,
47
+ timers: any[] = $timers
48
+ $timers = []
49
+ $timers.length = 0
50
+ for (flag = 0; flag < timers.length; flag++) {
51
+ //初始化数据
52
+ timer = timers[flag]
53
+ createTime = timer.createTime
54
+ tick = timer.tick
55
+ duration = timer.duration
56
+ callback = timer.callback
57
+
58
+ //执行
59
+ passTime = (+new Date().valueOf() - createTime.valueOf()) / duration
60
+ passTime = passTime > 1 ? 1 : passTime
61
+ tick(passTime)
62
+ if (passTime < 1 && timer.id) {
63
+ //动画没有结束再添加
64
+ $timers.push(timer)
65
+ } else {
66
+ callback(passTime)
67
+ }
68
+ }
69
+ if ($timers.length <= 0) {
70
+ clock.stop()
71
+ }
72
+ },
73
+
74
+ //停止定时器,重置timerId=null
75
+ "stop": function () {
76
+ if ($timerId) {
77
+ clearInterval($timerId)
78
+ $timerId = null
79
+ }
80
+ }
81
+ };
82
+
83
+ let id = clock.timer(function (deep: number) {
84
+ //其中deep为0-1,表示改变的程度
85
+ doback(deep)
86
+ }, duration, callback)
87
+
88
+ // 返回一个函数
89
+ // 用于在动画结束前结束动画
90
+ return function () {
91
+ let i: string
92
+ for (i in $timers) {
93
+ if ($timers[i].id == id) {
94
+ $timers[i].id = undefined
95
+ return
96
+ }
97
+ }
98
+ }
99
+
100
100
  }
@@ -1,50 +1,50 @@
1
-
2
- // 点(x,y)围绕中心(cx,cy)旋转deg度
3
-
4
- let rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
- let cos = Math.cos(deg), sin = Math.sin(deg)
6
- return [
7
- +((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
8
- +((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
9
- ]
10
- }
11
-
12
- // r1和r2,内半径和外半径
13
- // beginA起点弧度,rotateA旋转弧度式
14
-
15
- export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
16
-
17
- // 保证逆时针也是可以的
18
- if (rotateA < 0) {
19
- beginA += rotateA
20
- rotateA *= -1
21
- }
22
-
23
- let temp: number[] = [], p: number[]
24
-
25
- // 内部
26
- p = rotate(0, 0, beginA, r1, 0)
27
- temp[0] = p[0]
28
- temp[1] = p[1]
29
- p = rotate(0, 0, rotateA, p[0], p[1])
30
- temp[2] = p[0]
31
- temp[3] = p[1]
32
-
33
- // 外部
34
- p = rotate(0, 0, beginA, r2, 0)
35
- temp[4] = p[0]
36
- temp[5] = p[1]
37
- p = rotate(0, 0, rotateA, p[0], p[1])
38
- temp[6] = p[0]
39
- temp[7] = p[1]
40
-
41
- doback(
42
- beginA, beginA + rotateA,
43
- temp[0] + cx, temp[1] + cy,
44
- temp[4] + cx, temp[5] + cy,
45
- temp[2] + cx, temp[3] + cy,
46
- temp[6] + cx, temp[7] + cy,
47
- (r2 - r1) * 0.5
48
- )
49
-
50
- }
1
+
2
+ // 点(x,y)围绕中心(cx,cy)旋转deg度
3
+
4
+ let rotate = function (cx: number, cy: number, deg: number, x: number, y: number) {
5
+ let cos = Math.cos(deg), sin = Math.sin(deg)
6
+ return [
7
+ +((x - cx) * cos - (y - cy) * sin + cx).toFixed(7),
8
+ +((x - cx) * sin + (y - cy) * cos + cy).toFixed(7)
9
+ ]
10
+ }
11
+
12
+ // r1和r2,内半径和外半径
13
+ // beginA起点弧度,rotateA旋转弧度式
14
+
15
+ export default function (beginA: number, rotateA: number, cx: number, cy: number, r1: number, r2: number, doback: Function) {
16
+
17
+ // 保证逆时针也是可以的
18
+ if (rotateA < 0) {
19
+ beginA += rotateA
20
+ rotateA *= -1
21
+ }
22
+
23
+ let temp: number[] = [], p: number[]
24
+
25
+ // 内部
26
+ p = rotate(0, 0, beginA, r1, 0)
27
+ temp[0] = p[0]
28
+ temp[1] = p[1]
29
+ p = rotate(0, 0, rotateA, p[0], p[1])
30
+ temp[2] = p[0]
31
+ temp[3] = p[1]
32
+
33
+ // 外部
34
+ p = rotate(0, 0, beginA, r2, 0)
35
+ temp[4] = p[0]
36
+ temp[5] = p[1]
37
+ p = rotate(0, 0, rotateA, p[0], p[1])
38
+ temp[6] = p[0]
39
+ temp[7] = p[1]
40
+
41
+ doback(
42
+ beginA, beginA + rotateA,
43
+ temp[0] + cx, temp[1] + cy,
44
+ temp[4] + cx, temp[5] + cy,
45
+ temp[2] + cx, temp[3] + cy,
46
+ temp[6] + cx, temp[7] + cy,
47
+ (r2 - r1) * 0.5
48
+ )
49
+
50
+ }
@@ -1,76 +1,157 @@
1
- import arc from './arc'
2
- import CanvasConfigType from '../../../types/CanvasConfig'
1
+ import arc from "./arc"
2
+ import CanvasConfigType from "../../../types/CanvasConfig"
3
3
 
4
4
  // 文字统一设置方法
5
- export let initText = function (painter: CanvasRenderingContext2D, config: CanvasConfigType, x: number, y: number, deg: number) {
6
-
7
- painter.beginPath()
8
- painter.translate(x, y)
9
- painter.rotate(deg)
10
- painter.font = config.fontStyle + " " + config.fontWeight + " " + config.fontSize + "px " + config.fontFamily
11
- return painter
12
- };
5
+ export let initText = function (
6
+ painter: CanvasRenderingContext2D,
7
+ config: CanvasConfigType,
8
+ x: number,
9
+ y: number,
10
+ deg: number
11
+ ) {
12
+ painter.beginPath();
13
+ painter.translate(x, y);
14
+ painter.rotate(deg);
15
+ painter.font =
16
+ config.fontStyle +
17
+ " " +
18
+ config.fontWeight +
19
+ " " +
20
+ config.fontSize +
21
+ "px " +
22
+ config.fontFamily;
23
+ return painter
24
+ }
13
25
 
14
26
  // 画弧统一设置方法
15
- export let initArc = function (painter: CanvasRenderingContext2D, config: CanvasConfigType, cx: number, cy: number, r1: number, r2: number, beginDeg: number, deg: number) {
27
+ export let initArc = function (
28
+ painter: CanvasRenderingContext2D,
29
+ config: CanvasConfigType,
30
+ cx: number,
31
+ cy: number,
32
+ r1: number,
33
+ r2: number,
34
+ beginDeg: number,
35
+ deg: number
36
+ ) {
37
+ if (r1 > r2) {
38
+ let temp = r1
39
+ r1 = r2
40
+ r2 = temp
41
+ }
16
42
 
17
- if (r1 > r2) {
18
- let temp = r1
19
- r1 = r2
20
- r2 = temp
21
- }
43
+ beginDeg = beginDeg % (Math.PI * 2)
22
44
 
23
- beginDeg = beginDeg % (Math.PI * 2)
45
+ // 当|deg|>=2π的时候都认为是一个圆环
46
+ // 为什么不取2π比较,是怕部分浏览器浮点不精确
47
+ if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
48
+ deg = Math.PI * 2
49
+ } else {
50
+ deg = deg % (Math.PI * 2)
51
+ }
24
52
 
25
- // 当|deg|>=2π的时候都认为是一个圆环
26
- // 为什么不取2π比较,是怕部分浏览器浮点不精确
27
- if (deg >= Math.PI * 1.999999 || deg <= -Math.PI * 1.999999) {
28
- deg = Math.PI * 2
29
- } else {
30
- deg = deg % (Math.PI * 2)
31
- }
32
-
33
- arc(beginDeg, deg, cx, cy, r1, r2, function (
34
- beginA: number, endA: number,
35
- begInnerX: number, begInnerY: number,
36
- begOuterX: number, begOuterY: number,
37
- endInnerX: number, endInnerY: number,
38
- endOuterX: number, endOuterY: number,
39
- r: number
53
+ arc(
54
+ beginDeg,
55
+ deg,
56
+ cx,
57
+ cy,
58
+ r1,
59
+ r2,
60
+ function (
61
+ beginA: number,
62
+ endA: number,
63
+ begInnerX: number,
64
+ begInnerY: number,
65
+ begOuterX: number,
66
+ begOuterY: number,
67
+ endInnerX: number,
68
+ endInnerY: number,
69
+ endOuterX: number,
70
+ endOuterY: number,
71
+ r: number
40
72
  ) {
41
- if (r < 0) r = -r;
42
- painter.beginPath()
43
- painter.moveTo(begInnerX, begInnerY)
73
+ if (r < 0) r = -r
74
+ painter.beginPath()
75
+ painter.moveTo(begInnerX, begInnerY)
76
+ painter.arc(
77
+ // (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
78
+ cx,
79
+ cy,
80
+ r1,
81
+ beginA,
82
+ endA,
83
+ false
84
+ )
85
+ // 结尾
86
+ if (config.arcEndCap == "round")
87
+ painter.arc(
88
+ (endInnerX + endOuterX) * 0.5,
89
+ (endInnerY + endOuterY) * 0.5,
90
+ r,
91
+ endA - Math.PI,
92
+ endA,
93
+ true
94
+ )
95
+ else if (config.arcEndCap == "-round")
44
96
  painter.arc(
45
- // (圆心x,圆心y,半径,开始角度,结束角度,true逆时针/false顺时针)
46
- cx, cy, r1, beginA, endA, false)
47
- // 结尾
48
- if (config.arcEndCap != 'round')
49
- painter.lineTo(endOuterX, endOuterY)
50
- else
51
- painter.arc((endInnerX + endOuterX) * 0.5, (endInnerY + endOuterY) * 0.5, r, endA - Math.PI, endA, true)
52
- painter.arc(cx, cy, r2, endA, beginA, true)
53
- // 开头
54
- if (config.arcStartCap != 'round')
55
- painter.lineTo(begInnerX, begInnerY);
56
- else
57
- painter.arc((begInnerX + begOuterX) * 0.5, (begInnerY + begOuterY) * 0.5, r, beginA, beginA - Math.PI, true)
58
- })
59
- if (config.arcStartCap == 'butt') painter.closePath()
60
- return painter
97
+ (endInnerX + endOuterX) * 0.5,
98
+ (endInnerY + endOuterY) * 0.5,
99
+ r,
100
+ endA - Math.PI,
101
+ endA,
102
+ false
103
+ )
104
+ else painter.lineTo(endOuterX, endOuterY)
105
+
106
+ painter.arc(cx, cy, r2, endA, beginA, true)
107
+ // 开头
108
+ if (config.arcStartCap == "round")
109
+ painter.arc(
110
+ (begInnerX + begOuterX) * 0.5,
111
+ (begInnerY + begOuterY) * 0.5,
112
+ r,
113
+ beginA,
114
+ beginA - Math.PI,
115
+ true
116
+ )
117
+ else if (config.arcStartCap == "-round")
118
+ painter.arc(
119
+ (begInnerX + begOuterX) * 0.5,
120
+ (begInnerY + begOuterY) * 0.5,
121
+ r,
122
+ beginA,
123
+ beginA - Math.PI,
124
+ false
125
+ )
126
+ else painter.lineTo(begInnerX, begInnerY)
127
+ }
128
+ )
129
+ if (config.arcStartCap == "butt") painter.closePath()
130
+ return painter
61
131
  }
62
132
 
63
133
  // 画圆统一设置方法
64
- export let initCircle = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
65
- painter.beginPath()
66
- painter.moveTo(cx + r, cy)
67
- painter.arc(cx, cy, r, 0, Math.PI * 2)
68
- return painter
69
- }
134
+ export let initCircle = function (
135
+ painter: CanvasRenderingContext2D,
136
+ cx: number,
137
+ cy: number,
138
+ r: number
139
+ ) {
140
+ painter.beginPath()
141
+ painter.moveTo(cx + r, cy)
142
+ painter.arc(cx, cy, r, 0, Math.PI * 2)
143
+ return painter
144
+ };
70
145
 
71
146
  // 画矩形统一设置方法
72
- export let initRect = function (painter: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {
73
- painter.beginPath()
74
- painter.rect(x, y, width, height)
75
- return painter
147
+ export let initRect = function (
148
+ painter: CanvasRenderingContext2D,
149
+ x: number,
150
+ y: number,
151
+ width: number,
152
+ height: number
153
+ ) {
154
+ painter.beginPath()
155
+ painter.rect(x, y, width, height)
156
+ return painter
76
157
  }
@@ -0,0 +1,29 @@
1
+ // 线性渐变
2
+ export let linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
3
+ let gradient = painter.createLinearGradient(x0, y0, x1, y1)
4
+ let enhanceGradient = {
5
+ "value": function () {
6
+ return gradient
7
+ },
8
+ "setColor": function (stop: number, color: string) {
9
+ gradient.addColorStop(stop, color)
10
+ return enhanceGradient
11
+ }
12
+ };
13
+ return enhanceGradient
14
+ }
15
+
16
+ // 环形渐变
17
+ export let radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
18
+ let gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
19
+ let enhanceGradient = {
20
+ "value": function () {
21
+ return gradient
22
+ },
23
+ "setColor": function (stop: number, color: string) {
24
+ gradient.addColorStop(stop, color)
25
+ return enhanceGradient
26
+ }
27
+ }
28
+ return enhanceGradient
29
+ }