浏览代码

fix: countup 修复

Ymm0008 3 年之前
父节点
当前提交
f9befaad0e

+ 6 - 6
src/packages/__VUE/countup/demo.vue

@@ -1,16 +1,16 @@
 <template>
   <div class="demo">
-    <h2>{{ translate('basic') }}</h2>
+    <!-- <h2>{{ translate('basic') }}</h2>
     <div class="show-demo">
       <nut-countup :init-num="0" :end-num="200"></nut-countup>
       <nut-countup :init-num="150.0" :end-num="0.0" :speed="6.18" :to-fixed="2"></nut-countup>
       <nut-countup :init-num="500.0" :end-num="0.0" :speed="50" :to-fixed="2"></nut-countup>
-    </div>
+    </div> -->
     <h2>{{ translate('title') }}</h2>
     <div class="show-demo">
       <nut-countup :scrolling="true" :init-num="18.618" :during="600"></nut-countup>
     </div>
-    <h2>{{ translate('title1') }}</h2>
+    <!-- <h2>{{ translate('title1') }}</h2>
     <div class="show-demo">
       <nut-countup
         :custom-change-num="customNumber"
@@ -42,7 +42,7 @@
         <nut-button type="danger" @click="startRole" :disabled="startFlag">{{ translate('btn1') }}</nut-button>
         <nut-button type="danger" @click="startRole2" :disabled="startFlag">{{ translate('btn2') }}</nut-button>
       </div>
-    </div>
+    </div> -->
   </div>
 </template>
 
@@ -59,7 +59,7 @@ const initTranslate = () =>
       title: '数字滚动',
       title1: '自定义滚动图片展示',
       title2: '抽奖(模拟滚动抽奖)',
-      btn1: '奖',
+      btn1: '奖',
       btn2: '不中奖'
     },
     'en-US': {
@@ -67,7 +67,7 @@ const initTranslate = () =>
       title: 'Digital scrolling',
       title1: 'Custom scrolling picture display',
       title2: 'Lottery (simulated rolling lottery)',
-      btn1: 'luck draw',
+      btn1: 'win the lottery',
       btn2: 'Not winning'
     }
   });

+ 75 - 50
src/packages/__VUE/countup/doc.en-US.md

