dolphin-weex-ui 2.2.0 → 2.2.1

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.
@@ -1,15 +1,7 @@
1
1
  <template>
2
- <div
3
- ref="bar-container"
4
- class="slider-bar-container"
5
- :style="containerStyle">
6
- <div
7
- class="range-bar"
8
- :style="rangeBarStyle">
9
- <div
10
- ref="value-bar"
11
- class="value-bar"
12
- :style="valueBarStyle">
2
+ <div ref="bar-container" class="slider-bar-container" :style="containerStyle">
3
+ <div class="range-bar" :style="rangeBarStyle">
4
+ <div ref="value-bar" class="value-bar" :style="valueBarStyle">
13
5
  <div></div>
14
6
  </div>
15
7
  </div>
@@ -22,7 +14,8 @@
22
14
  @touchend="weexEndHandler"
23
15
  @horizontalpan="weexHandler1"
24
16
  :prevent-move-event="preventMoveEvent"
25
- :style="blockStyle1">
17
+ :style="blockStyle1"
18
+ >
26
19
  <div></div>
27
20
  </div>
28
21
  <div
@@ -35,563 +28,593 @@
35
28
  @touchend="weexEndHandler"
36
29
  @horizontalpan="weexHandler2"
37
30
  :prevent-move-event="preventMoveEvent"
38
- :style="blockStyle2">
31
+ :style="blockStyle2"
32
+ >
39
33
  <div></div>
40
34
  </div>
41
35
  </div>
42
36
  </template>
43
37
 
44
38
  <script>
