基于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 相关文章推荐
jquery URL参数判断,确定菜单样式
May 31 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
Jun 05 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 Javascript
node和vue实现商城用户地址模块
Dec 05 Javascript
JS实现马赛克图片效果完整示例
Apr 13 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 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(3) php 函数
2010/02/15 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php实现倒计时效果
2015/12/19 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
js中遍历Map对象的简单实例
2016/08/08 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
js验证密码强度解析
2020/03/18 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现多线程采集的2个代码例子
2014/07/07 Python
python字符串对其居中显示的方法
2015/07/11 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
教师个人自我鉴定
2014/02/08 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
婚礼司仪主持词
2014/03/14 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
汽车转让协议书范本
2014/12/07 职场文书
经理岗位职责
2015/02/02 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript