基于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脚本性能的优化方法
Feb 02 Javascript
随机显示经典句子或诗歌的javascript脚本
Aug 04 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
基于复选框demo(分享)
Sep 27 Javascript
AngularJs 禁止模板缓存的方法
Nov 28 Javascript
浅谈Vue初学之props的驼峰命名
Jul 19 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 23 Javascript
react-intl实现React国际化多语言的方法
Sep 27 Javascript
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
我的论坛源代码(二)
2006/10/09 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python的净值数据接口调用示例分享
2016/03/15 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
详解Python的三种可变参数
2019/05/08 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
python使用列表的最佳方案
2020/08/12 Python
linux面试相关问题
2012/08/11 面试题
运动会表扬稿大全
2014/01/16 职场文书
承诺书样本
2014/08/30 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
2015年女职工工作总结
2015/05/15 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python