@@ -85,55 +85,81 @@ export default {
 
 ```html
 <template>
-    <nut-countup
-        ref="countupMachineDom"
-        type="machine"
-        :machine-num="machineNum"
-        :machine-prize-num="5"
-        :machine-prize-level="prizeLevel"
-        :custom-bg-img="bgImage"
-        :num-width="100"
-        :num-height="100"
-        :during="3000"
-        @scroll-end="scrollAniEnd"
-    >
-    </nut-countup>
-    <nut-button @click="startRole" :disabled="startFlag">luck draw</nut-button>
+  <nut-countup
+    ref="countupMachineDom"
+    type="machine"
+    :machine-num="machineNum"
+    :machine-prize-num="5"
+    :machine-prize-level="prizeLevel"
+    :custom-bg-img="bgImage"
+    :num-width="100"
+    :num-height="100"
+    :during="3000"
+    @scroll-end="scrollAniEnd"
+  >
+  </nut-countup>
+  <div class="btnBtn">
+    <nut-button type="danger" @click="startRole" :disabled="startFlag">
+      中奖
+    </nut-button>
+    <nut-button type="danger" @click="startRole2" :disabled="startFlag">
+      不中奖
+    </nut-button>
+  </div>
 </template>
 <script>
-import { ref, onMounted } from 'vue';
+import { ref } from "vue";
 export default {
-    setup() {
-        const countupMachineDom = ref(null);
-        const startFlag = ref(false);
-        const machineNum = ref(3);
-        const bgImage = ref('https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png');
-        const prizeLevel = ref(0);
-        const startRole = () => {
-            prizeLevel.value = Math.floor(Math.random() * 5 + 1);
-            startFlag.value = true;
-            countupMachineDom.value.machineLuck();
-        };
-
-        const scrollAniEnd = () => {
-            console.log('Congratulations on winning the prize!!!');
-            setTimeout(() => {
-                startFlag.value = false;
-            }, 300);
-        }
-
-        return {
-            countupMachineDom,
-            startFlag,
-            machineNum,
-            bgImage,
-            prizeLevel,
-            startRole,
-            scrollAniEnd
-        }
-    }
+  setup() {
+    const countupMachineDom = ref(null);
+    const startFlag = ref(false);
+    const machineNum = ref(3);
+    const bgImage = ref(
+      "https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png"
+    );
+    const prizeLevel = ref(0);
+    const startRole = () => {
+      prizeLevel.value = Math.floor(Math.random() * 5 + 1);
+      startFlag.value = true;
+      countupMachineDom.value.machineLuck();
+    };
+    const startRole2 = () => {
+      prizeLevel.value = -1;
+      startFlag.value = true;
+      setTimeout(() => {
+        countupMachineDom.value.machineLuck();
+      }, 500);
+    };
+
+    const scrollAniEnd = () => {
+      console.log("恭喜中奖!!!");
+      setTimeout(() => {
+        startFlag.value = false;
+      }, 300);
+    };
+
+    return {
+      countupMachineDom,
+      startFlag,
+      machineNum,
+      bgImage,
+      prizeLevel,
+      startRole,
+      startRole2,
+      scrollAniEnd,
+    };
+  },
 };
 </script>
+
+<style lang="scss">
+.btnBtn {
+  text-align: center;
+  .nut-button {
+    margin-right: 20px;
+  }
+}
+</style>
 ```
 :::
 
@@ -145,18 +171,17 @@ export default {
 | init-num | initial number | number | `0`
 | end-num | end number | number | `0`
 | speed | interval number, currently only supports basic usage | number | `1`
-| to-fixed | retain the number of decimal places | number | `subject to the number passed in`
+| to-fixed | retain the number of decimal places | number | `0`
 | start-flag | flag to trigger number scrolling | boolean | `true`
 | during | rolling time to run | number | `1000`
 | num-width | Number width, often used to customize seamless scrolling | number | `20`
 | num-height | Number height, often used to customize seamless scrolling (required for lottery function) | number | `20`
-| scrolling | used for numeric scrolling display(taro environment does not support) | boolean | `false`
-| custom | for custom image scrolling | boolean | `false`
+| scrolling | numeric scrolling mode (H5 only) | boolean | `false`
 | custom-change-num | The number to change (for custom pictures, initNum and endNum are invalid here) | number | `1`
-| custom-bg-img | Custom image (it is recommended to use Sprite image, and Sprite image must be used to use the lottery function) | - | `-`
+| custom-bg-img | Custom image (it is recommended to use Sprite image, and Sprite image must be used to use the lottery function) | string | `-`
 | custom-spac-num | There may be space between numbers in the image | number | `0`
-| type | "machine" must be passed when using the lottery function | string | `''`
-| machine-prize-num | Number of prizes, how many prizes in total, must be passed | number | `4`
+| type | lottery function pass machine, the optional value is `machine` `' '` | string | `''`
+| machine-prize-num | Number of prizes, how many prizes in total, must be passed | number | `0`
 | machine-num | lottery position, that is, how many times to roll, must pass | number | `3`
 | machine-prize-level | The winning icon, the position of the icon in the sprite image | number | `0`
 | machine-turn-more | number of turns | number | `0`

+ 75 - 50
src/packages/__VUE/countup/doc.md

@@ -84,55 +84,81 @@ export default {
 
 ```html
 <template>
-    <nut-countup
-        ref="countupMachineDom"
-        type="machine"
-        :machine-num="machineNum"
-        :machine-prize-num="5"
-        :machine-prize-level="prizeLevel"
-        :custom-bg-img="bgImage"
-        :num-width="100"
-        :num-height="100"
-        :during="3000"
-        @scroll-end="scrollAniEnd"
-    >
-    </nut-countup>
-    <nut-button @click="startRole" :disabled="startFlag">抽奖</nut-button>
+  <nut-countup
+    ref="countupMachineDom"
+    type="machine"
+    :machine-num="machineNum"
+    :machine-prize-num="5"
+    :machine-prize-level="prizeLevel"
+    :custom-bg-img="bgImage"
+    :num-width="100"
+    :num-height="100"
+    :during="3000"
+    @scroll-end="scrollAniEnd"
+  >
+  </nut-countup>
+  <div class="btnBtn">
+    <nut-button type="danger" @click="startRole" :disabled="startFlag">
+      中奖
+    </nut-button>
+    <nut-button type="danger" @click="startRole2" :disabled="startFlag">
+      不中奖
+    </nut-button>
+  </div>
 </template>
 <script>
-import { ref, onMounted } from 'vue';
+import { ref } from "vue";
 export default {
-    setup() {
-        const countupMachineDom = ref(null);
-        const startFlag = ref(false);
-        const machineNum = ref(3);
-        const bgImage = ref('https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png');
-        const prizeLevel = ref(0);
-        const startRole = () => {
-            prizeLevel.value = Math.floor(Math.random() * 5 + 1);
-            startFlag.value = true;
-            countupMachineDom.value.machineLuck();
-        };
-
-        const scrollAniEnd = () => {
-            console.log('恭喜中奖!!!');
-            setTimeout(() => {
-                startFlag.value = false;
-            }, 300);
-        }
-
-        return {
-            countupMachineDom,
-            startFlag,
-            machineNum,
-            bgImage,
-            prizeLevel,
-            startRole,
-            scrollAniEnd
-        }
-    }
+  setup() {
+    const countupMachineDom = ref(null);
+    const startFlag = ref(false);
+    const machineNum = ref(3);
+    const bgImage = ref(
+      "https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png"
+    );
+    const prizeLevel = ref(0);
+    const startRole = () => {
+      prizeLevel.value = Math.floor(Math.random() * 5 + 1);
+      startFlag.value = true;
+      countupMachineDom.value.machineLuck();
+    };
+    const startRole2 = () => {
+      prizeLevel.value = -1;
+      startFlag.value = true;
+      setTimeout(() => {
+        countupMachineDom.value.machineLuck();
+      }, 500);
+    };
+
+    const scrollAniEnd = () => {
+      console.log("恭喜中奖!!!");
+      setTimeout(() => {
+        startFlag.value = false;
+      }, 300);
+    };
+
+    return {
+      countupMachineDom,
+      startFlag,
+      machineNum,
+      bgImage,
+      prizeLevel,
+      startRole,
+      startRole2,
+      scrollAniEnd,
+    };
+  },
 };
 </script>
+
+<style lang="scss">
+.btnBtn {
+  text-align: center;
+  .nut-button {
+    margin-right: 20px;
+  }
+}
+</style>
 ```
 :::
 
@@ -144,18 +170,17 @@ export default {
 | init-num | 初始数字 | number | `0`
 | end-num | 结束数字 | number | `0`
 | speed | 间隔数字,目前仅支持基础用法 | number | `1`
-| to-fixed | 保留小数点后几位 | number | `以传入的数字为准`
+| to-fixed | 保留小数点后几位 | number | `0`
 | start-flag | 触发数字滚动的标识 | boolean | `true`
 | during | 滚动一次运行时间 | number | `1000`
 | num-width | 数字宽度,常用于自定义无缝滚动 | number | `20`
 | num-height | 数字高度,常用于自定义无缝滚动(抽奖功能必传) | number | `20`
-| scrolling | 用于数字滚动展示 | boolean | `false`
-| custom | 用于自定义图片数字滚动 | boolean | `false`
+| scrolling | 数字滚动模式(仅支持 H5) | boolean | `false`
 | custom-change-num | 要变化的数字(用于自定义图片,`initNum`、`endNum` 在此无效) | number | `1`
-| custom-bg-img | 自定义图片(建议使用雪碧图实现,使用抽奖功能必须使用雪碧图) | - | `-`
+| custom-bg-img | 自定义图片(建议使用雪碧图实现,使用抽奖功能必须使用雪碧图) | string | `-`
 | custom-spac-num | 图片中数字之间可能会存在间距 | number | `0`
-| type | 使用抽奖功能必传 `"machine"` | string | `''`
-| machine-prize-num | 奖品个数,一共多少个奖品,必传 | number | `4`
+| type | 抽奖功能传 machine,可选值为 `machine` `' '` | string | `''`
+| machine-prize-num | 奖品个数,一共多少个奖品,必传 | number | `0`
 | machine-num | 抽奖位,即滚动几个,必传 | number | `3`
 | machine-prize-level | 中奖图标,图标在雪碧图中的位置 | number | `0`
 | machine-turn-more | 滚动圈数 | number | `0`

+ 74 - 48
src/packages/__VUE/countup/doc.taro.md

@@ -74,55 +74,82 @@ export default {
 
 ```html
 <template>
-    <nut-countup
-        ref="countupMachineDom"
-        type="machine"
-        :machine-num="machineNum"
-        :machine-prize-num="5"
-        :machine-prize-level="prizeLevel"
-        :custom-bg-img="bgImage"
-        :num-width="100"
-        :num-height="100"
-        :during="3000"
-        @scroll-end="scrollAniEnd"
-    >
-    </nut-countup>
-    <nut-button @click="startRole" :disabled="startFlag">抽奖</nut-button>
+  <nut-countup
+    ref="countupMachineDom"
+    type="machine"
+    :machine-num="machineNum"
+    :machine-prize-num="5"
+    :machine-prize-level="prizeLevel"
+    :custom-bg-img="bgImage"
+    :num-width="100"
+    :num-height="100"
+    :during="3000"
+    @scroll-end="scrollAniEnd"
+  >
+  </nut-countup>
+  <div class="btnBtn">
+    <nut-button type="danger" @click="startRole" :disabled="startFlag">
+      中奖
+    </nut-button>
+    <nut-button type="danger" @click="startRole2" :disabled="startFlag">
+      不中奖
+    </nut-button>
+  </div>
 </template>
 <script>
-import { ref, onMounted } from 'vue';
+import { ref } from "vue";
 export default {
-    setup() {
-        const countupMachineDom = ref(null);
-        const startFlag = ref(false);
-        const machineNum = ref(3);
-        const bgImage = ref('https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png');
-        const prizeLevel = ref(0);
-        const startRole = () => {
-            prizeLevel.value = Math.floor(Math.random() * 5 + 1);
-            startFlag.value = true;
-            countupMachineDom.value.machineLuck();
-        };
-
-        const scrollAniEnd = () => {
-            console.log('恭喜中奖!!!');
-            setTimeout(() => {
-                startFlag.value = false;
-            }, 300);
-        }
-
-        return {
-            countupMachineDom,
-            startFlag,
-            machineNum,
-            bgImage,
-            prizeLevel,
-            startRole,
-            scrollAniEnd
-        }
-    }
+  setup() {
+    const countupMachineDom = ref(null);
+    const startFlag = ref(false);
+    const machineNum = ref(3);
+    const bgImage = ref(
+      "https://img10.360buyimg.com/imagetools/jfs/t1/121466/20/6784/28830/5f06e7f2Edbb8998c/9bdd9e7b24dff9fe.png"
+    );
+    const prizeLevel = ref(0);
+    const startRole = () => {
+      prizeLevel.value = Math.floor(Math.random() * 5 + 1);
+      startFlag.value = true;
+      countupMachineDom.value.machineLuck();
+    };
+    const startRole2 = () => {
+      prizeLevel.value = -1;
+      startFlag.value = true;
+      setTimeout(() => {
+        countupMachineDom.value.machineLuck();
+      }, 500);
+    };
+
+    const scrollAniEnd = () => {
+      console.log("恭喜中奖!!!");
+      setTimeout(() => {
+        startFlag.value = false;
+      }, 300);
+    };
+
+    return {
+      countupMachineDom,
+      startFlag,
+      machineNum,
+      bgImage,
+      prizeLevel,
+      startRole,
+      startRole2,
+      scrollAniEnd,
+    };
+  },
 };
 </script>
+
+<style lang="scss">
+.btnBtn {
+  text-align: center;
+  .nut-button {
+    margin-right: 20px;
+  }
+}
+</style>
+
 ```
 :::
 
@@ -135,17 +162,16 @@ export default {
 | init-num | 初始数字 | number | `0`
 | end-num | 结束数字 | number | `0`
 | speed | 间隔数字,目前仅支持基础用法 | number | `1`
-| to-fixed | 保留小数点后几位 | number | `以传入的数字为准`
+| to-fixed | 保留小数点后几位 | number | `0`
 | start-flag | 触发数字滚动的标识 | boolean | `true`
 | during | 滚动一次运行时间 | number | `1000`
 | num-width | 数字宽度,常用于自定义无缝滚动 | number | `20`
 | num-height | 数字高度,常用于自定义无缝滚动(抽奖功能必传) | number | `20`
-| custom | 用于自定义图片数字滚动 | boolean | `false`
 | custom-change-num | 要变化的数字(用于自定义图片,`initNum`、`endNum` 在此无效) | number | `1`
 | custom-bg-img | 自定义图片(建议使用雪碧图实现,使用抽奖功能必须使用雪碧图) | - | `-`
 | custom-spac-num | 图片中数字之间可能会存在间距 | number | `0`
-| type | 使用抽奖功能必传 `"machine"` | string | `''`
-| machine-prize-num | 奖品个数,一共多少个奖品,必传 | number | `4`
+| type | 抽奖功能传 machine,可选值为 `machine` `' '` | string | `''`
+| machine-prize-num | 奖品个数,一共多少个奖品,必传 | number | `0`
 | machine-num | 抽奖位,即滚动几个,必传 | number | `3`
 | machine-prize-level | 中奖图标,图标在雪碧图中的位置 | number | `0`
 | machine-turn-more | 滚动圈数 | number | `0`

+ 11 - 6
src/packages/__VUE/countup/index.vue

@@ -518,12 +518,7 @@ export default create({
           timeOut && clearTimeout(timeOut);
           el.style.transition = 'none';
           el.style.top = '0';
-          // 前面数字的滚动,用于递增
-          if (turningNum == 10) {
-            if (el.previousSibling) {
-              runStep(el.previousSibling as HTMLElement);
-            }
-          }
+          reset(el, turningNum);
         }, 0.975 * props.during);
       } else {
         // el.style.top = `-${(10-turningNum)*100}%`;
@@ -534,6 +529,16 @@ export default create({
         runStep(el.previousSibling as HTMLElement);
       }
     };
+    const reset = (el: { style: { top: string }; previousSibling: HTMLElement }, turningNum: number) => {
+      setTimeout(() => {
+        // 前面数字的滚动,用于递增
+        if (turningNum == 10) {
+          if (el.previousSibling) {
+            runStep(el.previousSibling as HTMLElement);
+          }
+        }
+      }, 200);
+    };
     // 自定义图片
     const imgNumberScroll = () => {
       let m = 1;

+ 1 - 1
src/sites/mobile-taro/vue/src/exhibition/pages/countup/index.vue

@@ -35,7 +35,7 @@
       >
       </nut-countup>
       <div class="btnBtn">
-        <nut-button type="danger" @click="startRole" :disabled="startFlag">奖</nut-button>
+        <nut-button type="danger" @click="startRole" :disabled="startFlag">奖</nut-button>
         <nut-button type="danger" @click="startRole2" :disabled="startFlag">不中奖</nut-button>
       </div>
     </div>