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:代码实在不够优雅,大家给点意见重构代码吧~

    源码

  • 相关阅读:
    TinyOS功率编程指南
    深度学习入门资料
    通信常识
    CTF入门
    前端开发工具之服务器选择
    Spring
    NoSQL -- MongoDB
    NoSQL -- Redis
    mysql alter table修改表结构添加多个字段的几个写法
    gongle 访问助手安装
  • 原文地址:https://www.cnblogs.com/10manongit/p/12935051.html
Copyright © 2011-2022 走看看