Aresn 90898271ec [bugfix] Stepper: fixed when step is a decimals sometimes (#283)
* fixed when step is a decimals sometimes

* Update index.js
2018-05-30 16:19:46 +08:00

77 lines
1.5 KiB
JavaScript

// Note that the bitwise operators and shift operators operate on 32-bit ints
// so in that case, the max safe integer is 2^31-1, or 2147483647
const VERY_LARGE_NUMBER = 2147483647;
Component({
properties: {
size: String,
stepper: {
type: Number,
value: 1
},
min: {
type: Number,
value: 1
},
max: {
type: Number,
value: VERY_LARGE_NUMBER
},
step: {
type: Number,
value: 1
}
},
methods: {
handleZanStepperChange(e, type) {
const { dataset = {} } = e.currentTarget;
const { disabled } = dataset;
const { step } = this.data;
let { stepper } = this.data;
if (disabled) return null;
if (type === 'minus') {
stepper -= step;
} else if (type === 'plus') {
stepper += step;
}
if (stepper < this.data.min || stepper > this.data.max) return null;
this.triggerEvent('change', stepper);
this.triggerEvent(type);
},
handleZanStepperMinus(e) {
this.handleZanStepperChange(e, 'minus');
},
handleZanStepperPlus(e) {
this.handleZanStepperChange(e, 'plus');
},
handleZanStepperBlur(e) {
let { value } = e.detail;
const { min, max } = this.data;
if (!value) {
setTimeout(() => {
this.triggerEvent('change', min);
}, 16);
return;
}
value = +value;
if (value > max) {
value = max;
} else if (value < min) {
value = min;
}
this.triggerEvent('change', value);
}
}
});