基于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 相关文章推荐
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
js函数setTimeout延迟执行的简单介绍
Jul 17 Javascript
jQuery动态修改超链接地址的方法
Feb 13 Javascript
js电话号码验证方法
Sep 28 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
Jul 10 Javascript
js实现图片懒加载效果
Jul 17 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 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
PHP语法速查表
2007/01/02 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
python基于C/S模式实现聊天室功能
2019/01/09 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python 读取、写入txt文件的示例
2020/09/27 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
司机辞职报告范文
2014/01/20 职场文书
社团文化节策划书
2014/02/01 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
行政专员的岗位职责
2014/03/10 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
测量员岗位职责
2015/02/14 职场文书
迎新生晚会主持词
2015/06/30 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技