美文网首页
在线音乐FM开发总结

在线音乐FM开发总结

作者: 取个帅气的名字真好 | 来源:发表于2018-02-07 17:10 被阅读33次
效果图.gif

响应式 大屏幕适配比例协调
页面功能
播放、暂停、下一曲、音乐进度条、音乐分类、音乐分类数据如何获取、获取到数据之后如何切换到下一页 、歌词获取

音乐分类左右滚动按钮

HTML

<div class="list clearfix">
    <ul>
      <li>
        <img src="./img/Dream.png">
        <p>1</p>
      </li>
      <li>
        <img src="./img/Dream.png">
        <p>1</p>
      </li>
      <li>
        <img src="./img/Dream.png">
        <p>1</p>
      </li>
      <li>
        <img src="./img/Dream.png">
        <p>1</p>
      </li>
    </ul>
  </div>

css

......
footer .list{
height: 25vh;
width: 100%;
position: relative;
overflow: hidden;
}
footer ul{
position: absolute;
left: 0;
list-style: none; 
}
......

最初想法
当点击右按钮让整个list往左移动,移动当前list的宽度。

问题1:体验效果不好,最后一个只显示一半
bug

优化
只移动当前完整的li。
当点击左/右按钮,让当前ul做
一个移动,移动当前ul的宽度

css部分
绝对定位ul。
设置left为0
ul父容器(list)必须加高度

li的个数 = Math.floor(list容器的宽度/当前每一个li的宽度)
left = li的个数*当前每一个li的宽度

代码如下

js

this.$right.on('click', function () {
      var itemWidth = _this.$list.find('li').outerWidth(true)
      var rowCount = Math.floor(_this.$list.width() / itemWidth)
      _this.$ul.animate({
        left: '-=' + rowCount * itemWidth
      }, 400)
    }

问题2:到了最后结束没有li了再点出现一片空白
空白.png

优化:
left值 + list的宽度 >= 总体ul宽度
parseFloat 去掉后面的px单位,变成数字。

this.isToStart = true
...省略
 var _this = this
    this.$right.on('click', function () {
      var itemWidth = _this.$list.find('li').outerWidth(true)
      var rowCount = Math.floor(_this.$list.width() / itemWidth)
      if (!_this.isToEnd) { //如果没有到结尾的时候,可以继续点击
        _this.$ul.animate({
          left: '-=' + rowCount * itemWidth
        }, 400, function () {
          //如果到了结尾,isToEnd = true
          if (parseFloat(_this.$list.width()) - parseFloat(_this.$ul.css('left')) >= parseFloat(_this.$ul.css('width'))) {
            _this.isToEnd = true
          }
        })
      }
    })
问题3:当快速点击左/右按钮时,也会出现空白。

优化:
防止用户重复点击

 this.isToEnd = false 
 this.isToStart = true
 this.isAnimate = false //防止重复点击
...省略
 var _this = this
    this.$right.on('click', function () {
      if (_this.isAnimate) return //如果动画正则播放,那么直接退出(return)什么都不做。
      var itemWidth = _this.$list.find('li').outerWidth(true)
      var rowCount = Math.floor(_this.$list.width() / itemWidth)
      if (!_this.isToEnd) { //如果没有到结尾的时候,可以继续点击
        _this.isAnimate = true 
        _this.$ul.animate({
          left: '-=' + rowCount * itemWidth
        }, 400, function () {
          _this.isAnimate = false //等播放完成之后为false
          _this.isToStart = false
          //如果到了结尾,isToEnd = true
          if (parseFloat(_this.$list.width()) - parseFloat(_this.$ul.css('left')) >= parseFloat(_this.$ul.css('width'))) {
            _this.isToEnd = true
          }
        })
      }
    })

待续...

相关文章

  • 在线音乐FM开发总结

    响应式 大屏幕适配比例协调页面功能播放、暂停、下一曲、音乐进度条、音乐分类、音乐分类数据如何获取、获取到数据之后如...

  • 音乐的后台播放

    我的小豆FM已经可以顺利播放在线音乐,接下来研究下如何后台播放。参考:Background Modes In iO...

  • 2018-01-14

    2018-01-014 01.14技术部门工作梳理 一、本周任务进度 1.裤兜FM ①进度 在本周裤兜FM的开发工...

  • higher-music 基于Vue的支持歌单外链的在线网页音乐

    一款基于Vue打造的网页在线音乐播放器,利用工作空闲时间与大学同学@ganp1020一起开发。目前正在开发阶段,已...

  • 数据存储之NSKeyedArchiver

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之CoreData(基础)

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之FMDB

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • 数据存储之NSUserDefaults

    ios开发常用的五种数据存储方式: plist NSUserDefaults NSKeyedArchiver FM...

  • FFM、UP-FM和CFM

    最近在老师的推荐下,看了几篇论文。下面来总结一下FM的“延申宝宝”——FFM、UP-FM和CFM。 这篇简书主要解...

  • Python 面试题

    面试题总结-Python Python语言特性[http://fm126.top/article/29#pytho...

网友评论

      本文标题:在线音乐FM开发总结

      本文链接:https://www.haomeiwen.com/subject/koxgzxtx.html