h5音频标签模拟实现语音条(VUE3)

这篇具有很好参考价值的文章主要介绍了h5音频标签模拟实现语音条(VUE3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思路:将原audio标签通过css隐藏,在通过css的div实现语音条样式,获取到audio的ref,操作audio的play、pause方法即可

效果图:h5音频标签模拟实现语音条(VUE3),音视频,css3,javascript,html5

<template>

  <div style="display: none">

    <audio

      controls

      ref="audioRef"

      @loadedmetadata="handleLoadedMetadata"

      @ended="audioEnded"

    >

      <!-- <source :src="audioSrc" /> -->

      <source src="../../assets/aa.mp3" />

      您的浏览器不支持语音播放。

    </audio>

  </div>

  <div

    :style="{ width: audioWidth }"

    class="audio-detail-msg"

    @click="playAudio"

  >

    <div

      class="audio-style"

      :class="{

        'add-animation': isPlay,

      }"

    >

      <div class="small"></div>

      <div class="middle"></div>

      <div class="large"></div>

    </div>

    <div style="margin-left: 10px">{{ duration }}</div>

  </div>

</template>

<script lang="ts" setup>

import { ref, computed } from "vue";

// const props = defineProps<{

//   audioUrl: string,

// }>()

const audioRef = ref(null); // 音频组件ref

const isPlay = ref(false); //语音条播放效果

const duration = ref(null); //音频时长

//播放/停止音频

function playAudio() {

  if (isPlay.value) {

    audioRef?.value?.pause();

    isPlay.value = false;

  } else {

    // audioRef.value.src = audioUrl;

    audioRef?.value?.play();

    isPlay.value = true;

  }

}

//语音条播放结束

function audioEnded() {

  isPlay.value = false;

}

//获取音频时长

function handleLoadedMetadata() {

  if (audioRef.value) {

    // 音频时长可以通过 audioRef.value.duration 获取

    duration.value = audioRef.value.duration.toFixed(0);

  }

}

//动态计算语音条宽度

const audioWidth = computed(() => {

  return `${duration.value * 5 + 50}px`; // 将秒数乘以 5 得到宽度

});

</script>

<style lang="scss" scoped>

// 语音条

.audio-detail-msg {

  display: flex;

  align-items: center;

  cursor: pointer;

  padding: 0px 10px 0px 5px;

  background-color: #d7d7d7;

  border-radius: 2px;

  .audio-style {

    display: flex;

    align-items: center;

    height: 32px;

    border-radius: 4px;

    .small {

      border: 4px solid #4c4c4c;

      border-top-color: transparent;

      border-left-color: transparent;

      border-bottom-color: transparent;

    }

    .middle {

      width: 16px;

      height: 16px;

      margin-left: -11px;

      opacity: 1;

    }

    .large {

      width: 24px;

      height: 24px;

      margin-left: -19px;

      opacity: 1;

    }

    &>div {

      border: 2px solid #4c4c4c;

      border-top-color: transparent;

      border-left-color: transparent;

      border-bottom-color: transparent;

      border-radius: 50%;

      box-sizing: border-box;

    }

    &.add-animation {

      .middle {

        animation: show2 1.2s ease-in-out infinite;

      }

      .large {

        animation: show3 1.2s ease-in-out infinite;

      }

    }

  }

  .duration-seconds {

    font-size: 12px;

    margin: 0 8px;

  }
 

  // 语音播放动画

  @keyframes show2 {

    0% {

      opacity: 0;

    }

    10% {

      opacity: 1;

    }

    100% {

      opacity: 0;

    }

  }

  @keyframes show3 {

    0% {

      opacity: 0;

    }

    50% {

      opacity: 1;

    }

    60% {

      opacity: 0;

    }

    100% {

      opacity: 0;

    }

  }

}

</style>

下面附上代码截图:

h5音频标签模拟实现语音条(VUE3),音视频,css3,javascript,html5

h5音频标签模拟实现语音条(VUE3),音视频,css3,javascript,html5文章来源地址https://www.toymoban.com/news/detail-841752.html

