Component({ properties: { value: { type: Number, value: 1, }, min: { type: Number, value: 1, }, max: { type: Number, value: 10000, }, step: { type: Number, value: 1 }, disabled: { type: Boolean, value: false }, index: { type: Number, value: 0 }, }, data: { }, methods: { //通过step属性设置每次点击增加或减少按钮时变化的值,默认为1 getScale() { let scale = 1; if (this.data.step != parseInt(this.data.step)) { //微信小程序的小数计算会出现偏差导致产生很长的无限循环的数,在这块处理一下。 scale = Math.pow(10, (this.data.step + '').split('.')[1].length) } return scale; }, //输入操作处理 blur: function (e) { let value = e.detail.value if (value) { value = +value if (value > this.data.max) { value = this.data.max } else if (value < this.data.min) { value = this.data.min } } else { value = this.data.min } if (value != this.data.value) { this.setData({ value: value }) } this.handleChange(value, "blur") }, calcNum: function (type) { if (this.data.disabled) { return } const scale = this.getScale() let num = this.data.value * scale let step = this.data.step * scale if (type === 'reduce') { num -= step } else if (type === 'plus') { num += step } let value = num / scale if (type === "plus" && value < this.data.min) { value = this.data.min } else if (type === "reduce" && value > this.data.max) { value = this.data.max } if (value < this.data.min || value > this.data.max) { return } this.handleChange(value, type) }, //增加按钮处理 plus: function () { this.calcNum("plus") }, //减少按钮处理 reduce: function () { this.calcNum("reduce") }, //事件绑定,返回值有三个,value:值 type:类型(输入,增加,减少) index(当前组件的索引) handleChange(value, type) { if (this.data.disabled) { return } this.triggerEvent('change', { value: value, type: type, index: this.data.index }) } } })