diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
index 4a9434481..f207efa5b 100644
--- a/docs/.vitepress/config.mts
+++ b/docs/.vitepress/config.mts
@@ -1,7 +1,7 @@
/*
* @Author: weisheng
* @Date: 2023-07-27 10:26:09
- * @LastEditTime: 2024-07-19 13:29:51
+ * @LastEditTime: 2024-08-08 17:38:21
* @LastEditors: weisheng
* @Description:
* @FilePath: \wot-design-uni\docs\.vitepress\config.mts
@@ -366,8 +366,8 @@ export default defineConfig({
link: "/component/count-down",
text: "CountDown 倒计时"
}, {
- link: "/component/statistic",
- text: "Statistic 数值显示"
+ link: "/component/count-up",
+ text: "CountTo 数字滚动"
}, {
link: "/component/number-keyboard",
text: "NumberKeyboard 数字键盘"
diff --git a/docs/component/count-to.md b/docs/component/count-to.md
new file mode 100644
index 000000000..4dd0aa554
--- /dev/null
+++ b/docs/component/count-to.md
@@ -0,0 +1,109 @@
+
+
+# CountTo 数字滚动$LOWEST_VERSION$
+
+## 基本用法
+
+设置 `endVal` 属性,表示最终值。
+设置 `startVal` 属性,表示起始值。
+设置 `duration` 属性,表示从起始值到结束值数字变动的时间。
+设置 `autoplay` 属性,表示是否自动播放。
+设置 `decimals` 属性,表示保留的小数位数。
+设置 `decimal` 属性,表示小数点符号。
+设置 `prefix` 属性,表示数字前缀。
+设置 `suffix` 属性,表示数字后缀。
+设置 `fontSize` 属性,表示字体大小。
+设置 `color` 属性,表示文本颜色。
+
+```vue
+
+
+
+
+```
+
+## 手动控制
+
+通过 `start` 方法开始倒计时,通过 `pause` 方法暂停倒计时,通过 `reset` 方法重置倒计时。
+
+```html
+
+
+
+
+
+
+```
+
+```ts
+import type { CountToInstance } from '@/uni_modules/wot-design-uni/components/wd-count-to/types'
+
+const countTo = ref()
+
+const start = () => {
+ countTo.value!.start()
+}
+const pause = () => {
+ countTo.value!.pause()
+}
+const reset = () => {
+ countTo.value!.reset()
+}
+```
+
+## Attributes
+
+| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
+| --------- | ------------------------------ | ------- | -------------- | ------- | ---------------- |
+| fontSize | 字体大小 | number | 16 | default | $LOWEST_VERSION$ |
+| color | 文本颜色 | string | - | '' | $LOWEST_VERSION$ |
+| startVal | 起始值 | number | - | 0 | $LOWEST_VERSION$ |
+| endVal | 最终值 | number | - | 2024 | $LOWEST_VERSION$ |
+| duration | 从起始值到结束值数字变动的时间 | number | - | 3000 | $LOWEST_VERSION$ |
+| autoplay | 是否自动播放 | boolean | - | true | $LOWEST_VERSION$ |
+| decimals | 保留的小数位数 | number | (需大于等于 0) | 0 | $LOWEST_VERSION$ |
+| decimal | 小数点符号 | string | - | '.' | $LOWEST_VERSION$ |
+| separator | 三位三位的隔开效果 | string | - | ',' | $LOWEST_VERSION$ |
+| prefix | 前缀 | string | - | - | $LOWEST_VERSION$ |
+| suffix | 后缀 | string | - | - | $LOWEST_VERSION$ |
+| useEasing | 是否具有连贯性 | boolean | - | true | $LOWEST_VERSION$ |
+
+## Events
+
+| 事件名称 | 说明 | 参数 | 最低版本 |
+| -------- | -------------------- | ---- | ---------------- |
+| finish | 动画完成时触发 | — | $LOWEST_VERSION$ |
+| mounted | 组件加载完成时时触发 | - | $LOWEST_VERSION$ |
+
+## Methods
+
+| 方法名 | 说明 | 参数 | 最低版本 |
+| ------ | ----------------------------------------------------------- | ---- | ---------------- |
+| start | 开始动画 | — | $LOWEST_VERSION$ |
+| pause | 暂停动画 | — | $LOWEST_VERSION$ |
+| reset | 重置动画,若 `auto-start` 为 `true`,重设后会自动开始倒计时 | — | $LOWEST_VERSION$ |
+
+## Slots
+
+| 名称 | 说明 | 最低版本 |
+| ---- | -------- | -------- |
+| default | 默认插槽 | $LOWEST_VERSION$ |
+| prefix | 前缀插槽 | $LOWEST_VERSION$ |
+| suffix | 后缀插槽 | $LOWEST_VERSION$ |
+
+## 外部样式类
+
+| 类名 | 说明 | 最低版本 |
+| ------------ | ---------- | ---------------- |
+| custom-class | 根节点样式 | $LOWEST_VERSION$ |
+| custom-style | 根节点样式 | $LOWEST_VERSION$ |
diff --git a/docs/component/statistic.md b/docs/component/statistic.md
deleted file mode 100644
index a854fecaa..000000000
--- a/docs/component/statistic.md
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-# Statistic 数值显示
-
-> 1.3.6+ 版本提供
-
-## 基本用法
-
-
-```vue
-
-```
-
-## 插槽
-
-
-```vue
-
-
-
-```
-
-## 自定义字体颜色
-
-设置 `color` 属性。
-
-```html
-
-```
-
-
-## Attributes
-
-| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
-| ---------- | ------------------------------------------------------------------ | ------- | ------------------------------------------------------------------ | ------- | ---------------- |
-| fontSize | 字体大小 | number | 16 | default | 1.3.6+ |
-|color | 文本颜色 | string | - | '' | $LOWEST_VERSION$|
-|startVal | 起始值 | number | - | 0 | $LOWEST_VERSION$ |
-|endVal | 最终值 | number | - | 2024 | $LOWEST_VERSION$ |
-|duration | 从起始值到结束值数字变动的时间 | number | - | 3000 | $LOWEST_VERSION$ |
-|autoplay | 是否自动播放 | boolean | - | true | $LOWEST_VERSION$ |
-|decimals | 保留的小数位数 | number | (需大于等于0) | 0 | $LOWEST_VERSION$ |
-|decimal | 小数点符号 | string | - | '.' | $LOWEST_VERSION$ |
-|separator | 三位三位的隔开效果 | string | - | ',' | $LOWEST_VERSION$ |
-|prefix | 前缀 | string | - | - | $LOWEST_VERSION$ |
-|suffix | 后缀 | string | - | - | $LOWEST_VERSION$ |
-|useEasing | 是否具有连贯性 | boolean | - | true | $LOWEST_VERSION$ |
-|isFrequent | 是否隔一段时间数字跳动 | boolean | - | false | $LOWEST_VERSION$ |
-|frequentTime | 跳动间隔时间 | number | - | 5000 | $LOWEST_VERSION$ |
-
-
-
-## 外部样式类
-
-| 类名 | 说明 | 最低版本 |
-| ------------ | ---------- | ---------------- |
-| custom-class | 根节点样式 | $LOWEST_VERSION$ |
-| custom-style | 根节点样式 | $LOWEST_VERSION$ |
diff --git a/src/pages.json b/src/pages.json
index 6f4acb792..2b205efd9 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -753,13 +753,13 @@
}
},
{
- "path": "pages/statistic/Index",
- "name": "statistic",
+ "path": "pages/countTo/Index",
+ "name": "countTo",
"style": {
"mp-alipay": {
"allowsBounceVertical": "NO"
},
- "navigationBarTitleText": "Statistic 数值显示"
+ "navigationBarTitleText": "CountTo 数字滚动"
}
},
{
diff --git a/src/pages/countTo/Index.vue b/src/pages/countTo/Index.vue
new file mode 100644
index 000000000..500c3e424
--- /dev/null
+++ b/src/pages/countTo/Index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index/Index.vue b/src/pages/index/Index.vue
index 598bdd6f8..7d0593b6f 100644
--- a/src/pages/index/Index.vue
+++ b/src/pages/index/Index.vue
@@ -287,8 +287,8 @@ const list = ref([
name: 'CountDown 倒计时'
},
{
- id: 'statistic',
- name: 'Statistic 数值显示'
+ id: 'countTo',
+ name: 'CountTo 数字滚动'
},
{
id: 'numberKeyboard',
diff --git a/src/pages/statistic/Index.vue b/src/pages/statistic/Index.vue
deleted file mode 100644
index 3f063fc2f..000000000
--- a/src/pages/statistic/Index.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启动动画
- 重置动画
-
-
- 暂停动画
- 切换暂停和恢复状态
-
-
-
-
-
-
diff --git a/src/uni_modules/wot-design-uni/components/common/util.ts b/src/uni_modules/wot-design-uni/components/common/util.ts
index b6c2f5ea3..ac4d7a866 100644
--- a/src/uni_modules/wot-design-uni/components/common/util.ts
+++ b/src/uni_modules/wot-design-uni/components/common/util.ts
@@ -708,3 +708,15 @@ export function omitBy>(obj: O, predicate: (value:
Object.keys(newObj).forEach((key) => predicate(newObj[key], key) && delete newObj[key]) // 遍历对象的键,删除值为不满足predicate的字段
return newObj
}
+
+/**
+ * 缓动函数,用于在动画或过渡效果中根据时间参数计算当前值
+ * @param t 当前时间,通常是从动画开始经过的时间
+ * @param b 初始值,动画属性的初始值
+ * @param c 变化量,动画属性的目标值与初始值的差值
+ * @param d 持续时间,动画持续的总时间长度
+ * @returns 计算出的当前值
+ */
+export function easingFn(t: number = 0, b: number = 0, c: number = 0, d: number = 0): number {
+ return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b
+}
diff --git a/src/uni_modules/wot-design-uni/components/wd-statistic/index.scss b/src/uni_modules/wot-design-uni/components/wd-count-to/index.scss
similarity index 87%
rename from src/uni_modules/wot-design-uni/components/wd-statistic/index.scss
rename to src/uni_modules/wot-design-uni/components/wd-count-to/index.scss
index 095d7874e..0a9617840 100644
--- a/src/uni_modules/wot-design-uni/components/wd-statistic/index.scss
+++ b/src/uni_modules/wot-design-uni/components/wd-count-to/index.scss
@@ -2,6 +2,6 @@
@import '../common/abstracts/mixin';
-.wd-statistic{
+.wd-count-to{
vertical-align: bottom;
}
diff --git a/src/uni_modules/wot-design-uni/components/wd-statistic/types.ts b/src/uni_modules/wot-design-uni/components/wd-count-to/types.ts
similarity index 70%
rename from src/uni_modules/wot-design-uni/components/wd-statistic/types.ts
rename to src/uni_modules/wot-design-uni/components/wd-count-to/types.ts
index 17efbf0f4..f2c8b46bf 100644
--- a/src/uni_modules/wot-design-uni/components/wd-statistic/types.ts
+++ b/src/uni_modules/wot-design-uni/components/wd-count-to/types.ts
@@ -1,7 +1,7 @@
-import type { ExtractPropTypes } from 'vue'
+import type { ComponentPublicInstance, ExtractPropTypes } from 'vue'
import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props'
-export const textProps = {
+export const countToProps = {
...baseProps,
// 字体大小
@@ -25,19 +25,17 @@ export const textProps = {
endVal: makeNumberProp(2024),
/**
- * 从起始值到结束值数字变动的时间
+ * 从起始值到结束值数字变动的时间,单位毫秒
* 类型:number
* 默认值:3000
*/
duration: makeNumberProp(3000),
-
/**
- * 是否自动播放
+ * 是否自动开始
* 类型:boolean
* 默认值:true
*/
- autoplay: makeBooleanProp(true),
-
+ autoStart: makeBooleanProp(true),
/**
* 保留的小数位数
* 类型:number
@@ -82,28 +80,31 @@ export const textProps = {
useEasing: makeBooleanProp(true),
/**
- * 是否隔一段时间数字跳动,这里的跳动是隔一段时间设置初始值
- * 类型:boolean
- * 默认值:false
+ * 自定义根节点样式
*/
- isFrequent: makeBooleanProp(false),
+ customStyle: makeStringProp(''),
/**
- * 跳动间隔时间
- * 类型:number
- * 默认值:5000
+ * 自定义根节点样式类
*/
- frequentTime: makeNumberProp(5000),
+ customClass: makeStringProp('')
+}
+export type CountDownProps = ExtractPropTypes
+
+export type CountUpExpose = {
/**
- * 自定义根节点样式
+ * 开始倒计时
*/
- customStyle: makeStringProp(''),
-
+ start: () => void
/**
- * 自定义根节点样式类
+ * 暂停倒计时
*/
- customClass: makeStringProp('')
+ pause: () => void
+ /**
+ * 重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时
+ */
+ reset: () => void
}
-export type TextProps = ExtractPropTypes
+export type CountToInstance = ComponentPublicInstance
diff --git a/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue b/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue
new file mode 100644
index 000000000..5e3c8814d
--- /dev/null
+++ b/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uni_modules/wot-design-uni/components/wd-statistic/requestAnimationFrame.ts b/src/uni_modules/wot-design-uni/components/wd-statistic/requestAnimationFrame.ts
deleted file mode 100644
index 2c2ec73c7..000000000
--- a/src/uni_modules/wot-design-uni/components/wd-statistic/requestAnimationFrame.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-let lastTime = 0 // 上一次调用 requestAnimationFrame 的时间戳
-const prefixes = 'webkit moz ms o'.split(' ') // 各浏览器厂商的前缀
-let requestAnimationFrame = null // 用于请求下一帧的函数
-let cancelAnimationFrame = null // 用于取消下一帧的函数
-let prefix = ''
-
-// #ifdef H5
-// 尝试获取浏览器原生的 requestAnimationFrame 和 cancelAnimationFrame 方法
-requestAnimationFrame = window.requestAnimationFrame
-cancelAnimationFrame = window.cancelAnimationFrame
-
-// 遍历浏览器前缀,获取兼容的 requestAnimationFrame 和 cancelAnimationFrame 实现
-for (let i = 0; i < prefixes.length; i++) {
- if (requestAnimationFrame && cancelAnimationFrame) {
- break
- }
- prefix = prefixes[i]
- // 获取兼容的 requestAnimationFrame 方法
- requestAnimationFrame = requestAnimationFrame || window[`${prefix}RequestAnimationFrame`]
- // 获取兼容的 cancelAnimationFrame 方法
- cancelAnimationFrame = cancelAnimationFrame || window[`${prefix}CancelAnimationFrame`] || window[`${prefix}CancelRequestAnimationFrame`]
-}
-// #endif
-
-// 如果当前浏览器不支持原生的 requestAnimationFrame 和 cancelAnimationFrame,则使用 setTimeout 作为替代方案
-if (!requestAnimationFrame || !cancelAnimationFrame) {
- requestAnimationFrame = function (callback) {
- const currTime = new Date().getTime()
- // 计算到下次调用的时间,尽可能接近每秒60帧的效果
- const timeToCall = Math.max(0, 16 - (currTime - lastTime))
- const id = setTimeout(() => {
- callback(currTime + timeToCall)
- }, timeToCall)
- lastTime = currTime + timeToCall
- return id
- }
-
- cancelAnimationFrame = function (id) {
- clearTimeout(id)
- }
-}
-
-export { requestAnimationFrame, cancelAnimationFrame }
diff --git a/src/uni_modules/wot-design-uni/components/wd-statistic/wd-statistic.vue b/src/uni_modules/wot-design-uni/components/wd-statistic/wd-statistic.vue
deleted file mode 100644
index 893a1bf1c..000000000
--- a/src/uni_modules/wot-design-uni/components/wd-statistic/wd-statistic.vue
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/uni_modules/wot-design-uni/global.d.ts b/src/uni_modules/wot-design-uni/global.d.ts
index 90e6a9590..0a35c62af 100644
--- a/src/uni_modules/wot-design-uni/global.d.ts
+++ b/src/uni_modules/wot-design-uni/global.d.ts
@@ -1,10 +1,10 @@
/*
* @Author: weisheng
* @Date: 2023-09-25 17:28:12
- * @LastEditTime: 2024-07-31 23:10:28
+ * @LastEditTime: 2024-08-09 13:39:14
* @LastEditors: weisheng
* @Description:
- * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/global.d.ts
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\global.d.ts
* 记得注释
*/
import '@vue/runtime-core'
@@ -101,6 +101,7 @@ declare module '@vue/runtime-core' {
WdIndexBar: typeof import('./components/wd-index-bar/wd-index-bar.vue')['default']
WdIndexAnchor: typeof import('./components/wd-index-anchor/wd-index-anchor.vue')['default']
WdText: typeof import('./components/wd-text/wd-text.vue')['default']
+ WdCountTo: typeof import('./components/wd-count-to/wd-count-to.vue')['default']
}
}