基于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面向对象程序设计三 原型模式(上)
Dec 21 Javascript
js+css实现超简洁的二级下拉菜单效果代码
Sep 07 Javascript
不间断循环滚动效果的实例代码(必看篇)
Oct 08 Javascript
vue做移动端适配最佳解决方案(亲测有效)
Sep 04 Javascript
ES7之Async/await的使用详解
Mar 28 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
js+canvas实现五子棋小游戏
Aug 02 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 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
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
解读ES6中class关键字
2017/11/20 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
ES6的异步终极解决方案分享
2019/07/11 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
python读取xml文件方法解析
2020/08/04 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
公司经理聘任书
2014/03/29 职场文书
优秀语文教师事迹
2014/05/18 职场文书
专项法律服务方案
2014/06/11 职场文书
岳庙导游词
2015/02/04 职场文书
早会开场白台词大全
2015/06/01 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
业余无线电通联Q语
2022/02/18 无线电