基于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 html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
AngularJS动态生成div的ID源码解析
Aug 29 Javascript
Node.js学习之地址解析模块URL的使用详解
Sep 28 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
聊聊JS ES6中的解构
Apr 29 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 header()函数使用说明
2008/07/10 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
详解php协程知识点
2018/09/21 PHP
jQuery each()方法的使用方法
2010/03/18 Javascript
js 小数取整的函数
2010/05/10 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
python类的继承实例详解
2017/03/30 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
如何通过Python实现标签云算法
2019/07/02 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
美的官方商城:Midea
2016/09/14 全球购物
我们的节日国庆活动方案
2014/08/19 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
机关作风建设整改方案
2014/10/27 职场文书
2016年春节问候语
2015/11/11 职场文书
创业计划书详解
2019/07/19 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python