前言

最近自己写了个移动端音乐播放器,用了很多框架,也踩了很多坑,感觉比较复杂的就是计算歌词实时播放了,所以想着大概给整理了一下,分享出来,有问题的话朋友们可以指出,有需要的朋友们也可以学习学习。
布局
(歌词都是后台数据获取,方便理解我把所有歌词都一一列出来)
<section> <figure> <img id="animat" src="img/img3.jpg"/> </figure> <div class="lyric"> <div class="lrc-list"> <p data-play="audio-t-0" data-index="0">逃跑计划 </p> <p data-play="audio-t-1" data-index="1">一万次悲伤 </p> <p data-play="audio-t-2" data-index="2">oh honey </p> <p data-play="audio-t-3" data-index="3">我脑海里全都是你 </p> <p data-play="audio-t-8" data-index="4">oh无法抗拒的心情 </p> <p data-play="audio-t-13" data-index="5">难以呼吸</p> <p data-play="audio-t-15" data-index="6">tonight </p> <p data-play="audio-t-17" data-index="7">是否又要错过一个夜晚</p> <p data-play="audio-t-23" data-index="8">是否还要掩饰最后的期待 </p> <p data-play="audio-t-29" data-index="9">oh tonight </p> <p data-play="audio-t-30" data-index="10">一万次悲伤 </p> <p data-play="audio-t-33" data-index="11">依然会有意义</p> <p data-play="audio-t-35" data-index="12">我一直在最温暖的地方等你</p> <p data-play="audio-t-40" data-index="13">似乎只能这样停留一个方向</p> <p data-play="audio-t-46" data-index="14">已不能改变</p> <p data-play="audio-t-51" data-index="15">每一颗眼泪是遗忘的光 </p> <p data-play="audio-t-57" data-index="16">最昏暗的地方也变得明亮</p> <p data-play="audio-t-61" data-index="17">我奔涌的暖流寻找你的海洋 </p> <p data-play="audio-t-67" data-index="18">我注定这样</p> <p data-play="audio-t-73" data-index="19">oh honey </p> <p data-play="audio-t-75" data-index="20">你目光里充满忧郁 </p> <p data-play="audio-t-81" data-index="21">就像经历一遍飞行难以逃避</p> <p data-play="audio-t-87" data-index="22">tonight </p> <p data-play="audio-t-89" data-index="23">是否还要错过这个夜晚</p> <p data-play="audio-t-91" data-index="24">是否还要熄灭所有的期待</p> <p data-play="audio-t-95" data-index="25">tonight</p> <p data-play="audio-t-100" data-index="26">一万次悲伤</p> <p data-play="audio-t-102" data-index="27">依然会有意义</p> <p data-play="audio-t-106" data-index="28">我一直在最后的地方等你</p> <p data-play="audio-t-109" data-index="29">似乎只能这样</p> <p data-play="audio-t-114" data-index="30">停留一个方向</p> <p data-play="audio-t-120" data-index="31">已不能改变</p> <p data-play="audio-t-123" data-index="32">每一颗眼泪是遗忘的光</p> <p data-play="audio-t-130" data-index="33">最昏暗的地方也变得明亮</p> <p data-play="audio-t-135" data-index="34">我奔涌的暖流寻找你的海洋</p> <p data-play="audio-t-141" data-index="35">我注定这样</p> <p data-play="audio-t-155" data-index="36">一万次悲伤 </p> <p data-play="audio-t-189" data-index="37">依然会有意义</p> <p data-play="audio-t-192" data-index="38">我一直在最后的地方等你</p> <p data-play="audio-t-197" data-index="39">似乎只能这样</p> <p data-play="audio-t-200" data-index="40">停留一个方向 </p> <p data-play="audio-t-204" data-index="41">已不能改变</p> <p data-play="audio-t-208" data-index="42">每一颗眼泪是遗忘的光</p> <p data-play="audio-t-213" data-index="43">最昏暗的地方也变得明亮</p> <p data-play="audio-t-218" data-index="44">我奔涌的暖流寻找你的海洋</p> <p data-play="audio-t-225" data-index="45">我注定这样</p> <p data-play="audio-t-236" data-index="46">oh honey </p> <p data-play="audio-t-238" data-index="47">我脑海里全都是你 </p> <p data-play="audio-t-243" data-index="48">oh无法抗拒的心情 </p> <p data-play="audio-t-247" data-index="49">难以呼吸</p> </div> </div> </section>
注意 : 给每一句歌词都自定义两个属性,data-play属性为了计算什么时候显示该句歌词,它的属性值audio-t- “num” 是表示这句歌词在num秒的时候高亮显示; data-index为了计算什么时候歌词往上走,就按顺序定义就行。
以下是静态效果图:
(效果图没有歌词是因为左滑才出现歌词)
左滑出现歌词
$('figure').on("swipeLeft" , function(){
$('figure').css('display' , 'none');
$('.lyric').css('display' , 'block').addClass("animated slideInRight");
})
$('.lyric').on("swipeRight" , function(){
$('.lyric').css('display' , 'none');
$('figure').css('display' , 'block').addClass("animated slideInLeft");
})
歌词出现:
重点来了
function lyricPlay(){
var timer2;
var $cur = null;
var $lrcbox = $(".lrc-list");
$lrcwrap = $lrcbox.parent();
clearInterval(timer2);
timer2 = setInterval( function(){
var time = Math.ceil( $('audio')[0].currentTime); //currentTime 是获取音乐实时播放时间
$cur = $("audio-t-"+time).selector;//拿到自定义属性data-play
$('p' , $lrcbox ).each(function(){ //循环拿到p
var playT = $(this).data('play');//当前播放元素属性值
if( playT == $cur ){
//给符合条件歌词加上高亮并删除兄弟元素的class名
$(this).stop().addClass('acitve').siblings().removeClass('acitve');
}else{
return;
}
var index = $(this).data("index"); //当前元素下标
var lineHeight =$(this).height() ; //一行歌词高度
var boxHeight = $lrcwrap.height(); //歌词显示区域高度
var screensize = boxHeight / lineHeight; //一屏显示多少句歌词
var half = Math.floor(screensize / 2); //半屏歌词数量
//当前歌词超过半屏
if(index > half){
//计算出超过的高度 减去 一行歌词的高度
var top = (half - index) * lineHeight + lineHeight
$lrcbox.css({
"top" : parseInt(top) + "px"
});
}
})
} , 1000)
}
lyricPlay();
效果如下:
总结
以上就是这篇文章的全部内容了,当然以上方法都只是我自己的想法,如果不足之处欢迎大家指点,希望本文的内容对大家能有一定的帮助。
# jquery实时更新
# jquery实时进度条
# jquery
# ajax实时更新
# jquery实现input输入框实时输入触发事件代码
# js与jquery实时监听输入框值的oninput与onpropertychange方法
# JQuery 改变页面字体大小的实现代码(实时改变网页字体大小)
# PHP+jquery实时显示网站在线人数的方法
# jquery+ajax实现注册实时验证实例详解
# jQuery选择头像并实时显示的代码
# jquery购物车实时结算特效实现思路
# javascript和jQuery实现网页实时聊天的ajax长轮询
# 基于Jquery插件Uploadify实现实时显示进度条上传图片
# jquery 表格排序、实时搜索表格内容(附图)
# 都是
# 会有
# 一颗
# 我一直
# 等你
# 一万次
# 什么时候
# 朋友们
# 自定义
# 脑海里
# 自己的
# 夜晚
# 来了
# 是因为
# 就像
# 一句
# 有一定
# 我把
# 一遍
# 就行
相关文章:
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
h5在线制作网站电脑版下载,h5网页制作软件?
太平洋网站制作公司,网络用语太平洋是什么意思?
图册素材网站设计制作软件,图册的导出方式有几种?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何通过西部数码建站助手快速创建专业网站?
IOS倒计时设置UIButton标题title的抖动问题
高性价比服务器租赁——企业级配置与24小时运维服务
如何在万网ECS上快速搭建专属网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
专业公司网站制作公司,用什么语言做企业网站比较好?
Java解压缩zip - 解压缩多个文件或文件夹实例
建站之星安装步骤有哪些常见问题?
如何自定义建站之星模板颜色并下载新样式?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
海南网站制作公司有哪些,海口网是哪家的?
成都网站制作报价公司,成都工业用气开户费用?
建站主机核心功能解析:服务器选择与网站搭建流程指南
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何规划企业建站流程的关键步骤?
建站之星如何优化SEO以实现高效排名?
C#怎么使用委托和事件 C# delegate与event编程方法
javascript基本数据类型及类型检测常用方法小结
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何高效利用200m空间完成建站?
如何通过网站建站时间优化SEO与用户体验?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
c# 在ASP.NET Core中管理和取消后台任务
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
建站上市公司网站建设方案与SEO优化服务定制指南
C++如何使用std::optional?(处理可选值)
安徽网站建设与外贸建站服务专业定制方案
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
定制建站哪家更专业可靠?推荐榜单揭晓
建站VPS配置与SEO优化指南:关键词排名提升策略
南平网站制作公司,2025年南平市事业单位报名时间?
南宁网站建设制作定制,南宁网站建设可以定制吗?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
电商平台网站制作流程,电商网站如何制作?
如何在阿里云完成域名注册与建站?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
深圳网站制作培训,深圳哪些招聘网站比较好?
网站制作新手教程,新手建设一个网站需要注意些什么?
*请认真填写需求信息,我们会在24小时内与您取得联系。