45
- import Utils from '../utils';
46
- import BindEnv from '../utils/bind-env';
47
- import Binding from 'weex-bindingx/lib/index.weex.js';
48
-
49
- const animation = weex.requireModule('animation');
50
- const dom = weex.requireModule('dom');
51
-
52
- export default {
53
- data: () => ({
54
- env: 'weex',
55
- diffX1: 0,
56
- diffX2: 0,
57
- barWidth: 0,
58
- preventMoveEvent: true,
59
- minDist: 0,
60
- // selectRange: [0, 0],
61
- blockRadius: 28,
62
- DPR: 1,
63
- timeout: 100,
64
- isAndroid: Utils.env.isAndroid()
65
- }),
66
- props: {
67
- selectRange: {
68
- type: Array,
69
- default: [0, 0]
70
- },
71
- length: {
72
- type: Number,
73
- default: 500
74
- },
75
- height: {
76
- type: Number,
77
- default: 4
78
- },
79
- // 是否双滑块模式
80
- range: {
81
- type: Boolean,
82
- default: false
83
- },
84
- // 最小值
85
- min: {
86
- type: Number,
87
- default: 0
88
- },
89
- // 最大值
90
- max: {
91
- type: Number,
92
- default: 100
93
- },
94
- // 最小取值范围,用于范围选择范围最小差值
95
- minDiff: {
96
- type: Number,
97
- default: 5
98
- },
99
- // 设置当前取值。当 range 为 false 时,使用 number,否则用 [number, number]
100
- value: {
101
- type: [Number, Array],
102
- default: 0
103
- },
104
- // 设置初始取值。当 range 为 false 时,使用 number,否则用 [number, number]
105
- defaultValue: {
106
- type: [Number, Array],
107
- default: 0
108
- },
109
- // 值为 true 时,滑块为禁用状态
110
- disabled: {
111
- type: Boolean,
112
- default: false
113
- },
114
- invalidColor: {
115
- type: String,
116
- default: '#E0E0E0'
117
- },
118
- validColor: {
119
- type: String,
120
- default: '#267AFF'
121
- },
122
- disabledColor: {
123
- type: String,
124
- default: '#AAA'
125
- }
39
+ import Utils from '../utils'
40
+ import BindEnv from '../utils/bind-env'
41
+ import Binding from 'weex-bindingx/lib/index.weex.js'
42
+
43
+ const animation = weex.requireModule('animation')
44
+ const dom = weex.requireModule('dom')
45
+
46
+ export default {
47
+ data: () => ({
48
+ env: 'weex',
49
+ diffX1: 0,
50
+ diffX2: 0,
51
+ barWidth: 0,
52
+ preventMoveEvent: true,
53
+ minDist: 0,
54
+ // selectRange: [0, 0],
55
+ blockRadius: 28,
56
+ DPR: 1,
57
+ timeout: 100,
58
+ isAndroid: Utils.env.isAndroid()
59
+ }),
60
+ props: {
61
+ selectRange: {
62
+ type: Array,
63
+ default: () => [0, 0]
126
64
  },
127
- watch: {
128
- value(e) {
129
- if (!this.range) {
130
- this.diffX1 = this._getDiffX(e || this.defaultValue);
131
- } else {
132
- this.diffX1 = this._getDiffX(e[0] || this.defaultValue[0]);
133
- this.diffX2 = this._getDiffX(e[1] || this.defaultValue[1]);
134
- this.barWidth = this.diffX2 - this.diffX1;
135
- }
136
- }
65
+ length: {
66
+ type: Number,
67
+ default: 500
137
68
  },
138
- created() {
139
- if (Utils.env.isWeb()) {
140
- this.env = 'web';
141
- this.DPR = window.devicePixelRatio ? window.devicePixelRatio : 1;
142
- } else {
143
- this.DPR = weex.config.env.scale;
144
- }
69
+ height: {
70
+ type: Number,
71
+ default: 4
145
72
  },
146
- mounted() {
147
- this.block1 = this.$refs['slide-block-1']; // 左侧滑块
148
- this.block2 = this.$refs['slide-block-2']; // 右侧滑块
149
- this.valueBar = this.$refs['value-bar']; // 黄色值条
150
- this.barContainer = this.$refs['bar-container']; // 滚动条容器
151
-
73
+ // 是否双滑块模式
74
+ range: {
75
+ type: Boolean,
76
+ default: false
77
+ },
78
+ // 最小值
79
+ min: {
80
+ type: Number,
81
+ default: 0
82
+ },
83
+ // 最大值
84
+ max: {
85
+ type: Number,
86
+ default: 100
87
+ },
88
+ // 最小取值范围,用于范围选择范围最小差值
89
+ minDiff: {
90
+ type: Number,
91
+ default: 5
92
+ },
93
+ // 设置当前取值。当 range 为 false 时,使用 number,否则用 [number, number]
94
+ value: {
95
+ type: [Number, Array],
96
+ default: 0
97
+ },
98
+ // 设置初始取值。当 range 为 false 时,使用 number,否则用 [number, number]
99
+ defaultValue: {
100
+ type: [Number, Array],
101
+ default: 0
102
+ },
103
+ // 值为 true 时,滑块为禁用状态
104
+ disabled: {
105
+ type: Boolean,
106
+ default: false
107
+ },
108
+ invalidColor: {
109
+ type: String,
110
+ default: '#E0E0E0'
111
+ },
112
+ validColor: {
113
+ type: String,
114
+ default: '#267AFF'
115
+ },
116
+ disabledColor: {
117
+ type: String,
118
+ default: '#AAA'
119
+ }
120
+ },
121
+ watch: {
122
+ value(e) {
152
123
  if (!this.range) {
153
- this.diffX1 = this._getDiffX(this.value || this.defaultValue);
124
+ this.diffX1 = this._getDiffX(e || this.defaultValue)
154
125
  } else {
155
- this.diffX1 = this._getDiffX(this.value[0] || this.defaultValue[0]);
156
- this.diffX2 = this._getDiffX(this.value[1] || this.defaultValue[1]);
157
- this.barWidth = this.diffX2 - this.diffX1;
126
+ this.diffX1 = this._getDiffX(e[0] || this.defaultValue[0])
127
+ this.diffX2 = this._getDiffX(e[1] || this.defaultValue[1])
128
+ this.barWidth = this.diffX2 - this.diffX1
158
129
  }
130
+ }
131
+ },
132
+ created() {
133
+ if (Utils.env.isWeb()) {
134
+ this.env = 'web'
135
+ // this.DPR = window.devicePixelRatio ? window.devicePixelRatio : 1;
136
+ this.DPR = 2
137
+ } else {
138
+ this.DPR = weex.config.env.scale
139
+ }
140
+ },
141
+ mounted() {
142
+ this.block1 = this.$refs['slide-block-1'] // 左侧滑块
143
+ this.block2 = this.$refs['slide-block-2'] // 右侧滑块
144
+ this.valueBar = this.$refs['value-bar'] // 黄色值条
145
+ this.barContainer = this.$refs['bar-container'] // 滚动条容器
146
+
147
+ if (!this.range) {
148
+ this.diffX1 = this._getDiffX(this.value || this.defaultValue)
149
+ } else {
150
+ this.diffX1 = this._getDiffX(this.value[0] || this.defaultValue[0])
151
+ this.diffX2 = this._getDiffX(this.value[1] || this.defaultValue[1])
152
+ this.barWidth = this.diffX2 - this.diffX1
153
+ }
159
154
 
160
- // 是否支持expresstionBinding
161
- if (BindEnv.supportsEB() && Binding.prepare) {
162
- this.block1 && Binding.prepare({
155
+ // 是否支持expresstionBinding
156
+ if (BindEnv.supportsEB() && Binding.prepare) {
157
+ this.block1 &&
158
+ Binding.prepare({
163
159
  anchor: this.block1.ref,
164
160
  eventType: 'pan'
165
- });
166
- this.block2 && Binding.prepare({
161
+ })
162
+ this.block2 &&
163
+ Binding.prepare({
167
164
  anchor: this.block2.ref,
168
165
  eventType: 'pan'
169
- });
170
- this.valueBar && Binding.prepare({
166
+ })
167
+ this.valueBar &&
168
+ Binding.prepare({
171
169
  anchor: this.valueBar.ref,
172
170
  eventType: 'pan'
173
- });
174
- }
171
+ })
172
+ }
175
173
 
176
- if (this.range) {
177
- this.selectRange = this.value || this.defaultValue; // 初始化范围选择返回数据
178
- this.minDist = (this.minDiff / (this.max - this.min)) * this.length; // 滑块1、2之前最小间距
179
- }
174
+ if (this.range) {
175
+ this.selectRange = this.value || this.defaultValue // 初始化范围选择返回数据
176
+ this.minDist = (this.minDiff / (this.max - this.min)) * this.length // 滑块1、2之前最小间距
177
+ }
180
178
 
181
- // 由于weex在mounted后渲染是异步的不能确保元素渲染完成,需要异步执行
182
- setTimeout(() => {
183
- dom.getComponentRect(this.barContainer, option => {
184
- const { left } = option.size;
185
- this.leftDiffX = left;
186
- });
187
- }, 100);
179
+ // 由于weex在mounted后渲染是异步的不能确保元素渲染完成,需要异步执行
180
+ setTimeout(() => {
181
+ dom.getComponentRect(this.barContainer, option => {
182
+ const { left } = option.size
183
+ this.leftDiffX = left
184
+ })
185
+ }, 100)
186
+ },
187
+
188
+ computed: {
189
+ containerStyle() {
190
+ return {
191
+ width: `${this.length + 56}px`,
192
+ // height: '56px'
193
+ height: '64px'
194
+ }
188
195
  },
196
+ rangeBarStyle() {
197
+ return {
198
+ width: `${this.length}px`,
199
+ height: `${this.height}px`,
200
+ flexDirection: 'row',
201
+ backgroundColor: this.invalidColor
202
+ }
203
+ },
204
+ valueBarStyle() {
205
+ let left = 0
206
+ let width = 0
189
207
 
190
- computed: {
191
- containerStyle() {
192
- return {
193
- width: `${this.length + 56}px`,
194
- // height: '56px'
195
- height: '64px'
196
- };
197
- },
198
- rangeBarStyle() {
199
- return {
200
- width: `${this.length}px`,
201
- height: `${this.height}px`,
202
- flexDirection: 'row',
203
- backgroundColor: this.invalidColor
204
- };
205
- },
206
- valueBarStyle() {
207
- let left = 0;
208
- let width = 0;
209
-
210
- if (!this.range) {
211
- left = this.diffX1 - this.length;
212
- width = this.length;
213
- } else {
214
- left = this.diffX1;
215
- width = this.diffX2 - this.diffX1;
216
- }
208
+ if (!this.range) {
209
+ left = this.diffX1 - this.length
210
+ width = this.length
211
+ } else {
212
+ left = this.diffX1
213
+ width = this.diffX2 - this.diffX1
214
+ }
217
215
 
218
- return {
219
- width: width + 'px',
220
- height: this.height + 'px',
221
- transform: `translateX(${left}px)`,
222
- backgroundColor: this.disabled ? this.disabledColor : this.validColor
223
- };
224
- },
225
- blockStyle1() {
226
- const left = this.diffX1;
227
- return {
228
- transform: `translateX(${left}px)`
229
- };
230
- },
231
- blockStyle2() {
232
- return {
233
- transform: `translateX(${this.diffX2}px)`
234
- };
216
+ return {
217
+ width: width + 'px',
218
+ height: this.height + 'px',
219
+ transform: `translateX(${left}px)`,
220
+ backgroundColor: this.disabled ? this.disabledColor : this.validColor
235
221
  }
236
222
  },
237
- methods: {
238
-
239
- // 更新单选值或最小值
240
- weexHandler1(e) {
241
- const self = this;
242
- switch (e.state) {
223
+ blockStyle1() {
224
+ const left = this.diffX1
225
+ return {
226
+ transform: `translateX(${left}px)`
227
+ }
228
+ },
229
+ blockStyle2() {
230
+ return {
231
+ transform: `translateX(${this.diffX2}px)`
232
+ }
233
+ }
234
+ },
235
+ methods: {
236
+ // 更新单选值或最小值
237
+ weexHandler1(e) {
238
+ const self = this
239
+ switch (e.state) {
243
240
  case 'start':
244
- self.bindBlock1();
245
- break;
241
+ self.bindBlock1()
242
+ break
246
243
  case 'move':
247
244
  dom.getComponentRect(this.block1, option => {
248
- const { left } = option.size;
249
- const value = this._getValue(left - this.leftDiffX);
250
- if (!this.range) {
251
- this.$emit('updateValue', value);
252
- } else {
253
- this.selectRange[0] = value;
254
- this.$emit('updateValue', this.selectRange);
255
- }
256
- });
257
- break;
245
+ const { left } = option.size
246
+ const value = this._getValue(left - this.leftDiffX)
247
+ if (!this.range) {
248
+ this.$emit('updateValue', value)
249
+ } else {
250
+ this.selectRange[0] = value
251
+ this.$emit('updateValue', this.selectRange)
252
+ }
253
+ })
254
+ break
258
255
  case 'end':
259
- break;
256
+ break
260
257
  default:
261
- break;
262
- }
263
- },
258
+ break
259
+ }
260
+ },
264
261
 
265
- // 更新最大值
266
- weexHandler2(e) {
267
- const self = this;
262
+ // 更新最大值
263
+ weexHandler2(e) {
264
+ const self = this
268
265
 
269
- switch (e.state) {
266
+ switch (e.state) {
270
267
  case 'start':
271
- self.bindBlock2();
272
- break;
268
+ self.bindBlock2()
269
+ break
273
270
  case 'move':
274
271
  dom.getComponentRect(this.block2, option => {
275
- const { left } = option.size;
276
- this.selectRange[1] = this._getValue(left - this.leftDiffX);
277
- this.$emit('updateValue', this.selectRange);
278
- });
279
- break;
272
+ const { left } = option.size
273
+ this.selectRange[1] = this._getValue(left - this.leftDiffX)
274
+ this.$emit('updateValue', this.selectRange)
275
+ })
276
+ break
280
277
  case 'end':
281
- break;
278
+ break
282
279
  default:
283
- break;
284
- }
285
- },
280
+ break
281
+ }
282
+ },
286
283
 
287
- weexStartHandler1() {
288
- // 由于android端不支持 horizontalpan 的move事件,使用setInterval hack方案
289
- if (!this.isAndroid) {
290
- return;
291
- }
292
- this.firstInterval = setInterval(() => {
293
- dom.getComponentRect(this.block1, option => {
294
- const { left } = option.size;
295
- const value = this._getValue(left - this.leftDiffX);
296
- if (!this.range) {
297
- this.$emit('updateValue', value);
298
- } else {
299
- this.selectRange[0] = value;
300
- this.$emit('updateValue', this.selectRange);
301
- }
302
- });
303
- }, this.timeout);
304
- },
284
+ weexStartHandler1() {
285
+ // 由于android端不支持 horizontalpan 的move事件,使用setInterval hack方案
286
+ if (!this.isAndroid) {
287
+ return
288
+ }
289
+ this.firstInterval = setInterval(() => {
290
+ dom.getComponentRect(this.block1, option => {
291
+ const { left } = option.size
292
+ const value = this._getValue(left - this.leftDiffX)
293
+ if (!this.range) {
294
+ this.$emit('updateValue', value)
295
+ } else {
296
+ this.selectRange[0] = value
297
+ this.$emit('updateValue', this.selectRange)
298
+ }
299
+ })
300
+ }, this.timeout)
301
+ },
305
302
 
306
- weexStartHandler2() {
307
- if (!this.isAndroid) {
308
- return;
309
- }
310
- // 由于android端不支持 horizontalpan 的move事件,使用setInterval hack方案
311
- this.secondInterval = setInterval(() => {
312
- dom.getComponentRect(this.block2, option => {
313
- const { left } = option.size;
314
- this.selectRange[1] = this._getValue(left - this.leftDiffX);
315
- this.$emit('updateValue', this.selectRange);
316
- });
317
- }, this.timeout);
318
- },
319
-
320
- // 清除定时器
321
- weexEndHandler() {
322
- if (!this.isAndroid) {
323
- return;
324
- }
325
- this.firstInterval && clearInterval(this.firstInterval);
326
- this.secondInterval && clearInterval(this.secondInterval);
327
- },
303
+ weexStartHandler2() {
304
+ if (!this.isAndroid) {
305
+ return
306
+ }
307
+ // 由于android端不支持 horizontalpan 的move事件,使用setInterval hack方案
308
+ this.secondInterval = setInterval(() => {
309
+ dom.getComponentRect(this.block2, option => {
310
+ const { left } = option.size
311
+ this.selectRange[1] = this._getValue(left - this.leftDiffX)
312
+ this.$emit('updateValue', this.selectRange)
313
+ })
314
+ }, this.timeout)
315
+ },
328
316
 
329
- webStartHandler(e) {
330
- if (this.env === 'weex') {
331
- return;
332
- }
333
- this.startX = e.touch.clientX;
334
- this.startDiffX1 = this.diffX1;
335
- this.startDiffX2 = this.diffX2;
336
- },
337
-
338
- webMoveHandler1(e) {
339
- if (this.env === 'weex' || this.disabled) {
340
- return;
341
- }
317
+ // 清除定时器
318
+ weexEndHandler() {
319
+ if (!this.isAndroid) {
320
+ return
321
+ }
322
+ this.firstInterval && clearInterval(this.firstInterval)
323
+ this.secondInterval && clearInterval(this.secondInterval)
324
+ },
342
325
 
343
- const deltaX = (e.touch.clientX - this.startX) * this.DPR;
344
- const diff = this.startDiffX1 + deltaX;
326
+ webStartHandler(e) {
327
+ if (this.env === 'weex') {
328
+ return
329
+ }
330
+ this.startX = e.changedTouches[0].pageX
331
+ this.startDiffX1 = this.diffX1
332
+ this.startDiffX2 = this.diffX2
333
+ },
345
334
 
346
- let max = this.length;
347
- if (this.range) {
348
- max = this.diffX2 - this.minDist;
349
- }
335
+ webMoveHandler1(e) {
336
+ if (this.env === 'weex' || this.disabled) {
337
+ return
338
+ }
339
+
340
+ const deltaX = (e.changedTouches[0].pageX - this.startX) * this.DPR
341
+ const diff = this.startDiffX1 + deltaX
342
+
343
+ let max = this.length
344
+ if (this.range) {
345
+ max = this.diffX2 - this.minDist
346
+ }
350
347
 
351
- if (diff > 0 && diff < max) {
352
- this.diffX1 = diff;
353
- animation.transition(this.block1, {
348
+ if (diff > 0 && diff < max) {
349
+ this.diffX1 = diff
350
+ animation.transition(
351
+ this.block1,
352
+ {
354
353
  styles: {
355
354
  transform: `translateX(${this.diffX1}px)`
356
355
  }
357
- }, () => {});
358
- if (!this.range) {
359
- this.$emit('updateValue', this._getValue(this.diffX1));
360
- } else {
361
- this.selectRange[0] = this._getValue(this.diffX1);
362
- this.$emit('updateValue', this.selectRange);
363
- }
356
+ },
357
+ () => {}
358
+ )
359
+ if (!this.range) {
360
+ this.$emit('updateValue', this._getValue(this.diffX1))
361
+ } else {
362
+ this.selectRange[0] = this._getValue(this.diffX1)
363
+ this.$emit('updateValue', this.selectRange)
364
364
  }
365
- },
365
+ }
366
+ },
366
367
 
367
- webMoveHandler2(e) {
368
- if (this.env === 'weex' || this.disabled) {
369
- return;
370
- }
368
+ webMoveHandler2(e) {
369
+ if (this.env === 'weex' || this.disabled) {
370
+ return
371
+ }
371
372
 
372
- const deltaX = (e.touch.clientX - this.startX) * this.DPR;
373
- const diff = this.startDiffX2 + deltaX;
374
- const min = this.diffX1 + this.minDist;
375
- const max = this.length;
373
+ const deltaX = (e.changedTouches[0].pageX - this.startX) * this.DPR
374
+ const diff = this.startDiffX2 + deltaX
375
+ const min = this.diffX1 + this.minDist
376
+ const max = this.length
376
377
 
377
- if (diff > min && diff < max) {
378
- this.diffX2 = diff;
379
- animation.transition(this.block2, {
378
+ if (diff > min && diff < max) {
379
+ this.diffX2 = diff
380
+ animation.transition(
381
+ this.block2,
382
+ {
380
383
  styles: {
381
384
  transform: `translateX(${this.diffX2}px)`
382
385
  }
383
- }, () => {});
384
- if (!this.range) {
385
- this.$emit('updateValue', this._getValue(this.diffX2));
386
- } else {
387
- this.selectRange[1] = this._getValue(this.diffX2);
388
- this.$emit('updateValue', this.selectRange);
389
- }
390
- }
391
- },
392
-
393
- bindBlock1() {
394
- const self = this;
395
-
396
- // 如果禁用,不行进行表达式绑定
397
- if (self.disabled) {
398
- Binding.unbind({
399
- token: this.gesToken1,
400
- eventType: 'pan'
401
- });
402
- this.gesToken1 = 0;
403
- return;
404
- }
405
-
406
- // 初始化按钮&条的大小范围
407
- let blockMax1 = 0;
408
- if (self.range) {
409
- blockMax1 = self.diffX2 - self.minDist;
386
+ },
387
+ () => {}
388
+ )
389
+ if (!this.range) {
390
+ this.$emit('updateValue', this._getValue(this.diffX2))
410
391
  } else {
411
- blockMax1 = self.length;
392
+ this.selectRange[1] = this._getValue(this.diffX2)
393
+ this.$emit('updateValue', this.selectRange)
412
394
  }
395
+ }
396
+ },
397
+
398
+ bindBlock1() {
399
+ const self = this
400
+
401
+ // 如果禁用,不行进行表达式绑定
402
+ if (self.disabled) {
403
+ Binding.unbind({
404
+ token: this.gesToken1,
405
+ eventType: 'pan'
406
+ })
407
+ this.gesToken1 = 0
408
+ return
409
+ }
410
+
411
+ // 初始化按钮&条的大小范围
412
+ let blockMax1 = 0
413
+ if (self.range) {
414
+ blockMax1 = self.diffX2 - self.minDist
415
+ } else {
416
+ blockMax1 = self.length
417
+ }
413
418
 
414
- const barMax1 = self.diffX2;
419
+ const barMax1 = self.diffX2
415
420
 
416
- if (!self.range) {
417
- const startLeft = self.diffX1 - blockMax1 - self.minDist;
421
+ if (!self.range) {
422
+ const startLeft = self.diffX1 - blockMax1 - self.minDist
418
423
 
419
- const props = [{
424
+ const props = [
425
+ {
420
426
  element: self.block1.ref,
421
427
  property: 'transform.translateX',
422
428
  expression: `min(${blockMax1}, max(x + ${self.diffX1}, 0))`
423
- }, {
429
+ },
430
+ {
424
431
  element: self.valueBar.ref,
425
432
  property: 'transform.translateX',
426
433
  expression: `min(0, max(x + ${startLeft}, -${blockMax1}))`
427
- }];
434
+ }
435
+ ]
428
436
 
429
- const gesTokenObj = Binding.bind({
437
+ const gesTokenObj = Binding.bind(
438
+ {
430
439
  anchor: self.block1.ref,
431
440
  eventType: 'pan',
432
441
  props
433
- }, (e) => {
442
+ },
443
+ e => {
434
444
  if (e.state === 'end' || e.state === 'cancel' || e.state === 'exit') {
435
- const range = self.getRange();
445
+ const range = self.getRange()
436
446
  // 限制diffX1范围
437
- self.diffX1 = self._restrictValue(range.rangeX1, self.diffX1 + e.deltaX);
438
- self.bindBlock1();
447
+ self.diffX1 = self._restrictValue(range.rangeX1, self.diffX1 + e.deltaX)
448
+ self.bindBlock1()
439
449
  }
440
- });
441
- this.gesToken1 = gesTokenObj.token;
442
- } else {
443
- // 选范围
444
- const props = [{
450
+ }
451
+ )
452
+ this.gesToken1 = gesTokenObj.token
453
+ } else {
454
+ // 选范围
455
+ const props = [
456
+ {
445
457
  element: self.block1.ref,
446
458
  property: 'transform.translateX',
447
459
  expression: `min(${blockMax1}, max(x + ${self.diffX1}, 0))`
448
- }, {
460
+ },
461
+ {
449
462
  element: self.valueBar.ref,
450
463
  property: 'transform.translateX',
451
464
  expression: `min(${blockMax1}, max(x + ${self.diffX1}, 0))`
452
- }, {
465
+ },
466
+ {
453
467
  element: self.valueBar.ref,
454
468
  property: 'width',
455
469
  expression: `min(${barMax1}, max(0, ${self.barWidth} - x))`
456
- }];
470
+ }
471
+ ]
457
472
 
458
- const gesTokenObj = Binding.bind({
473
+ const gesTokenObj = Binding.bind(
474
+ {
459
475
  anchor: self.block1.ref,
460
476
  eventType: 'pan',
461
477
  props
462
- }, (e) => {
478
+ },
479
+ e => {
463
480
  if (e.state === 'end' || e.state === 'cancel' || e.state === 'exit') {
464
- const range = self.getRange();
465
- self.barWidth = self._restrictValue(range.rangeX1, self.barWidth - e.deltaX);
466
- self.diffX1 = self._restrictValue(range.rangeX1, self.diffX1 + e.deltaX);
467
- self.bindBlock1();
481
+ const range = self.getRange()
482
+ self.barWidth = self._restrictValue(range.rangeX1, self.barWidth - e.deltaX)
483
+ self.diffX1 = self._restrictValue(range.rangeX1, self.diffX1 + e.deltaX)
484
+ self.bindBlock1()
468
485
  }
469
- });
470
- this.gesToken1 = gesTokenObj.token;
471
- }
472
- },
473
-
474
- bindBlock2() {
475
- const self = this;
476
-
477
- // 如果禁用,不行进行表达式绑定
478
- if (self.disabled) {
479
- Binding.unbind({
480
- token: this.gesToken2,
481
- eventType: 'pan'
482
- });
483
- this.gesToken2 = 0;
484
- return;
485
- }
486
+ }
487
+ )
488
+ this.gesToken1 = gesTokenObj.token
489
+ }
490
+ },
486
491
 
487
- // 初始化按钮&条的大小范围
488
- let blockMax1 = 0;
489
- if (self.range) {
490
- blockMax1 = self.diffX2 - self.minDist;
491
- } else {
492
- blockMax1 = self.length;
493
- }
492
+ bindBlock2() {
493
+ const self = this
494
+
495
+ // 如果禁用,不行进行表达式绑定
496
+ if (self.disabled) {
497
+ Binding.unbind({
498
+ token: this.gesToken2,
499
+ eventType: 'pan'
500
+ })
501
+ this.gesToken2 = 0
502
+ return
503
+ }
494
504
 
495
- const blockMax2 = self.length;
496
- const blockMin2 = self.diffX1 + self.minDist;
497
- const barMax2 = self.length - self.diffX1;
505
+ // 初始化按钮&条的大小范围
506
+ let blockMax1 = 0
507
+ if (self.range) {
508
+ blockMax1 = self.diffX2 - self.minDist
509
+ } else {
510
+ blockMax1 = self.length
511
+ }
498
512
 
499
- const props = [{
513
+ const blockMax2 = self.length
514
+ const blockMin2 = self.diffX1 + self.minDist
515
+ const barMax2 = self.length - self.diffX1
516
+
517
+ const props = [
518
+ {
500
519
  element: self.block2.ref,
501
520
  property: 'transform.translateX',
502
521
  expression: `min(${blockMax2}, max(x + ${self.diffX2}, ${blockMin2}))`
503
- }, {
522
+ },
523
+ {
504
524
  element: self.valueBar.ref,
505
525
  property: 'width',
506
526
  expression: `min(${barMax2}, max(0, x + ${self.barWidth}))`
507
- }];
527
+ }
528
+ ]
508
529
 
509
- const gesTokenObj = Binding.bind({
530
+ const gesTokenObj = Binding.bind(
531
+ {
510
532
  anchor: self.block2.ref,
511
533
  eventType: 'pan',
512
534
  props
513
- }, (e) => {
535
+ },
536
+ e => {
514
537
  if (e.state === 'end' || e.state === 'cancel' || e.state === 'exit') {
515
- const range = self.getRange();
516
- self.barWidth = self._restrictValue([0, self.length - self.diffX1], self.barWidth + e.deltaX);
517
- self.diffX2 = self._restrictValue(range.rangeX2, self.diffX2 + e.deltaX);
518
- self.bindBlock2();
538
+ const range = self.getRange()
539
+ self.barWidth = self._restrictValue([0, self.length - self.diffX1], self.barWidth + e.deltaX)
540
+ self.diffX2 = self._restrictValue(range.rangeX2, self.diffX2 + e.deltaX)
541
+ self.bindBlock2()
519
542
  }
520
- });
521
- this.gesToken2 = gesTokenObj.token;
522
- },
543
+ }
544
+ )
545
+ this.gesToken2 = gesTokenObj.token
546
+ },
523
547
 
524
- // 获取diffx1 diffx2 取值范围
525
- getRange() {
526
- if (!this.range) {
527
- return {
528
- rangeX1: [0, this.length]
529
- };
530
- } else {
531
- return {
532
- rangeX1: [0, this.diffX2 - this.minDist],
533
- rangeX2: [this.diffX1 + this.minDist, this.length]
534
- };
548
+ // 获取diffx1 diffx2 取值范围
549
+ getRange() {
550
+ if (!this.range) {
551
+ return {
552
+ rangeX1: [0, this.length]
535
553
  }
536
- },
537
-
538
- // 限制取值范围
539
- _restrictValue(range, value) {
540
- if (range && range.length && range.length === 2) {
541
- if (value < range[0]) {
542
- return range[0];
543
- } else if (value > range[1]) {
544
- return range[1];
545
- } else {
546
- return value;
547
- }
554
+ } else {
555
+ return {
556
+ rangeX1: [0, this.diffX2 - this.minDist],
557
+ rangeX2: [this.diffX1 + this.minDist, this.length]
548
558
  }
549
- return;
550
- },
551
-
552
- // 根据x方向偏移量计算value
553
- _getValue(diffX) {
554
- return Math.round((diffX / this.length) * (this.max - this.min) + this.min);
555
- },
556
-
557
- // 根据value和length计算x方向偏移值
558
- _getDiffX(value) {
559
- return ((value - this.min) / (this.max - this.min)) * this.length;
560
559
  }
561
- }
562
- };
563
- </script>
564
-
565
- <style scoped>
566
- .slider-bar-container {
567
- /* 拿掉高度 add by hairong */
568
- /* height: 56px; */
569
- justify-content: center;
570
- align-items: center;
571
- overflow: hidden;
572
- }
560
+ },
573
561
 
562
+ // 限制取值范围
563
+ _restrictValue(range, value) {
564
+ if (range && range.length && range.length === 2) {
565
+ if (value < range[0]) {
566
+ return range[0]
567
+ } else if (value > range[1]) {
568
+ return range[1]
569
+ } else {
570
+ return value
571
+ }
572
+ }
573
+ return
574
+ },
574
575
 
575
- .range-bar{
576
- overflow: hidden;
577
- }
576
+ // 根据x方向偏移量计算value
577
+ _getValue(diffX) {
578
+ return Math.round((diffX / this.length) * (this.max - this.min) + this.min)
579
+ },
578
580
 
579
- .value-bar {
580
- height: 4px;
581
- overflow: hidden;
581
+ // 根据value和length计算x方向偏移值
582
+ _getDiffX(value) {
583
+ return ((value - this.min) / (this.max - this.min)) * this.length
584
+ }
582
585
  }
586
+ }
587
+ </script>
583
588
 
584
- .slide-block {
585
- width: 44px;
586
- height: 44px;
587
- background-color: #ffffff;
588
- border-radius: 50%;
589
- border-width: 1px;
590
- border-color: rgba(0, 0, 0, 0.1);
591
- position: absolute;
592
- left: 0;
593
- /* bottom: 0; */
594
- bottom: 10px;
595
- box-shadow: 2px 3px 3px #999;
596
- }
589
+ <style scoped>
590
+ .slider-bar-container {
591
+ /* 拿掉高度 add by hairong */
592
+ /* height: 56px; */
593
+ justify-content: center;
594
+ align-items: center;
595
+ overflow: hidden;
596
+ }
597
+
598
+ .range-bar {
599
+ overflow: hidden;
600
+ }
601
+
602
+ .value-bar {
603
+ height: 4px;
604
+ overflow: hidden;
605
+ }
606
+
607
+ .slide-block {
608
+ width: 44px;
609
+ height: 44px;
610
+ background-color: #ffffff;
611
+ border-radius: 50%;
612
+ border-width: 1px;
613
+ border-color: rgba(0, 0, 0, 0.1);
614
+ position: absolute;
615
+ left: 0;
616
+ /* bottom: 0; */
617
+ bottom: 10px;
618
+ box-shadow: 2px 3px 3px #999;
619
+ }
597
620
  </style>