基于better-scroll 实现歌词联动功能的代码


Posted in Javascript onMay 07, 2020

BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。

BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。

正文

前段时间公司要做个歌词标记功能,标记副歌、前奏、无效内容等等。找了找没有找到类似的实现,只能自己实现一把。

功能已经上线了,这里记录一下用到的相关内容。

需求

  • 可以拖动进度条修改播放进度
  • 可以拖动歌词来修改播放进度
  • 播放时滚动歌词
  • 标记功能

测试地址:https://www.lilnong.top/stati ...

基于better-scroll 实现歌词联动功能的代码

实现

技术栈是 Vue + vant + better-scroll
开始调研的时候使用 vantPicker 来实现了一下,发现滚动歌词的时候没有动画,很难受改用了 better-scroll

better-scroll

better-scroll 文档

betterScrollList = new BScroll(wrapper,{
 probeType: 2, // 因为默认是不会调用 scroll 回调的,所以需要设置
 swipeTime: 300
})
betterScrollList.on('scroll', ()=>{
 //暂停歌曲
 //获取当前用户拖动的歌词,计算规则如下
  // 当前y / 最大y * 歌词行数
  // 当前y就是滚动的了多少
  // 最大y可以理解为高度
  // 上面计算出来就是进度比例。然后换算到行数就ok
})
betterScrollList.on('scrollEnd', ()=>{
 // 这里是校准到拖动歌词的位置
 // 播放歌曲
})

probeType

描述
0 不派发
1 会非实时(屏幕滑动超过一定时间后)派发scroll 事件
2 会在屏幕滑动的过程中实时的派发 scroll 事件
3 不仅在屏幕滑动的过程中,而且在 momentum 滚动动画运行过程中实时派发 scroll 事件

解析歌词

这里我是基于lyric-parser 这个库实现的。

因为我在网上找了几个库他们都使用的这个,所以我也就没找我们公司内部的解析代码。

lrc 歌词规则: [分:秒.毫秒]歌词

基于better-scroll 实现歌词联动功能的代码

联动

修改播放进度

这里我是直接改的 currentTime 来实现。

监听播放进度

这里我是监听 timeupdate 回调,然后获取 currentTime,再去遍历歌词中对应时间的歌词,触发滚动效果。

修改音量

安卓是好的。ios 不行,然后被砍了。
这里是通过 volume 来操作。

总结

到此这篇关于基于better-scroll 实现歌词联动功能的代码的文章就介绍到这了,更多相关better-scroll 实现歌词联动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
JS操作数据库的实例代码
Oct 17 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
Sep 08 Javascript
JavaScript数据结构链表知识详解
Nov 21 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
浅谈 vue 中的 watcher
Dec 04 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
Feb 02 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 Javascript
JS实现json数组排序操作实例分析
Oct 28 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
Vue双向绑定实现原理与方法详解
May 07 #Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 #Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 #Javascript
简单了解JavaScript弹窗实现代码
May 07 #Javascript
angular组件间传值测试的方法详解
May 07 #Javascript
Node.js API详解之 timer模块用法实例分析
May 07 #Javascript
JS面试题中深拷贝的实现讲解
May 07 #Javascript
You might like
PHP自动生成月历代码
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
django url到views参数传递的实例
2019/07/19 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
django 实现简单的插入视频
2020/04/07 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
乡下人家教学反思
2014/02/01 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
幼儿园家长寄语
2014/04/02 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
销售经理工作检讨书
2015/02/19 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书