基于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 相关文章推荐
一个简单的js动画效果代码
Jul 20 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
Jun 19 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
Sep 28 Javascript
jquery中用jsonp实现搜索框功能
Oct 18 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
详解angular路由高亮之RouterLinkActive
Apr 28 Javascript
微信小程序实现随机验证码功能
Dec 20 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
jQuery实现日历效果
Sep 11 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学习 运算符与运算符优先级
2008/06/15 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
django反向解析URL和URL命名空间的方法
2018/06/05 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python制作动态字符图的实例
2019/01/27 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
资深生产主管自我评价
2013/09/22 职场文书
班长岗位职责
2013/11/10 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
小学重阳节活动总结
2015/03/24 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL