CountDown 倒计时
组件类型:UxCountdownComponentPublicInstance
支持时分秒倒计时,可配置时间格式、自定义样式、毫秒倒计时
平台兼容性
Android | iOS | web | 鸿蒙 Next | 小程序 |
---|---|---|---|---|
√ | √ | √ | x | x |
Props
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
theme | String | primary | 主题颜色 |
time | Number | 0 | 倒计时时长,单位ms |
format | String | HH:mm:ss | 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 |
autoplay | Boolean | true | 设置数值后是否自动开始滚动 |
millisecond | Boolean | false | 是否展示毫秒倒计时 |
color | String | $ux.Conf.fontColor | 字体颜色 |
darkColor | String | - | 深色 |
size | Number | $ux.Conf.fontSize | 字体大小 |
bold | Boolean | false | 字体是否加粗 |
theme
值 | 说明 |
---|---|
primary | 主色 |
warning | 警告 |
success | 成功 |
error | 错误 |
info | 文本 |
darkColor
值 | 说明 |
---|---|
none | 不显示 |
auto | 自动适配深色模式 |
color | 其他颜色 |
Events
事件名 | 说明 | 参数 |
---|---|---|
finish | 倒计时结束时触发 | event: Function |
change | 倒计时变化时触发 | event: Function |
示例代码
html
<template>
<ux-page>
<ux-navbar :title="title" :border="false"></ux-navbar>
<ux-scroll>
<ux-card direction="column" icon="flag" title="倒计时" :bold="true">
<ux-text text="支持时分秒倒计时,可配置时间格式、自定义样式、毫秒倒计时"></ux-text>
<ux-row :flex="true" align="top" :mt="5" style="width: 100%;">
<ux-text text="详细文档:"></ux-text>
<ux-text style="flex: 1" name="倒计时" text="https://www.uxframe.cn/component/display/countdown.html" mode="link"></ux-text>
</ux-row>
</ux-card>
<ux-card direction="column" icon="arrowright" title="主题" :bold="true">
<ux-text text="多种主题可配置,适配暗黑模式" :mb="15"></ux-text>
<ux-col>
<ux-countdown theme="success" :time="5 * 60 * 1000"></ux-countdown>
<ux-countdown theme="warning" :time="5 * 60 * 1000" :mt="10"></ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="时间格式化" :bold="true">
<ux-text text="支持时间格式化,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="2 * 24 * 60 * 60 * 1000" format="DD:HH:mm:ss" @change="onChange">
<ux-text :text="`${timeData.days} 天 ${timeData.hours} 时 ${timeData.minutes} 分 ${timeData.seconds} 秒`"></ux-text>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="毫秒级" :bold="true">
<ux-text text="支持毫秒级倒计时" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="5 * 60 * 1000" format="HH:mm:ss:SSS" :millisecond="true" color="red" :bold="true">
<template v-slot="data">
<ux-text :text="`${data.times.days}:${data.times.hours}:${data.times.minutes}:${data.times.seconds}:${data.times.milliseconds}`"></ux-text>
</template>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="自定义样式" :bold="true">
<ux-text text="通过插槽可随意定义样式" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="5 * 60 * 1000" format="HH:mm:ss">
<view class="time">
<view class="box">
<text class="text">{{ timeData.hours }}</text>
</view>
<text class="symbol">:</text>
<view class="box">
<text class="text">{{ timeData.minutes }}</text>
</view>
<text class="symbol">:</text>
<view class="box">
<text class="text">{{ timeData.seconds }}</text>
</view>
</view>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="自由控制" :bold="true">
<ux-text text="支持控制动画播放" :mb="15"></ux-text>
<ux-col>
<ux-countdown ref="uxCountdownRef" :size="16" :time="24 * 60 * 60 * 1000" :autoplay="false"></ux-countdown>
<ux-button theme="primary" :mt="10" text="开始" @click="start"></ux-button>
<ux-button theme="success" :mt="10" text="暂停" @click="pause"></ux-button>
<ux-button theme="warning" :mt="10" text="重置" @click="reset"></ux-button>
</ux-col>
</ux-card>
<ux-placeholder :height="200">
<ux-row justify="center" align="center" style="height: 100%;">
<ux-text prefix-icon="wink" text="真的没有了~"></ux-text>
</ux-row>
</ux-placeholder>
</ux-scroll>
</ux-page>
</template>
<template>
<ux-page>
<ux-navbar :title="title" :border="false"></ux-navbar>
<ux-scroll>
<ux-card direction="column" icon="flag" title="倒计时" :bold="true">
<ux-text text="支持时分秒倒计时,可配置时间格式、自定义样式、毫秒倒计时"></ux-text>
<ux-row :flex="true" align="top" :mt="5" style="width: 100%;">
<ux-text text="详细文档:"></ux-text>
<ux-text style="flex: 1" name="倒计时" text="https://www.uxframe.cn/component/display/countdown.html" mode="link"></ux-text>
</ux-row>
</ux-card>
<ux-card direction="column" icon="arrowright" title="主题" :bold="true">
<ux-text text="多种主题可配置,适配暗黑模式" :mb="15"></ux-text>
<ux-col>
<ux-countdown theme="success" :time="5 * 60 * 1000"></ux-countdown>
<ux-countdown theme="warning" :time="5 * 60 * 1000" :mt="10"></ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="时间格式化" :bold="true">
<ux-text text="支持时间格式化,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="2 * 24 * 60 * 60 * 1000" format="DD:HH:mm:ss" @change="onChange">
<ux-text :text="`${timeData.days} 天 ${timeData.hours} 时 ${timeData.minutes} 分 ${timeData.seconds} 秒`"></ux-text>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="毫秒级" :bold="true">
<ux-text text="支持毫秒级倒计时" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="5 * 60 * 1000" format="HH:mm:ss:SSS" :millisecond="true" color="red" :bold="true">
<template v-slot="data">
<ux-text :text="`${data.times.days}:${data.times.hours}:${data.times.minutes}:${data.times.seconds}:${data.times.milliseconds}`"></ux-text>
</template>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="自定义样式" :bold="true">
<ux-text text="通过插槽可随意定义样式" :mb="15"></ux-text>
<ux-col>
<ux-countdown :time="5 * 60 * 1000" format="HH:mm:ss">
<view class="time">
<view class="box">
<text class="text">{{ timeData.hours }}</text>
</view>
<text class="symbol">:</text>
<view class="box">
<text class="text">{{ timeData.minutes }}</text>
</view>
<text class="symbol">:</text>
<view class="box">
<text class="text">{{ timeData.seconds }}</text>
</view>
</view>
</ux-countdown>
</ux-col>
</ux-card>
<ux-card direction="column" icon="arrowright" title="自由控制" :bold="true">
<ux-text text="支持控制动画播放" :mb="15"></ux-text>
<ux-col>
<ux-countdown ref="uxCountdownRef" :size="16" :time="24 * 60 * 60 * 1000" :autoplay="false"></ux-countdown>
<ux-button theme="primary" :mt="10" text="开始" @click="start"></ux-button>
<ux-button theme="success" :mt="10" text="暂停" @click="pause"></ux-button>
<ux-button theme="warning" :mt="10" text="重置" @click="reset"></ux-button>
</ux-col>
</ux-card>
<ux-placeholder :height="200">
<ux-row justify="center" align="center" style="height: 100%;">
<ux-text prefix-icon="wink" text="真的没有了~"></ux-text>
</ux-row>
</ux-placeholder>
</ux-scroll>
</ux-page>
</template>
ts
<script setup>
import { UXCountDownTime } from '@/uni_modules/ux-frame/libs/types/types.uts'
let title = ''
const timeData = ref<UXCountDownTime>({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
milliseconds: 0
} as UXCountDownTime)
const uxCountdownRef = ref<UxCountdownComponentPublicInstance | null>(null)
onLoad((e: OnLoadOptions) => {
title = e['title'] ?? ''
})
function onChange(e: UXCountDownTime) {
timeData.value = e
}
function start() {
uxCountdownRef.value!.start()
}
function pause() {
uxCountdownRef.value!.pause()
}
function reset() {
uxCountdownRef.value!.reset()
}
</script>
<script setup>
import { UXCountDownTime } from '@/uni_modules/ux-frame/libs/types/types.uts'
let title = ''
const timeData = ref<UXCountDownTime>({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
milliseconds: 0
} as UXCountDownTime)
const uxCountdownRef = ref<UxCountdownComponentPublicInstance | null>(null)
onLoad((e: OnLoadOptions) => {
title = e['title'] ?? ''
})
function onChange(e: UXCountDownTime) {
timeData.value = e
}
function start() {
uxCountdownRef.value!.start()
}
function pause() {
uxCountdownRef.value!.pause()
}
function reset() {
uxCountdownRef.value!.reset()
}
</script>
css
<style lang="scss">
.time {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
.box {
margin-top: 4px;
width: 22px;
height: 22px;
background-color: blue;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
.text {
color: #fff;
font-size: 12px;
text-align: center;
}
}
.symbol {
color: blue;
padding: 0px 4px;
}
}
</style>
<style lang="scss">
.time {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
.box {
margin-top: 4px;
width: 22px;
height: 22px;
background-color: blue;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
.text {
color: #fff;
font-size: 12px;
text-align: center;
}
}
.symbol {
color: blue;
padding: 0px 4px;
}
}
</style>