easy-three-utils 0.0.395 → 0.0.396

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.
@@ -8,9 +8,22 @@ import Styles from './index.module.less'
8
8
 
9
9
  dayjs.extend(duration)
10
10
 
11
+ interface IControlEvent {
12
+ rewind: string
13
+ pause: 'PAUSE'
14
+ play: 'PLAY'
15
+ stop: 'STOP'
16
+ fastForward: string
17
+ }
18
+
11
19
  const Timeline: React.FC<{
12
- getViewer: () => Cesium.Viewer,
20
+ getViewer: () => Cesium.Viewer
13
21
  style?: React.CSSProperties
22
+ enabledControl?: boolean
23
+ onControlEvent?<T extends keyof IControlEvent>(type: T, value: IControlEvent[T]): void
24
+ onSliderChange?: (time: string) => void
25
+ onSpeedChange?: (speed: number) => void
26
+
14
27
  }> = memo((props) => {
15
28
 
16
29
  const { getViewer } = props
@@ -51,7 +64,7 @@ const Timeline: React.FC<{
51
64
  getViewer().clock.onTick.removeEventListener(setClockEvent)
52
65
  }
53
66
 
54
- const onSliderChange = (value: number) => {
67
+ const sliderChange = (value: number) => {
55
68
  setPercent(() => value)
56
69
  const totalSeconds = Cesium.JulianDate.secondsDifference(
57
70
  getViewer().clock.stopTime,
@@ -62,10 +75,13 @@ const Timeline: React.FC<{
62
75
  (value / 100) * totalSeconds,
63
76
  new Cesium.JulianDate()
64
77
  )
78
+
79
+ const nowDate = Cesium.JulianDate.toDate(newTime)
80
+ props.onSliderChange && props.onSliderChange(dayjs(nowDate).format('YYYY-MM-DD HH:mm:ss'))
81
+
65
82
  getViewer().clock.currentTime = newTime
66
83
  }
67
84
 
68
- type TContronType = 'rewind' | 'pause' | 'play' | 'stop' | 'fastForward'
69
85
  const control = {
70
86
  rewind: () => {
71
87
  getViewer().clock.currentTime = Cesium.JulianDate.addSeconds(
@@ -73,16 +89,23 @@ const Timeline: React.FC<{
73
89
  -30 * 60,
74
90
  new Cesium.JulianDate()
75
91
  )
92
+
93
+ const nowDate = dayjs(Cesium.JulianDate.toDate(getViewer().clock.currentTime))
94
+ props.onControlEvent && props.onControlEvent('rewind', dayjs(nowDate).format('YYYY-MM-DD HH:mm:ss'))
76
95
  },
77
96
  play: () => {
78
97
  getViewer().clock.shouldAnimate = true
98
+ props.onControlEvent && props.onControlEvent('play', 'PLAY')
79
99
  },
80
100
  pause: () => {
81
101
  getViewer().clock.shouldAnimate = false
102
+ props.onControlEvent && props.onControlEvent('pause', 'PAUSE')
82
103
  },
83
104
  stop: () => {
84
105
  getViewer().clock.currentTime = getViewer().clock.startTime
85
106
  getViewer().clock.shouldAnimate = false
107
+ props.onControlEvent && props.onControlEvent('stop', 'STOP')
108
+
86
109
  },
87
110
  fastForward: () => {
88
111
  getViewer().clock.currentTime = Cesium.JulianDate.addSeconds(
@@ -90,6 +113,9 @@ const Timeline: React.FC<{
90
113
  30 * 60,
91
114
  new Cesium.JulianDate()
92
115
  )
116
+
117
+ const nowDate = dayjs(Cesium.JulianDate.toDate(getViewer().clock.currentTime))
118
+ props.onControlEvent && props.onControlEvent('fastForward', dayjs(nowDate).format('YYYY-MM-DD HH:mm:ss'))
93
119
  }
94
120
  }
95
121
 
@@ -117,27 +143,31 @@ const Timeline: React.FC<{
117
143
  }}>
118
144
  <div className={Styles['slider-box']} style={{ ...props.style }}>
119
145
  <Slider
146
+ disabled={props.enabledControl === false}
120
147
  min={0}
121
148
  max={100}
122
149
  step={0.1}
123
150
  value={percent}
124
- onChange={(value: number) => onSliderChange(value)}
151
+ onChange={(value: number) => sliderChange(value)}
125
152
  />
126
153
  <div className={Styles['control']}>
127
154
  {
128
- (['rewind', 'pause', 'play', 'stop', 'fastForward'] as TContronType[]).map(item =>
155
+ props.enabledControl !== false && (['rewind', 'pause', 'play', 'stop', 'fastForward'] as (keyof IControlEvent)[]).map(item =>
129
156
  <img key={item} onClick={() => control[item]()} src={import.meta.env.MODE === 'development' ? (window as any).__POLT__URL__ + `/assets/image/${item}_01.png` : `/assets/image/${item}_01.png`} />
130
157
  )
131
158
  }
132
159
  <div className={Styles['control-box']}>
133
- <div className={Styles['control-input']}>
134
- <div style={{ minWidth: '45px' }}>倍速:</div>
135
- <Input value={speed} onInput={(e) => {
136
- setSpeed(Number((e.target as any).value))
137
- getViewer().clock.multiplier = Number((e.target as any).value)
138
- }}></Input>
139
- <div>X</div>
140
- </div>
160
+ {
161
+ props.enabledControl !== false && <div className={Styles['control-input']}>
162
+ <div style={{ minWidth: '45px' }}>倍速:</div>
163
+ <Input value={speed} onInput={(e) => {
164
+ setSpeed(Number((e.target as any).value))
165
+ getViewer().clock.multiplier = Number((e.target as any).value)
166
+ props.onSpeedChange && props.onSpeedChange(Number((e.target as any).value))
167
+ }}></Input>
168
+ <div>X</div>
169
+ </div>
170
+ }
141
171
  <div className={Styles['time-text']}><span style={{ color: '#00f2fe' }}>{currentTime}</span><div style={{ padding: "0 4px" }}>/</div>{totalTime}</div>
142
172
  </div>
143
173
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-three-utils",
3
- "version": "0.0.395",
3
+ "version": "0.0.396",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -8,5 +8,5 @@
8
8
  "author": "",
9
9
  "license": "ISC",
10
10
  "types": "./index.d.ts",
11
- "description": ""
11
+ "description": "修改时间轴,新增参数"
12
12
  }