H5高级音频应用

代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .container {
      width: 400px;
      border: 1px solid #ddd;
      text-align: center;
      padding-bottom: 10px;
    }

    .container p {
      font-size: 1.3em;
      font-weight: bold;
      text-align: center;
    }

    .container img {
      width: 340px;
      height: 340px;
      border-radius: 50%;
    }

    .container input {
      width: 340px;
      display: block;
      margin: 10px auto;
    }

    .container .time {
      width: 340px;
      height: 30px;
      margin: 0px auto;
    }

    .container .time .left {
      float: left;
    }

    .container .time .right {
      float: right;
    }
  </style>
</head>

<body>
  <!-- poster视频海报帧 值是图片地址 -->
  <video id="video" style="background-color: #000;" width="640" height="360" src="./assets/let_it_go.mp4"
    controls></video>
  <div class="container">
    <input id="range" type="range" min="0" value="0" max="100">
    <div class="time">
      <span class="left" id="lspan">00:00</span>
      <span class="right" id="rspan">03:15</span>
    </div>

    <button id="btn_play">播放/暂停</button>
    <button id="btn_vp">音量+</button>
    <button id="btn_vm">音量-</button>
    <button id="btn_05">0.5倍速</button>
    <button id="btn_1">1倍速</button>
    <button id="btn_2">2倍速</button>
  </div>
  <script src="./assets/moment.js"></script>
  <script>
    let player = document.getElementById('video')
    player.addEventListener('loadedmetadata', function () {
      console.log(player.duration)
      rspan.innerHTML = moment.unix(player.duration).format('mm:ss');
    })
    // 更新播放进度信息
    //监听timeupdate这个事件,触发了就输出总时长和当前播放位置
    player.addEventListener('timeupdate', function () {
      let ct = player.currentTime
      let dr = player.duration
      console.log(`总时长:${dr},当前位置:${ct}`);
      // 更新range进度条
      range.max = dr
      range.value = ct
      // 更新时间文本
      let drstr = moment.unix(dr).format('mm:ss')
      let ctstr = moment.unix(ct).format('mm:ss')
      console.log(`总时长:${drstr},当前位置:${ctstr}`);
      lspan.innerHTML = ctstr
      rspan.innerHTML = drstr
    })
    // 拖拽进度条,修改播放位置
    range.addEventListener('change', function () {
      player.currentTime = range.value
    })
    // 修改播放速度
    btn_05.onclick = function () {
      player.playbackRate = 0.5
    }
    btn_1.onclick = function () {
      player.playbackRate = 1
    }
    btn_2.onclick = function () {
      player.playbackRate = 2
    }
    // 修改音量
    btn_vm.onclick = function () {
      //player.volume=player.volume-0.1
      player.volume = Math.max(0, player.volume - 0.1)
    }
    btn_vp.onclick = function () {
      //player.volume=player.volume+0.1
      // 第一个参数和第二个参数比 谁小听谁的
      // 1和0.1比,0.1小,就把0.1给volume
      //1和1.1比是1大,这时候就把1给volume
      player.volume = Math.min(1, player.volume + 0.1)
    }
    btn_play.onclick = function () {

      // 修改音频的路径
      //player.play()
      //player.pause
      if (player.paused) {
        player.play()
      } else {
        player.pause()
      }
    }
  </script>

</body>

</html>

效果截图

在这里插入图片描述

常用的音频事件/方法/属性

  1. 事件
    abort 当音频/视频的加载已放弃时
    loadedmetadata 当浏览器已加载音频/视频的元数据时
    pause 当音频/视频已暂停时
    play 当音频/视频已开始或不再暂停时
    timeupdate 当目前的播放位置已更改时
    volumechange 当音量已更改时
    waiting 当视频由于需要缓冲下一帧而停止
  2. 方法
    play() 开始播放音频/视频
    pause() 暂停当前播放的音频/视频
  3. 属性
    autoplay 设置或返回是否在加载完成后随即播放音频/视频
    controls 设置或返回音频/视频是否显示控件(比如播放/暂停等)
    currentSrc 返回当前音频/视频的 URL
    currentTime 设置或返回音频/视频中的当前播放位置(以秒计)
    duration 返回当前音频/视频的长度(以秒计)
    ended 返回音频/视频的播放是否已结束
    error 返回表示音频/视频错误状态的 MediaError 对象
    loop 设置或返回音频/视频是否应在结束时重新播放
    muted 设置或返回音频/视频是否静音
    networkState 返回音频/视频的当前网络状态
    paused 设置或返回音频/视频是否暂停
    playbackRate 设置或返回音频/视频播放的速度
    preload 设置或返回音频/视频是否应该在页面加载后进行加载
    volume 设置或返回音频/视频的音量

资源:网易云接口文档

https://neteasecloudmusicapi.vercel.app/#/?id=%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值