博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue音乐项目笔记(三)
阅读量:5093 次
发布时间:2019-06-13

本文共 3696 字,大约阅读时间需要 12 分钟。

1. 音乐播放前进后退的实现   https://blog.csdn.net/weixin_40814356/article/details/80379606

2. 音乐进度条实现(单独一个组件) https://blog.csdn.net/weixin_40814356/article/details/80387804

思想: a. 播放进度条样式  定义高但是不定义宽度。 父组件computed: 当音乐不断变化的时候 它与总时间有个不断变化的百分比

子组件接收的时候 watch它的变化 不断去修改progress和小球的宽度

b. 实现拖动效果

给progress-bar定义触摸事件 

 

在created中创建一个this.touch={}对象,用来保存函数中的一些数据

初始化touch事件 记录第一次触摸的位置,以及此时小球偏移的位置   在progressTouchMove方法中,记录触摸的距离(即拖动的距离),得出当前偏移距离(记录的小球偏移距离加上差值) 结束的时候把初始化置为false

然后实现拖动到指定位置,歌曲播放指定位置的功能    touch结束的时候,向父组件触发一个事件,获取bar的宽度,然后用progress的宽度/bar的宽度,得到百分比 通过$emit传递出去  父组件接收到事件 改变audio的播放点

 

最最后:实现点击的功能

c. 音乐环形进度条的实现

逻辑的实现:

 3.如何获取歌词的数据,并解析jsonp的格式为json的格式

 https://blog.csdn.net/weixin_40814356/article/details/80401989

4. 歌词左右滑动的实现  https://blog.csdn.net/weixin_40814356/article/details/80417580

给中间加一个touch事件 用一个currentShow保存歌词显示和隐藏的状态:是唱片页还是歌词页

 touchstart的时候维护几个状态:记录x轴和y轴的坐标

touchmove:

1 middleTouchMove (e) { 2  3       if (!this.touch.init) { 4  5         return 6  7       } 8  9       const touch = e.touches[0]10 11       const deltaX = touch.pageX - this.touch.startX12 13       const deltaY = touch.pageY - this.touch.startY14 15       // 为什么维护纵轴,当纵轴大于横轴的偏移的时候,就不应该移动16 17       if (Math.abs(deltaY) > Math.abs(deltaX)) {18 19         return20 21       }22 23       // 首先记录歌词的起始位置24 25       const left = this.currentShow === 'cd' ? 0 : -window.innerWidth26 27       // 最终就两种状态,left的值有两种状态,如果是cd,就是028 29       const offsetWidth = Math.min(0, Math.max(-window.innerWidth, left + deltaX))30 31       // 假如是左滑,那么dalte是负的32 33       this.touch.percent = Math.abs(offsetWidth / window.innerWidth)34 35       //这个percent是维护偏移的距离,>0.1和<0.936 37       this.$refs.lyricList.$el.style[transform] = `translate3d(${offsetWidth}px, 0, 0)`38 39       // lyricList是一个scroll组件,是一个vue组件,通过$el可以获取dom40 41       this.$refs.lyricList.$el.style[transitionDuration] = 042 43       this.$refs.middleL.style.opacity = 1 - this.touch.percent44 45     },

touchend:

1 middleTouchEnd () { 2  3       let offsetWidth 4  5       let opacity 6  7       // 定义offset和opacity 8  9       if (this.currentShow === 'cd') {10 11         // 如果在cd的情况下12 13         if (this.touch.percent > 0.1) {14 15           // 当活动距离超出0.1,做如下操作16 17           offsetWidth = -window.innerWidth18 19           opacity = 020 21           this.currentShow = 'lyric'22 23         } else {24 25           offsetWidth = 026 27           opacity = 128 29           // 否则回复状态30 31         }32 33       } else {34 35         if (this.touch.percent < 0.9) {36 37           // 当活动距离小于0.9,做如下操作38 39           offsetWidth = 040 41           opacity = 142 43           this.currentShow = 'cd'44 45         } else {46 47           offsetWidth = -window.innerWidth48 49           opacity = 050 51         }52 53       }54 55       const time = 30056 57       this.$refs.lyricList.$el.style[transform] = `translate3d(${offsetWidth}px, 0, 0)`58 59       // 改变他的位置60 61       this.$refs.lyricList.$el.style[transitionDuration] = `${time}ms`62 63       // 过渡的时间,在move的时候要清零64 65       this.$refs.middleL.style.opacity = opacity66 67       this.$refs.middleL.style[transitionDuration] = `${time}ms`68 69     },

解决歌词不断跳动:实际上就是清空lyric中的timer计时器

**if (this.currentLyric) {        this.currentLyric.stop()      }**
View Code

解决歌词和音乐同步播放:

this.setPlayingState(!this.playing)      if (this.currentLyric) {        this.currentLyric.togglePlay()      }
View Code

解决循环播放不会到一开始的问题,在loop的代码如下:

if (this.currentLyric) {          this.currentLyric.seek(0)        }
View Code

拖动bar的时候,歌词跟着滚动:

播放页歌词的实现:

添加dom

  1. <div class="playing-lyric-wrapper">
  2. <div class="playing-lyric">{
    {playingLyric}}</div>
  3. </div>

维护一个playLric

然后:在lyric回调的时候设置playingLric

 

转载于:https://www.cnblogs.com/aimeeblogs/p/9489608.html

你可能感兴趣的文章
子网划分详解
查看>>
Linux下MySQL的root密码忘记解决方法
查看>>
4H.Applese 的大奖(C++)
查看>>
从运行中启动收索引擎
查看>>
java.sql.Date java.sql.Time java.sql.Timestamp 之比较
查看>>
JavaScript基本语法
查看>>
导出Maven依赖包
查看>>
实验三
查看>>
kubeadm安装k8s集群及dashboard安装(推荐)
查看>>
数据库操作语句
查看>>
Java常见异常
查看>>
XML解析
查看>>
switch处理多分支结构
查看>>
.net使用abot爬虫简单例子
查看>>
直接拿来用!最火的Android开源项目(完结篇)(转)
查看>>
Handler相关
查看>>
【转】关于windows server 2003不能共享问题
查看>>
jsonp的简单实现
查看>>
光电系统显控软件
查看>>
Jquery Mini UI 让我们的项目体验轻便快捷
查看>>