播放计时器

template模块

<div style="width: 200px; display: inline-block">
    <div class="slider-demo-block">
      <el-slider
        v-model="progress"
        :min="0"
        :show-tooltip="false"
        :max="maxTime"
      />
    </div>
    <span>{{ formattedCurrentTime }}</span> / <span>{{ formattedMaxTime }}</span>
    <el-button v-if="isOpen" @click="togglePlayPause" class="_buttonIcon">
      <el-icon><VideoPlay /></el-icon>
    </el-button>
    <el-button v-else @click="stop" class="_buttonIcon">
      <el-icon><VideoPause /></el-icon>
    </el-button>
    <el-button @click="fastForward" class="_buttonIcon">
      <el-icon><DArrowRight /></el-icon>
    </el-button>
  </div>

js模块

// 假设这里引入对应的图标组件,实际需根据你的图标库正确引入
const VideoPlay = () => {}; 
const VideoPause = () => {}; 
const DArrowRight = () => {}; 

// 定义进度相关变量
const progress = ref(0);
const maxTime = ref(100); // 假设最大时间为100,可根据实际调整
const formattedCurrentTime = ref('0:00');
const formattedMaxTime = ref('0:00');

// 播放状态相关变量
const isOpen = ref(true);
const speed = ref(1);
const intervalId = ref(null);

// 播放/暂停切换方法
const togglePlayPause = () => {
  isOpen.value =!isOpen.value;
  speed.value = 1;
  onPlay();
};

// 停止方法
const stop = () => {
  clearInterval(intervalId.value);
  intervalId.value = null;
  isOpen.value = false;
};

// 快进方法
const fastForward = () => {
  speed.value = 2;
  isOpen.value = false;
  onPlay();
};

// 播放核心逻辑方法
const onPlay = () => {
  if (intervalId.value) return;
  intervalId.value = setInterval(() => {
    if (progress.value < maxTime.value) {
      progress.value += speed.value;
    } else {
      progress.value = maxTime.value;
      clearInterval(intervalId.value);
      intervalId.value = null;
    }
  }, 1000);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值