基于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 相关文章推荐
JavaScript开发规范要求(规范化代码)
Aug 16 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
详解通过源码解析Node.js中cluster模块的主要功能实现
May 16 Javascript
Vue表单及表单绑定方法
Sep 04 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
如何优雅地在Node应用中进行错误异常处理
Nov 25 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 Javascript
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
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程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP 实现链式操作
2021/03/09 PHP
动手学习无线电
2021/03/10 无线电
js正文内容高亮效果的实现方法
2013/06/30 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
Python切换pip安装源的方法详解
2016/11/18 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
导游词之任弼时故居
2020/01/07 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers