@tuya-miniapp/smart-ui 2.1.10 → 2.1.11-beta-2
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.
- package/dist/action-sheet/index.css +1 -1
- package/dist/action-sheet/index.js +0 -8
- package/dist/action-sheet/index.wxml +1 -1
- package/dist/action-sheet/index.wxss +1 -1
- package/dist/cell/index.js +10 -4
- package/dist/common/utils.d.ts +1 -0
- package/dist/common/utils.js +6 -0
- package/dist/datetime-picker/demo/index.js +20 -0
- package/dist/datetime-picker/index.js +92 -14
- package/dist/datetime-picker/index.wxml +1 -0
- package/dist/field/index.js +1 -1
- package/dist/icon/index.wxs +3 -1
- package/dist/notice-bar/index.js +1 -1
- package/dist/picker/demo/index.js +1 -0
- package/dist/picker/index.wxml +2 -1
- package/dist/picker/shared.d.ts +4 -0
- package/dist/picker/shared.js +4 -0
- package/dist/picker-column/index.css +1 -1
- package/dist/picker-column/index.js +154 -44
- package/dist/picker-column/index.wxml +22 -11
- package/dist/picker-column/index.wxs +22 -5
- package/dist/picker-column/index.wxss +1 -1
- package/dist/stepper/index.js +2 -0
- package/dist/tag/index.js +1 -1
- package/lib/action-sheet/index.css +1 -1
- package/lib/action-sheet/index.js +0 -8
- package/lib/action-sheet/index.wxml +1 -1
- package/lib/action-sheet/index.wxss +1 -1
- package/lib/cell/index.js +15 -9
- package/lib/common/utils.d.ts +1 -0
- package/lib/common/utils.js +8 -1
- package/lib/datetime-picker/demo/index.js +20 -0
- package/lib/datetime-picker/index.js +97 -18
- package/lib/datetime-picker/index.wxml +1 -0
- package/lib/field/index.js +2 -2
- package/lib/icon/index.wxs +3 -1
- package/lib/notice-bar/index.js +2 -2
- package/lib/picker/demo/index.js +1 -0
- package/lib/picker/index.wxml +2 -1
- package/lib/picker/shared.d.ts +4 -0
- package/lib/picker/shared.js +4 -0
- package/lib/picker-column/index.css +1 -1
- package/lib/picker-column/index.js +192 -44
- package/lib/picker-column/index.wxml +22 -11
- package/lib/picker-column/index.wxs +22 -5
- package/lib/picker-column/index.wxss +1 -1
- package/lib/stepper/index.js +2 -0
- package/lib/tag/index.js +2 -2
- package/package.json +3 -3
@@ -23,13 +23,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
var component_1 = require("../common/component");
|
24
24
|
var validator_1 = require("../common/validator");
|
25
25
|
var shared_1 = require("../picker/shared");
|
26
|
+
var utils_1 = require("../common/utils");
|
26
27
|
var currentYear = new Date().getFullYear();
|
27
28
|
function isValidDate(date) {
|
28
29
|
return (0, validator_1.isDef)(date) && !isNaN(new Date(date).getTime());
|
29
30
|
}
|
30
|
-
function range(num, min, max) {
|
31
|
-
return Math.min(Math.max(num, min), max);
|
32
|
-
}
|
33
31
|
function padZero(val) {
|
34
32
|
return "00".concat(val).slice(-2);
|
35
33
|
}
|
@@ -73,6 +71,18 @@ var defaultFormatter = function (type, value) {
|
|
73
71
|
}, formatter: {
|
74
72
|
type: null,
|
75
73
|
value: defaultFormatter,
|
74
|
+
}, AMText: {
|
75
|
+
type: String,
|
76
|
+
value: 'AM',
|
77
|
+
}, PMText: {
|
78
|
+
type: String,
|
79
|
+
value: 'PM',
|
80
|
+
}, columnsOrder: {
|
81
|
+
type: Array,
|
82
|
+
value: [],
|
83
|
+
}, is12HoursTime: {
|
84
|
+
type: Boolean,
|
85
|
+
value: false,
|
76
86
|
}, minDate: {
|
77
87
|
type: Number,
|
78
88
|
value: new Date(currentYear - 10, 0, 1).getTime(),
|
@@ -97,8 +107,12 @@ var defaultFormatter = function (type, value) {
|
|
97
107
|
type: Number,
|
98
108
|
value: 59,
|
99
109
|
observer: 'updateValue',
|
110
|
+
}, formatterMap: {
|
111
|
+
type: Object,
|
112
|
+
value: undefined,
|
100
113
|
} }),
|
101
114
|
data: {
|
115
|
+
part: 0,
|
102
116
|
innerValue: Date.now(),
|
103
117
|
columns: [],
|
104
118
|
},
|
@@ -129,18 +143,34 @@ var defaultFormatter = function (type, value) {
|
|
129
143
|
}
|
130
144
|
return this.picker;
|
131
145
|
},
|
146
|
+
formatterFunc: function (type, value) {
|
147
|
+
var _a;
|
148
|
+
var _b;
|
149
|
+
var _c = this.data, formatterMap = _c.formatterMap, _d = _c.formatter, formatter = _d === void 0 ? defaultFormatter : _d;
|
150
|
+
var mapDetail = formatterMap === null || formatterMap === void 0 ? void 0 : formatterMap[type];
|
151
|
+
if (typeof mapDetail === 'string') {
|
152
|
+
return (0, utils_1.replacePlaceholders)(mapDetail, (_a = {}, _a[type] = value, _a));
|
153
|
+
}
|
154
|
+
if (typeof mapDetail === 'object') {
|
155
|
+
return (_b = mapDetail[value]) !== null && _b !== void 0 ? _b : formatter(type, value);
|
156
|
+
}
|
157
|
+
return formatter(type, value);
|
158
|
+
},
|
132
159
|
updateColumns: function () {
|
133
|
-
var
|
160
|
+
var _this = this;
|
161
|
+
var locale = this.data.locale;
|
134
162
|
var results = this.getOriginColumns().map(function (column) { return ({
|
135
|
-
values: column.values.map(function (value) { return
|
163
|
+
values: column.values.map(function (value) { return _this.formatterFunc(column.type, value); }),
|
164
|
+
order: column.order,
|
136
165
|
unit: locale === null || locale === void 0 ? void 0 : locale[column.type],
|
137
166
|
}); });
|
138
167
|
return this.set({ columns: results });
|
139
168
|
},
|
140
169
|
getOriginColumns: function () {
|
141
|
-
var
|
142
|
-
var results = this.getRanges().map(function (_a) {
|
170
|
+
var _a = this.data, filter = _a.filter, is12HoursTime = _a.is12HoursTime, type = _a.type, AMText = _a.AMText, PMText = _a.PMText, columnsOrder = _a.columnsOrder;
|
171
|
+
var results = this.getRanges().map(function (_a, index) {
|
143
172
|
var type = _a.type, range = _a.range;
|
173
|
+
var order = columnsOrder[index];
|
144
174
|
var values = times(range[1] - range[0] + 1, function (index) {
|
145
175
|
var value = range[0] + index;
|
146
176
|
return type === 'year' ? "".concat(value) : padZero(value);
|
@@ -148,12 +178,37 @@ var defaultFormatter = function (type, value) {
|
|
148
178
|
if (filter) {
|
149
179
|
values = filter(type, values);
|
150
180
|
}
|
151
|
-
return { type: type, values: values };
|
181
|
+
return { type: type, values: values, order: order };
|
152
182
|
});
|
183
|
+
if (is12HoursTime && type === 'time') {
|
184
|
+
return __spreadArray([
|
185
|
+
{
|
186
|
+
type: '12hours',
|
187
|
+
values: [AMText, PMText],
|
188
|
+
order: columnsOrder[0],
|
189
|
+
}
|
190
|
+
], results.map(function (item, index) { return (__assign(__assign({}, item), { order: columnsOrder[index + 1] })); }), true).filter(Boolean);
|
191
|
+
}
|
153
192
|
return results;
|
154
193
|
},
|
155
194
|
getRanges: function () {
|
156
195
|
var data = this.data;
|
196
|
+
if (data.type === 'time' && data.is12HoursTime) {
|
197
|
+
var part = data.part;
|
198
|
+
return [
|
199
|
+
{
|
200
|
+
type: 'hour',
|
201
|
+
range: [
|
202
|
+
Math.max(part ? 13 : 1, data.minHour) - (part ? 12 : 0),
|
203
|
+
Math.min(part ? 24 : 12, data.maxHour) - (part ? 12 : 0),
|
204
|
+
],
|
205
|
+
},
|
206
|
+
{
|
207
|
+
type: 'minute',
|
208
|
+
range: [data.minMinute, data.maxMinute],
|
209
|
+
},
|
210
|
+
];
|
211
|
+
}
|
157
212
|
if (data.type === 'time') {
|
158
213
|
return [
|
159
214
|
{
|
@@ -210,8 +265,8 @@ var defaultFormatter = function (type, value) {
|
|
210
265
|
// time type
|
211
266
|
if (!isDateType) {
|
212
267
|
var _a = value.split(':'), hour = _a[0], minute = _a[1];
|
213
|
-
hour = padZero(range(hour, data.minHour, data.maxHour));
|
214
|
-
minute = padZero(range(minute, data.minMinute, data.maxMinute));
|
268
|
+
hour = padZero((0, utils_1.range)(hour, data.minHour, data.maxHour));
|
269
|
+
minute = padZero((0, utils_1.range)(minute, data.minMinute, data.maxMinute));
|
215
270
|
return "".concat(hour, ":").concat(minute);
|
216
271
|
}
|
217
272
|
// date type
|
@@ -265,14 +320,26 @@ var defaultFormatter = function (type, value) {
|
|
265
320
|
var data = this.data;
|
266
321
|
var value;
|
267
322
|
var picker = this.getPicker();
|
268
|
-
var
|
269
|
-
if (data.type === 'time') {
|
270
|
-
var indexes =
|
323
|
+
var indexes = picker.getIndexes();
|
324
|
+
if (data.type === 'time' && data.is12HoursTime) {
|
325
|
+
var part = indexes[0], hour = indexes[1], minute = indexes[2];
|
326
|
+
this.setData({
|
327
|
+
part: part,
|
328
|
+
});
|
329
|
+
var originColumns = this.getOriginColumns();
|
330
|
+
value = "".concat((part ? 12 : 0) +
|
331
|
+
Number(originColumns[1].values[hour > originColumns[1].values.length - 1 ? originColumns[1].values.length - 1 : hour]), ":").concat(Number(originColumns[2].values[minute > originColumns[2].values.length - 1
|
332
|
+
? originColumns[2].values.length - 1
|
333
|
+
: minute]));
|
334
|
+
}
|
335
|
+
else if (data.type === 'time') {
|
336
|
+
var originColumns = this.getOriginColumns();
|
271
337
|
value = "".concat(+originColumns[0].values[indexes[0]], ":").concat(+originColumns[1].values[indexes[1]]);
|
272
338
|
}
|
273
339
|
else {
|
274
|
-
var
|
275
|
-
var
|
340
|
+
var originColumns_1 = this.getOriginColumns();
|
341
|
+
var indexes_1 = picker.getIndexes();
|
342
|
+
var values = indexes_1.map(function (value, index) { return originColumns_1[index].values[value]; });
|
276
343
|
var year = getTrueValue(values[0]);
|
277
344
|
var month = getTrueValue(values[1]);
|
278
345
|
var maxDate = getMonthEndDay(year, month);
|
@@ -298,10 +365,22 @@ var defaultFormatter = function (type, value) {
|
|
298
365
|
updateColumnValue: function (value) {
|
299
366
|
var _this = this;
|
300
367
|
var values = [];
|
301
|
-
var
|
302
|
-
var formatter = this.
|
368
|
+
var _a = this.data, type = _a.type, is12HoursTime = _a.is12HoursTime;
|
369
|
+
var formatter = this.formatterFunc;
|
303
370
|
var picker = this.getPicker();
|
304
|
-
if (type === 'time') {
|
371
|
+
if (type === 'time' && is12HoursTime) {
|
372
|
+
var _b = value.split(':'), hour = _b[0], minute = _b[1];
|
373
|
+
var part = Number(hour) > 0 && Number(hour) < 13 ? 0 : 1;
|
374
|
+
this.setData({
|
375
|
+
part: part,
|
376
|
+
});
|
377
|
+
values = [
|
378
|
+
part,
|
379
|
+
formatter('hour', part ? (!hour ? 12 : hour - 12) : hour),
|
380
|
+
formatter('minute', minute),
|
381
|
+
];
|
382
|
+
}
|
383
|
+
else if (type === 'time') {
|
305
384
|
var pair = value.split(':');
|
306
385
|
values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
|
307
386
|
}
|
@@ -10,6 +10,7 @@
|
|
10
10
|
visible-item-count="{{ visibleItemCount }}"
|
11
11
|
confirm-button-text="{{ confirmButtonText }}"
|
12
12
|
cancel-button-text="{{ cancelButtonText }}"
|
13
|
+
change-animation="{{ changeAnimation }}"
|
13
14
|
bind:change="onChange"
|
14
15
|
bind:confirm="onConfirm"
|
15
16
|
bind:cancel="onCancel"
|
package/lib/field/index.js
CHANGED
@@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
var utils_1 = require("../common/utils");
|
18
18
|
var component_1 = require("../common/component");
|
19
19
|
var props_1 = require("./props");
|
20
|
-
var
|
20
|
+
var Xmark_js_1 = __importDefault(require("@tuya-miniapp/icons/dist/svg/Xmark.js"));
|
21
21
|
(0, component_1.SmartComponent)({
|
22
22
|
field: true,
|
23
23
|
classes: ['input-class', 'right-icon-class', 'label-class'],
|
@@ -40,7 +40,7 @@ var Xmark_1 = __importDefault(require("@tuya-miniapp/icons/dist/svg/Xmark"));
|
|
40
40
|
value: '6.2em',
|
41
41
|
}, clearIcon: {
|
42
42
|
type: String,
|
43
|
-
value:
|
43
|
+
value: Xmark_js_1.default,
|
44
44
|
}, extraEventParams: {
|
45
45
|
type: Boolean,
|
46
46
|
value: false,
|
package/lib/icon/index.wxs
CHANGED
@@ -14,7 +14,7 @@ function rootClass(data) {
|
|
14
14
|
var classes = ['custom-class'];
|
15
15
|
|
16
16
|
if (data.classPrefix !== 'smart-icon') {
|
17
|
-
classes.push('smart-icon--custom')
|
17
|
+
classes.push('smart-icon--custom');
|
18
18
|
}
|
19
19
|
|
20
20
|
if (data.classPrefix != null) {
|
@@ -54,6 +54,8 @@ function svgStyle(data) {
|
|
54
54
|
{
|
55
55
|
'-webkit-mask-image': imageBase64Src,
|
56
56
|
'-webkit-mask-size': 'contain',
|
57
|
+
'-webkit-mask-repeat': 'no-repeat',
|
58
|
+
'-webkit-mask-position': 'center',
|
57
59
|
'mask-image': imageBase64Src,
|
58
60
|
'mask-size': 'contain',
|
59
61
|
width: data.size,
|
package/lib/notice-bar/index.js
CHANGED
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
var component_1 = require("../common/component");
|
7
7
|
var utils_1 = require("../common/utils");
|
8
|
-
var
|
8
|
+
var Xmark_js_1 = __importDefault(require("@tuya-miniapp/icons/dist/svg/Xmark.js"));
|
9
9
|
var Right_1 = __importDefault(require("@tuya-miniapp/icons/dist/svg/Right"));
|
10
10
|
(0, component_1.SmartComponent)({
|
11
11
|
props: {
|
@@ -83,7 +83,7 @@ var Right_1 = __importDefault(require("@tuya-miniapp/icons/dist/svg/Right"));
|
|
83
83
|
wrapable: Boolean,
|
84
84
|
},
|
85
85
|
data: {
|
86
|
-
Xmark:
|
86
|
+
Xmark: Xmark_js_1.default,
|
87
87
|
Right: Right_1.default,
|
88
88
|
show: true,
|
89
89
|
},
|
package/lib/picker/demo/index.js
CHANGED
@@ -51,6 +51,7 @@ var toast_1 = __importDefault(require("../../toast/toast"));
|
|
51
51
|
methods: {
|
52
52
|
onChange1: function (event) {
|
53
53
|
var _a = event.detail, value = _a.value, index = _a.index;
|
54
|
+
console.log("Value: ".concat(value, ", Index\uFF1A").concat(index));
|
54
55
|
(0, toast_1.default)({
|
55
56
|
context: this,
|
56
57
|
message: "Value: ".concat(value, ", Index\uFF1A").concat(index),
|
package/lib/picker/index.wxml
CHANGED
@@ -19,10 +19,11 @@
|
|
19
19
|
data-index="{{ index }}"
|
20
20
|
custom-class="column-class"
|
21
21
|
value-key="{{ valueKey }}"
|
22
|
-
style="{{ item.style }}"
|
22
|
+
style="order: {{ item.order }}; {{ item.style }}"
|
23
23
|
active-style="{{ activeStyle }}"
|
24
24
|
options="{{ item.values }}"
|
25
25
|
unit="{{ item.unit || unit }}"
|
26
|
+
changeAnimation="{{ changeAnimation }}"
|
26
27
|
default-index="{{ item.defaultIndex || defaultIndex }}"
|
27
28
|
active-index="{{ item.activeIndex || activeIndex }}"
|
28
29
|
item-height="{{ itemHeight }}"
|
package/lib/picker/shared.d.ts
CHANGED
package/lib/picker/shared.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
@import '../common/index.css';.smart-picker-column{color:var(--picker-option-selected-text-color,var(--app-B6-N1,#000));font-size:var(--picker-option-font-size,16px);font-weight:var(--font-weight-bold,500);position:relative;
|
1
|
+
@import '../common/index.css';.smart-picker-column{color:var(--picker-option-selected-text-color,var(--app-B6-N1,#000));font-size:var(--picker-option-font-size,16px);font-weight:var(--font-weight-bold,500);text-align:center}.smart-picker-column,.smart-picker-column__offset{position:relative;width:100%}.smart-picker-column__visual{position:absolute;top:0;width:100%}.smart-picker-column__item{pointer-events:none}.smart-picker-column__item--selected{color:var(--picker-option-selected-text-color,var(--app-B6-N1,#000));font-weight:var(--font-weight-bold,500)}.smart-picker-column__item--disabled{opacity:var(--picker-option-disabled-opacity,.3)}.smart-picker-column__mask{background:transparent;display:flex;flex-direction:column;height:100%;position:absolute;top:0;width:100%;z-index:10}.smart-picker-column__mask__item{flex:1}.smart-picker-column__unit{align-items:center;display:flex;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);width:100%}.smart-picker-column__unit_text{color:var(--picker-option-unit-text-color,var(--app-B6-N4,rgba(0,0,0,.4)));font-size:var(--picker-option-unit-font-size,12px)}.smart-picker-column__unit_hidden{opacity:0}.smart-picker-column__max-text{font-weight:var(--font-weight-bold,500);opacity:0}
|
@@ -1,9 +1,54 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
15
|
+
function step(op) {
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
20
|
+
switch (op[0]) {
|
21
|
+
case 0: case 1: t = op; break;
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
25
|
+
default:
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
30
|
+
if (t[2]) _.ops.pop();
|
31
|
+
_.trys.pop(); continue;
|
32
|
+
}
|
33
|
+
op = body.call(thisArg, _);
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
36
|
+
}
|
37
|
+
};
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
40
|
+
if (ar || !(i in from)) {
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
42
|
+
ar[i] = from[i];
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
46
|
+
};
|
2
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
48
|
var component_1 = require("../common/component");
|
4
49
|
var utils_1 = require("../common/utils");
|
5
50
|
var validator_1 = require("../common/validator");
|
6
|
-
var DEFAULT_DURATION =
|
51
|
+
var DEFAULT_DURATION = 400;
|
7
52
|
(0, component_1.SmartComponent)({
|
8
53
|
classes: ['active-class'],
|
9
54
|
props: {
|
@@ -27,11 +72,15 @@ var DEFAULT_DURATION = 200;
|
|
27
72
|
type: Number,
|
28
73
|
value: 0,
|
29
74
|
},
|
75
|
+
changeAnimation: {
|
76
|
+
type: Boolean,
|
77
|
+
value: true,
|
78
|
+
},
|
30
79
|
activeIndex: {
|
31
80
|
type: Number,
|
32
81
|
value: -1,
|
33
82
|
observer: function (index) {
|
34
|
-
this.setIndex(index, false,
|
83
|
+
this.setIndex(index, false, this.data.changeAnimation);
|
35
84
|
},
|
36
85
|
},
|
37
86
|
unit: {
|
@@ -50,57 +99,158 @@ var DEFAULT_DURATION = 200;
|
|
50
99
|
renderStart: 0,
|
51
100
|
animate: false,
|
52
101
|
maxText: '',
|
102
|
+
timer: null,
|
103
|
+
// animationIndex: -1,
|
104
|
+
preOffsetList: [],
|
53
105
|
},
|
54
106
|
created: function () {
|
55
107
|
var _a = this.data, defaultIndex = _a.defaultIndex, activeIndex = _a.activeIndex, options = _a.options;
|
56
108
|
this.updateUint(options);
|
57
|
-
this.setIndex(activeIndex !== -1 ? activeIndex : defaultIndex, false,
|
109
|
+
this.setIndex(activeIndex !== -1 ? activeIndex : defaultIndex, false, this.data.changeAnimation);
|
58
110
|
},
|
59
111
|
methods: {
|
60
112
|
getCount: function () {
|
61
113
|
return this.data.options.length;
|
62
114
|
},
|
63
115
|
onTouchStart: function (event) {
|
116
|
+
if (this.data.timer) {
|
117
|
+
clearTimeout(this.data.timer);
|
118
|
+
this.setData({
|
119
|
+
timer: null,
|
120
|
+
});
|
121
|
+
}
|
64
122
|
this.setData({
|
65
123
|
startY: event.touches[0].clientY,
|
66
124
|
startOffset: this.data.offset,
|
67
|
-
duration:
|
125
|
+
duration: 100,
|
126
|
+
timer: null,
|
127
|
+
preOffsetList: [this.data.offset],
|
68
128
|
});
|
69
129
|
},
|
70
130
|
onTouchMove: function (event) {
|
71
131
|
var data = this.data;
|
132
|
+
var preOffsetList = data.preOffsetList;
|
72
133
|
var deltaY = event.touches[0].clientY - data.startY;
|
134
|
+
var offset = (0, utils_1.range)(data.startOffset + deltaY, -(this.getCount() * data.itemHeight), data.itemHeight);
|
135
|
+
var direction = this.checkIsDown(offset);
|
136
|
+
// 上一次滚动的索引
|
137
|
+
var preIndex = (0, utils_1.range)(Math.round(-preOffsetList[preOffsetList.length - 1] / data.itemHeight), 0, this.getCount() - 1);
|
138
|
+
// 最终定位索引
|
139
|
+
var index = (0, utils_1.range)(Math.round(-offset / data.itemHeight), 0, this.getCount() - 1);
|
140
|
+
if ((direction === 'up' && index < data.renderStart + 8) ||
|
141
|
+
(direction === 'down' && index > data.renderStart + data.renderNum - 8)) {
|
142
|
+
this.updateVisibleOptions(index);
|
143
|
+
}
|
144
|
+
// 索引变化时 粗发震动反馈
|
145
|
+
if (index !== preIndex) {
|
146
|
+
// @ts-ignore
|
147
|
+
this.vibrateShort();
|
148
|
+
}
|
149
|
+
// const animationIndex = Math.abs(-offset / data.itemHeight);
|
73
150
|
this.setData({
|
74
|
-
offset:
|
151
|
+
offset: offset,
|
152
|
+
// animationIndex: animationIndex,
|
153
|
+
preOffsetList: __spreadArray(__spreadArray([], data.preOffsetList, true), [offset], false),
|
154
|
+
animate: false,
|
75
155
|
});
|
76
156
|
},
|
77
157
|
onTouchEnd: function () {
|
158
|
+
return __awaiter(this, void 0, void 0, function () {
|
159
|
+
var data, preOffsetList, preOffset, isSameTouch, direction, offset, countHeight, animationOffset, finOffset, index, offsetData, countVibrate;
|
160
|
+
var _this = this;
|
161
|
+
return __generator(this, function (_a) {
|
162
|
+
switch (_a.label) {
|
163
|
+
case 0:
|
164
|
+
data = this.data;
|
165
|
+
preOffsetList = data.preOffsetList;
|
166
|
+
preOffset = Math.max(Math.abs(preOffsetList[preOffsetList.length - 3] - preOffsetList[preOffsetList.length - 4]), Math.abs(preOffsetList[preOffsetList.length - 2] - preOffsetList[preOffsetList.length - 3]), Math.abs(preOffsetList[preOffsetList.length - 1] - preOffsetList[preOffsetList.length - 2]));
|
167
|
+
if (isNaN(preOffset))
|
168
|
+
preOffset = 0;
|
169
|
+
preOffset = Math.min(preOffset, 40);
|
170
|
+
isSameTouch = (preOffsetList[preOffsetList.length - 1] === preOffsetList[preOffsetList.length - 2] &&
|
171
|
+
preOffsetList[preOffsetList.length - 2] === preOffsetList[preOffsetList.length - 3]) ||
|
172
|
+
preOffsetList[preOffsetList.length - 1] === -(this.getCount() * data.itemHeight) ||
|
173
|
+
preOffsetList[preOffsetList.length - 1] === data.itemHeight;
|
174
|
+
direction = this.checkIsDown();
|
175
|
+
offset = Math.abs(preOffset) < 3 || isSameTouch || !direction
|
176
|
+
? data.offset
|
177
|
+
: data.offset + (direction === 'down' ? -preOffset : preOffset) * 10;
|
178
|
+
countHeight = (this.getCount() - 1) * data.itemHeight;
|
179
|
+
animationOffset = (0, utils_1.range)(offset, -(this.getCount() * data.itemHeight), data.itemHeight);
|
180
|
+
finOffset = animationOffset < -countHeight ? -countHeight : animationOffset > 0 ? 0 : animationOffset;
|
181
|
+
index = (0, utils_1.range)(Math.round(-finOffset / data.itemHeight), 0, this.getCount() - 1);
|
182
|
+
offsetData = -index * data.itemHeight;
|
183
|
+
// 增加惯性音效
|
184
|
+
if (Math.abs(offsetData - data.offset) > data.itemHeight && !isSameTouch) {
|
185
|
+
countVibrate = Math.abs(offsetData - data.offset) / data.itemHeight;
|
186
|
+
// @ts-ignore
|
187
|
+
this.vibrateShort(Math.floor(countVibrate), 800);
|
188
|
+
}
|
189
|
+
// 最终定位索引
|
190
|
+
this.setData({
|
191
|
+
duration: isSameTouch ? 150 : 800,
|
192
|
+
// animationIndex: index,
|
193
|
+
offset: offsetData,
|
194
|
+
animate: true,
|
195
|
+
});
|
196
|
+
if (!((direction === 'up' && index < data.renderStart + 8) ||
|
197
|
+
(direction === 'down' && index > data.renderStart + data.renderNum - 8))) return [3 /*break*/, 2];
|
198
|
+
return [4 /*yield*/, this.updateVisibleOptions(index)];
|
199
|
+
case 1:
|
200
|
+
_a.sent();
|
201
|
+
_a.label = 2;
|
202
|
+
case 2:
|
203
|
+
// 更新索引
|
204
|
+
if (index !== data.currentIndex) {
|
205
|
+
this.setData({
|
206
|
+
timer: setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
207
|
+
return __generator(this, function (_a) {
|
208
|
+
this.setIndex(index, true, false);
|
209
|
+
return [2 /*return*/];
|
210
|
+
});
|
211
|
+
}); }, isSameTouch ? 150 : 800),
|
212
|
+
});
|
213
|
+
}
|
214
|
+
return [2 /*return*/];
|
215
|
+
}
|
216
|
+
});
|
217
|
+
});
|
218
|
+
},
|
219
|
+
checkIsDown: function (curr) {
|
78
220
|
var data = this.data;
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
221
|
+
var preOffsetList = data.preOffsetList;
|
222
|
+
var currOffset = curr === undefined ? preOffsetList[preOffsetList.length - 1] : curr;
|
223
|
+
var preOffset = curr === undefined
|
224
|
+
? preOffsetList[preOffsetList.length - 2]
|
225
|
+
: preOffsetList[preOffsetList.length - 1];
|
226
|
+
if (currOffset === undefined || preOffset === undefined || currOffset === preOffset)
|
227
|
+
return;
|
228
|
+
return currOffset < preOffset ? 'down' : 'up';
|
83
229
|
},
|
84
|
-
|
85
|
-
var
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
renderStart = Math.max(0, currentIndex - renderNum / 2);
|
92
|
-
var optionsV = options.slice(renderStart, renderStart + renderNum);
|
93
|
-
this.setData({ optionsV: optionsV, renderStart: renderStart, renderNum: renderNum, animate: false });
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
this.setData({ animate: false });
|
97
|
-
}
|
98
|
-
if (this.fireChange) {
|
99
|
-
this.$emit('change', currentIndex);
|
230
|
+
vibrateShort: function (count, time) {
|
231
|
+
var _this = this;
|
232
|
+
if (time === void 0) { time = 1000; }
|
233
|
+
if (!count) {
|
234
|
+
// @ts-ignore
|
235
|
+
ty.vibrateShort({ type: 'light' });
|
236
|
+
return;
|
100
237
|
}
|
238
|
+
var has = 0;
|
239
|
+
var timer = setInterval(function () {
|
240
|
+
if (has >= count) {
|
241
|
+
clearInterval(timer);
|
242
|
+
return;
|
243
|
+
}
|
244
|
+
has++;
|
245
|
+
_this.vibrateShort();
|
246
|
+
}, time / count - 20);
|
101
247
|
},
|
102
248
|
onClickItem: function (event) {
|
103
249
|
var index = event.currentTarget.dataset.index;
|
250
|
+
if (index === this.data.currentIndex || index < 0 || index > this.data.options.length - 1) {
|
251
|
+
return;
|
252
|
+
}
|
253
|
+
this.vibrateShort(Math.abs(index - this.data.currentIndex), DEFAULT_DURATION);
|
104
254
|
this.setIndex(index, true, true);
|
105
255
|
},
|
106
256
|
updateUint: function (options) {
|
@@ -122,7 +272,7 @@ var DEFAULT_DURATION = 200;
|
|
122
272
|
if (visibleItemCount < 20 && options.length > visibleItemCount) {
|
123
273
|
var renderNum = 0;
|
124
274
|
var renderStart = 0;
|
125
|
-
// 选项多于20个时,进行列表优化
|
275
|
+
// 选项多于 20 个时,进行列表优化
|
126
276
|
renderNum = Math.max(visibleItemCount * 2, 20);
|
127
277
|
renderStart = Math.max(0, targetIndex - renderNum / 2);
|
128
278
|
var renderEnd = Math.min(options.length, renderStart + renderNum);
|
@@ -161,36 +311,34 @@ var DEFAULT_DURATION = 200;
|
|
161
311
|
var data = this.data;
|
162
312
|
return (0, validator_1.isObj)(option) && data.valueKey in option ? option[data.valueKey] : option;
|
163
313
|
},
|
164
|
-
setIndex: function (index, userAction, animate) {
|
314
|
+
setIndex: function (index, userAction, animate, time) {
|
165
315
|
var _this = this;
|
316
|
+
if (time === void 0) { time = DEFAULT_DURATION; }
|
166
317
|
var data = this.data;
|
167
318
|
index = this.adjustIndex(index) || 0;
|
168
319
|
var offset = -index * data.itemHeight;
|
169
|
-
this.fireChange = false;
|
170
320
|
if (index !== data.currentIndex) {
|
171
321
|
// 需要动画的情况下,保持最大的截取
|
322
|
+
this.updateVisibleOptions(index);
|
172
323
|
if (animate) {
|
173
|
-
return this.
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
return;
|
185
|
-
}
|
186
|
-
_this.fireChange = true;
|
187
|
-
});
|
324
|
+
return this.set({
|
325
|
+
currentIndex: index,
|
326
|
+
// animationIndex: index,
|
327
|
+
offset: offset,
|
328
|
+
animate: true,
|
329
|
+
duration: time,
|
330
|
+
}).then(function () {
|
331
|
+
if (!userAction)
|
332
|
+
return;
|
333
|
+
console.log('change', index);
|
334
|
+
_this.$emit('change', index);
|
188
335
|
});
|
189
336
|
}
|
190
337
|
return this.set({
|
191
338
|
optionsV: data.options,
|
192
339
|
offset: offset,
|
193
340
|
currentIndex: index,
|
341
|
+
// animationIndex: index,
|
194
342
|
renderStart: 0,
|
195
343
|
animate: !!animate,
|
196
344
|
}).then(function () {
|
@@ -203,7 +351,7 @@ var DEFAULT_DURATION = 200;
|
|
203
351
|
var options = this.data.options;
|
204
352
|
for (var i = 0; i < options.length; i++) {
|
205
353
|
if (this.getOptionText(options[i]) === value) {
|
206
|
-
return this.setIndex(i, false,
|
354
|
+
return this.setIndex(i, false, this.data.changeAnimation);
|
207
355
|
}
|
208
356
|
}
|
209
357
|
return Promise.resolve();
|