Vue音乐项目笔记(三)
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:
middleTouchMove (e) {
if (!this.touch.init) {
return
}
const touch = e.touches[0]
const deltaX = touch.pageX - this.touch.startX
const deltaY = touch.pageY - this.touch.startY
// 为什么维护纵轴,当纵轴大于横轴的偏移的时候,就不应该移动
if (Math.abs(deltaY) > Math.abs(deltaX)) {
return
}
// 首先记录歌词的起始位置
const left = this.currentShow === 'cd' ? 0 : -window.innerWidth
// 最终就两种状态,left的值有两种状态,如果是cd,就是0
const offsetWidth = Math.min(0, Math.max(-window.innerWidth, left + deltaX))
// 假如是左滑,那么dalte是负的
this.touch.percent = Math.abs(offsetWidth / window.innerWidth)
//这个percent是维护偏移的距离,>0.1和<0.9
this.$refs.lyricList.$el.style[transform] = `translate3d(${offsetWidth}px, 0, 0)`
// lyricList是一个scroll组件,是一个vue组件,通过$el可以获取dom
this.$refs.lyricList.$el.style[transitionDuration] = 0
this.$refs.middleL.style.opacity = 1 - this.touch.percent
},
touchend:
middleTouchEnd () {
let offsetWidth
let opacity
// 定义offset和opacity
if (this.currentShow === 'cd') {
// 如果在cd的情况下
if (this.touch.percent > 0.1) {
// 当活动距离超出0.1,做如下操作
offsetWidth = -window.innerWidth
opacity = 0
this.currentShow = 'lyric'
} else {
offsetWidth = 0
opacity = 1
// 否则回复状态
}
} else {
if (this.touch.percent < 0.9) {
// 当活动距离小于0.9,做如下操作
offsetWidth = 0
opacity = 1
this.currentShow = 'cd'
} else {
offsetWidth = -window.innerWidth
opacity = 0
}
}
const time = 300
this.$refs.lyricList.$el.style[transform] = `translate3d(${offsetWidth}px, 0, 0)`
// 改变他的位置
this.$refs.lyricList.$el.style[transitionDuration] = `${time}ms`
// 过渡的时间,在move的时候要清零
this.$refs.middleL.style.opacity = opacity
this.$refs.middleL.style[transitionDuration] = `${time}ms`
},
解决歌词不断跳动:实际上就是清空lyric中的timer计时器
**if (this.currentLyric) {
this.currentLyric.stop()
}**
解决歌词和音乐同步播放:
this.setPlayingState(!this.playing)
if (this.currentLyric) {
this.currentLyric.togglePlay()
}
解决循环播放不会到一开始的问题,在loop的代码如下:
if (this.currentLyric) {
this.currentLyric.seek(0)
}
拖动bar的时候,歌词跟着滚动:

播放页歌词的实现:
添加dom
- <div class="playing-lyric-wrapper">
- <div class="playing-lyric">{{playingLyric}}</div>
- </div>
维护一个playLric
然后:在lyric回调的时候设置playingLric
Vue音乐项目笔记(三)的更多相关文章
- Vue音乐项目笔记(一)
看到一位小可爱的手记,这里记录一下自己需要注意的地方的链接 1.手写轮播图(上) https://blog.csdn.net/weixin_40814356/article/details/80298 ...
- Vue音乐项目笔记(二)
1. Vuex https://blog.csdn.net/weixin_40814356/article/details/80347366 编写: 然后,在main.js中引入 在组件中改变stat ...
- Vue音乐项目笔记(五)
1.搜索列表的点击删除.删除全部的交互事件 https://blog.csdn.net/weixin_40814356/article/details/80496097 seach组件中放search ...
- Vue音乐项目笔记(四)(搜索页面提取重写)
1.如何通过betterScroll组件实现上拉刷新 https://blog.csdn.net/weixin_40814356/article/details/80478440 2.搜索页面跳转单曲 ...
- vue 自学项目笔记
感觉小青推荐的学习网课, 利用vue 仿制一个去哪网, 学习的东西很多, 在食用之前,需要先确保js 和css 过关 js https://www.bilibili.com/video/av3009 ...
- [Vue音乐项目] 第一节 环境搭建
1.Node安装 登录官网,下载最新版本并安装: 在我的电脑内,执行以下操作:右键->属性->高级->环境变量->系统变量->path 查看是否有node的安装路径,没有 ...
- 从无到有构建vue实战项目(三)
四.响应式布局的实现 elemnt-ui参考bootatrap提供了响应式布局,附上地址:https://element.eleme.cn/#/zh-CN/component/layout 以下是我的 ...
- ASP.Net MVC OA项目笔记<三>
1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...
- cocos2dx打飞机项目笔记三:HeroLayer类和坐标系
HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~ HeroLayer 类的成员如下: class HeroLayer : ...
随机推荐
- HTTP 压力测试工具
http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般不会 ...
- Windows操作系统下安装Ubuntu虚拟机
认识VMware虚拟机 VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统,它能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行 ...
- 逆波兰表达式|2013年蓝桥杯A组题解析第六题-fishers
逆波兰表达式 正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便. 例如:3 + 5 * (2 + 6) - 1 而且,常常需要用括号来改变运算次序. 相反,如果使用逆波兰表 ...
- HDU 4391 Paint The Wall(分块的区间维护)
题意:给出几个操作,把l-r赋值为z,询问l-r有几个z,其中z < INT_MAX 思路:因为z很大,所以很难直接用线段树去维护.这里可以使用分块来解决.我们可以让每个块用map去储存map[ ...
- vue.js精讲01
笔记及源码地址 : https://github.com/wll8/vue_note 01 2017-09-13 view一个 mvvm框架(库),和 ag 类似.比较小巧,容易上手. mvc: mv ...
- 清除浏览器CSS样式
/* YUI 3.18.1 (build f7e7bcb) Copyright 2014 Yahoo! Inc. All rights reserved. Licensed under the BSD ...
- transient关键字详解
作用 1,一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问. 2,transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被tr ...
- 关于C++中的friend友元函数的总结
1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率.如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数. ...
- node.js基本概念简单解释
1:什么是回调函数? 2:什么是同步异步 3:什么是I/O 4:什么是单线程/多线程 5:什么是阻塞/非阻塞 6:什么是事件 7:什么是事件驱动 8:什么是事件驱动的回调 9:什么是事件循环 解释: ...
- _itemmod_nopatch、_itemmod_nopatch_level、_itemmod_nopatch_spell、_itemmod_nopatch_src、_itemmod_nopatch_stat、_itemmod_nopatch_stat_prefix
原始物品(_itemmod_nopatch中Entry)需要能够装备 该功能产生的新物品不需要制作dbc 尽量避免配置主动技能(_itemmod_nopatch_spell) _itemmod_nop ...