到了这里,关于h5音频标签模拟实现语音条(VUE3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3实现可视化拖拽标签小程序

    实现功能:可视化标签拖拽,双击标签可修改标签内容 一个大DIV包含里面存放两个DIV一个input header为头部标签名称 内容区域绑定双击鼠标事件,触发开始修改事件(startEditing),使用v-if进行标签的显示和隐藏操作 input标签,事件绑定为修改内容,绑定获取焦点事件(@blue=“

    2024年02月09日
    浏览(44)
  • vue3 使用defineAsyncComponent与component标签实现动态渲染组件

    内容有些啰嗦,内容记载了当时遇到了bug以及解决问题的思路。 业务场景简述: 前端做配置化组件,通过url内的唯一标识,请求后端sql 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格,toolbar以及动态弹窗;该动态渲染组件的功能,就是渲染的toolbar内

    2024年02月05日
    浏览(51)
  • vue3项目引入本地js文件,实现一个音频播放按钮

    目前有一个需求就是在网页上放置一个音乐控制按钮,并且是在vue3项目里面。于是小白的我遇到了2个问题,第一个问题是如何实现没有进度条的播放按钮,这个网上有现成的代码,可以通过js代码切换不同的图片或者是别的样式,并不算难;第二个问题是如何在vue3项目中引

    2024年02月19日
    浏览(43)
  • Vue3 + Element Plus 实现动态标签页及右键菜单

    目录 先上图  使用el-dropdown绑定右键菜单,为每个tab页绑定一个右键 右键菜单生效后控制每个下拉项的禁用与显示(每一项代表一个功能) 每个右键项对应的功能  控制每次只显示一个右键 完整代码         只有首页的情况         多个tab页的情况  

    2024年02月07日
    浏览(42)
  • vue3利用 a 标签,文件流,JSZip 压缩包,实现文件下载

    在实现文件的下载,采用 a 标签,会出现图片,没有进行下载,而是,在当前页面打开了图片。 导致原因: ·a标签,有 download 属性,可以实现下载 同源文件( ip 和 端口 相同),当图片不同源 时,点击下载,会在当前窗口直接打开图片,而不是进入下载状态。 1.1 没有图片

    2023年04月08日
    浏览(34)
  • vue3引入JS-SDK实现h5分享小卡片、跳转微信小程序功能

    微信js-sdk官方文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 想要实现的效果: 1.登录微信公众平台,进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 2.通过npm引入js-sdk 安装成功后,可以在package.json中找到\\\"weixin-js-sdk\\\" 3.在main.js中,将js-sdk挂载

    2024年02月11日
    浏览(53)
  • Vue3 - 超详细 “纯前端“ 将阿里云 OSS 存储文件删除教程,支持单个 / 批量删除各种图片图像、文档、音视频文件、压缩包等文件(附完整示例运行源码,保证新手小白 100% 轻松实现删除功能)

    如果您需要纯前端将文件上传到阿里云 OSS,请访问:这篇文章。 本文站在新手的角度, 在 vue3 项目开发中,超详细 “纯前端(无需后端)” 删除阿里云oss文件,支持单个删除或批量删除oss存储上的各种图片图像、文档、音视频文件、压缩包等文件, 你可以直接复制示例源

    2024年01月18日
    浏览(52)
  • vue3实现H5网页录音并上传(mp3、wav)兼容Android、iOS和PC端

    使用 Recorder插件 可以在HTML5网页中进行录音,录音完成后得到blob文件对象,然后将blob上传到服务器;项目使用的vue3.0版本(这个插件同时支持vue2.0、也支持uniapp,很强!!),录音过程中会显示可视化波形,同时能够做到兼容PC端、Android、和iOS,一次编码 到处运行,哈哈

    2024年02月08日
    浏览(44)
  • qt+ffmpeg 实现音视频播放(二)之音频播放

    通过  avformat_open_input () 打开媒体文件并分配和初始化  AVFormatContext   结构体。 函数原型如下: int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 参数说明: - `ps`:指向 `AVFormatContext` 结构体指针的指针,用于存储打开的媒体文件的信息。

    2024年04月22日
    浏览(47)
  • linux 运行开源音视频livekit,实现html视频语音聊天。

    linux版本: centos 7.9 先附上官方本地安装文档: Running LiveKit locally | LiveKit Docs 步骤: 1、首先在linux里面安装运行livekit: livekit.yaml文件的内容: 注意use_external_ip一定要设置true.这个是启用外部ip访问的。 然后就是keys:这个是创建token需要的, 前面的APIbxDWetqcjHaa是apikey, 后面的

    2024年03月26日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包