zoukankan      html  css  js  c++  java
  • HTML5音乐播放器

    “你的问题主要是读书不多而想得太多”

    我就是这种不读书、没干货,遇到问题缺少实践的人~十分羡慕那些会写博客的人,就我来说,写一遍文章简直要比女人生孩子还要难受,半天憋不出一个字~哎,无奈肚子里没有墨水。罢了,直接入主题。

    最近为了体验移动端开发做个了在线播放器,其实就是加了个媒体查询~,这是demo地址

    实现的功能:

    • 播放器的基础操作:上/下一曲,播放/暂停,播放模式,时间轴定位

    • 同步歌词

    涉及技术:

    踩到的坑:

    1. 在ios7中,采用dom0级事件处理程序注册audio的ended事件无效,是因为给对象添加了多次?

      _$audio.onended = function () {
          player.playNext();
      };
    2. 移动端点击操作按钮后,动态伪类:hover后保持hover效果,google后,一行代码解决,美团手机端web就是这样做的。

      document.body.addEventListener("touchstart", function() {});

      css

      .control .btns .ply:active {
          background-position: -40px -204px;
      }
    3. 异步加载DOM造成的高度问题造成iScroll不能滚动

      player.init(data);
      //待数据加载完毕,再实例化IScroll
      loaded();
    4. 歌词滚动时间校对问题

      歌词滚动的实现我采用hash表存储时间轴和歌词,将歌词文本反序列化成如下格式

      var lry = {
          '00:00':{
              index:0,
              lyric:'不相信会绝望'
          }
          };
      $audio.on('timeupdate', function () {
              if (_audio_duration > 0) {
                  $('.cur').width(_audio.currentTime * 100 / _audio_duration + '%');
                  var curTime = timeDispose(_audio.currentTime);
                  //限定1s刷新一次
                  if (player.curTime !== curTime) {
                      var lrc = player.data[player.curIedex].lyric;
                      if (lrc[curTime]) {
                          player._$lyric_wrap.find('.on').removeClass('on');
                          var p = player._$lyric_wrap.find("p:nth-child(" + (lrc[curTime].index + 1) + ")");
                          p.addClass("on");
                          player._$lyric_wrap.css({
                              "transform": "translate(0,-" + lrc[curTime].index * player.lyricLineHeight + "px)",
                              "-ms-transform": "translate(0,-" + lrc[curTime].index * player.lyricLineHeight + "px)",
                              "-moz-transform": "translate(0,-" + lrc[curTime].index * player.lyricLineHeight + "px)",
                              "-webkit-transform": "translate(0,-" + lrc[curTime].index * player.lyricLineHeight + "px)",
                              "-o-transform": "translate(0,-" + lrc[curTime].index * player.lyricLineHeight + "px)"
                          });
                      }
                      player.curTime = curTime;
                      $('.curTime').html(curTime);
                  }
              }
          });

      监听播放器的timeupdate事件,在歌词对象用当前播放时间轴位置查找对应歌词以及歌词的。但是会出现错位的bug,

    未解决~大家有什么建议呢~

    ps:代码实在不够优雅,大家给点意见重构代码吧~

    源码

  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/10manongit/p/12935051.html
Copyright © 2011-2022 走看看