From 27016c4e21875b9e08e011fb7ce376bdcb8e6248 Mon Sep 17 00:00:00 2001 From: Y Date: Fri, 12 May 2023 13:22:16 +0800 Subject: [PATCH] feat(Slider): the step attribute supports decimals (#1990) * feat(Slider): the step attribute supports decimals * fix(slider): resolve emit same value --------- Co-authored-by: leejimqiu --- .../__virtualHostSnapshot__/demo.test.js.snap | 8 ++++---- .../__test__/__snapshots__/demo.test.js.snap | 2 ++ .../__virtualHostSnapshot__/demo.test.js.snap | 2 ++ src/slider/__test__/index.test.js | 3 --- src/slider/_example/base/index.js | 8 +++++++- src/slider/_example/base/index.wxml | 2 +- src/slider/slider.ts | 16 +++++++++------- src/slider/tool.ts | 3 --- 8 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/image-viewer/__test__/__virtualHostSnapshot__/demo.test.js.snap b/src/image-viewer/__test__/__virtualHostSnapshot__/demo.test.js.snap index e737bf1af..11e040c9c 100644 --- a/src/image-viewer/__test__/__virtualHostSnapshot__/demo.test.js.snap +++ b/src/image-viewer/__test__/__virtualHostSnapshot__/demo.test.js.snap @@ -7,7 +7,7 @@ exports[`ImageViewer ImageViewer base demo works fine 1`] = ` size="large" theme="primary" variant="outline" - bind:tap="clickHandle" + bind:tap="onClick" > 基础图片预览 @@ -34,12 +34,12 @@ exports[`ImageViewer ImageViewer delete demo works fine 1`] = ` size="large" theme="primary" variant="outline" - bind:tap="clickHandle" + bind:tap="onClick" > 带操作图片预览 - `; diff --git a/src/slider/__test__/__virtualHostSnapshot__/demo.test.js.snap b/src/slider/__test__/__virtualHostSnapshot__/demo.test.js.snap index 449b41ed5..2f708f508 100644 --- a/src/slider/__test__/__virtualHostSnapshot__/demo.test.js.snap +++ b/src/slider/__test__/__virtualHostSnapshot__/demo.test.js.snap @@ -4,6 +4,8 @@ exports[`Slider Slider base demo works fine 1`] = ` `; diff --git a/src/slider/__test__/index.test.js b/src/slider/__test__/index.test.js index b322fd03d..a50e1c958 100644 --- a/src/slider/__test__/index.test.js +++ b/src/slider/__test__/index.test.js @@ -239,8 +239,5 @@ describe('slider', () => { comp.setData({ value: 101 }); expect($slider.instance.data._value).toBe(100); - - comp.setData({ value: 'undefined' }); - expect($slider.instance.data._value).toBe(0); }); }); diff --git a/src/slider/_example/base/index.js b/src/slider/_example/base/index.js index b79c5124b..3c5898b61 100644 --- a/src/slider/_example/base/index.js +++ b/src/slider/_example/base/index.js @@ -1 +1,7 @@ -Component({}); +Component({ + methods: { + handleChange(e) { + console.log(e.detail.value); + }, + }, +}); diff --git a/src/slider/_example/base/index.wxml b/src/slider/_example/base/index.wxml index 69739144c..b2530f9d4 100644 --- a/src/slider/_example/base/index.wxml +++ b/src/slider/_example/base/index.wxml @@ -1 +1 @@ - + diff --git a/src/slider/slider.ts b/src/slider/slider.ts index 1d831ac0f..1a7285053 100644 --- a/src/slider/slider.ts +++ b/src/slider/slider.ts @@ -121,6 +121,8 @@ export default class Slider extends SuperComponent { }; triggerValue(value?: SliderValue) { + if (this.preval === value) return; + this.preval = value; this._trigger('change', { value: trimValue(value, this.properties), }); @@ -212,11 +214,12 @@ export default class Slider extends SuperComponent { stepValue(value: number): number { const { step, min, max } = this.properties; - - if (Number(step) < 1 || Number(step) > Number(max) - Number(min)) return value; - - const closestStep = trimSingleValue(Math.round(value / Number(step)) * Number(step), Number(min), Number(max)); - + const decimal = String(step).indexOf('.') > -1 ? String(step).length - String(step).indexOf('.') - 1 : 0; + const closestStep = trimSingleValue( + Number((Math.round(value / Number(step)) * Number(step)).toFixed(decimal)), + Number(min), + Number(max), + ); return closestStep as number; } @@ -236,13 +239,12 @@ export default class Slider extends SuperComponent { const { pageX } = touch; const currentLeft = pageX - initialLeft; let value = 0; - if (currentLeft <= 0) { value = Number(min); } else if (currentLeft >= maxRange) { value = Number(max); } else { - value = Math.round((currentLeft / maxRange) * (Number(max) - Number(min)) + Number(min)); + value = (currentLeft / maxRange) * (Number(max) - Number(min)) + Number(min); } return this.stepValue(value); } diff --git a/src/slider/tool.ts b/src/slider/tool.ts index a75768f0c..d15e5c0ee 100644 --- a/src/slider/tool.ts +++ b/src/slider/tool.ts @@ -13,9 +13,6 @@ * @return {number} */ export const trimSingleValue = (value: any, min: number, max: number): number => { - if (typeof value !== 'number') { - return min; - } if (value < min) { return min; }