ASEMiniProgram/dist/input-number/index.js

102 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2021-03-20 17:48:56 +00:00
function addNum (num1, num2) {
let sq1, sq2, m;
try {
sq1 = num1.toString().split('.')[1].length;
}
catch (e) {
sq1 = 0;
}
try {
sq2 = num2.toString().split('.')[1].length;
}
catch (e) {
sq2 = 0;
}
m = Math.pow(10, Math.max(sq1, sq2));
return (Math.round(num1 * m) + Math.round(num2 * m)) / m;
}
Component({
externalClasses: ['i-class'],
properties: {
// small || default || large
size: String,
value: {
type: Number,
value: 1
},
min: {
type: Number,
value: -Infinity
},
max: {
type: Number,
value: Infinity
},
step: {
type: Number,
value: 1
}
},
methods: {
handleChangeStep(e, type) {
const { dataset = {} } = e.currentTarget;
const { disabled } = dataset;
const { step } = this.data;
let { value } = this.data;
if (disabled) return null;
if (type === 'minus') {
value = addNum(value, -step);
} else if (type === 'plus') {
value = addNum(value, step);
}
if (value < this.data.min || value > this.data.max) return null;
this.handleEmit(value, type);
},
handleMinus(e) {
this.handleChangeStep(e, 'minus');
},
handlePlus(e) {
this.handleChangeStep(e, 'plus');
},
handleBlur(e) {
let { value } = e.detail;
const { min, max } = this.data;
if (!value) {
setTimeout(() => {
this.handleEmit(value);
}, 16);
return;
}
value = +value;
if (value > max) {
value = max;
} else if (value < min) {
value = min;
}
this.handleEmit(value);
},
handleEmit (value, type) {
const data = {
value: value
};
if (type) data.type = type;
this.triggerEvent('change', data);
}
}
});