基于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 相关文章推荐
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
将数字转换成大写的人民币表达式的js函数
Sep 21 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
Feb 07 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
node.js基础知识小结
Feb 26 Javascript
Vue.js中的extend绑定节点并显示的方法
Jun 20 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
微信小程序引入VANT组件的方法步骤
Sep 19 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实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
node.js通过url读取文件
2020/10/16 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
python实现目录树生成示例
2014/03/28 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python让函数不返回结果的方法
2020/06/22 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
留学自荐信的技巧
2013/10/17 职场文书
兼职学生的自我评价
2013/11/24 职场文书
电大本科自我鉴定
2014/02/05 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
小学生交通安全寄语
2015/02/27 职场文书
第一军规观后感
2015/06/12 职场文书
爱护环境建议书
2015/09/14 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript
python 学习GCN图卷积神经网络
2022/05/11 Python