// pages/detail/detail.js var player = wx.createInnerAudioContext(); Page({ /**

  • 页面的初始数据
  • isPlay: true, 播放状态
  • songs: [], 上个页面通过全局变量传过来的歌曲数组
  • index: 0, 操作界面歌曲所在数组中的编号
  • lyrics: [], 每次解析到的歌词和时间数组
  • scrollTop: 0, 竖向滚动条的位置
  • currentTime: 0, 当前播放时间
  • currentLyric: 0 目前被选中歌词是第几条 / data: { isPlay: true, songs: [], index: 0, lyrics: [], scrollTop: 0, currentTime: 0, currentLyric: 0 }, //上一首 prev() { var index = this.data.index; if (index == 0) { index = this.data.songs.length - 1; } else { index--; } this.data.index = index; this.play(this.data.songs[index].id); //更改歌曲名与歌手 this.setData({ song: this.data.songs[index], index: index }); }, //下一首 next() { var index = this.data.index; if (index == this.data.songs.length - 1) { index = 0; } else { index++; } this.data.index = index; this.play(this.data.songs[index].id); //更改歌曲名与歌手 this.setData({ song: this.data.songs[index], index: index }); }, clickPlay() { var isPlay = this.data.isPlay; if (isPlay == true) { //处于播放点击就暂停 player.pause(); } else { //处于暂停点击就播放 player.play(); } this.setData({ isPlay: !isPlay }); }, //歌词 lrc(songId) { wx.request({ url: httpss://music.163.com/api/song/lyric?os=pc&id=${songId}&lv=-1&kv=-1&tv=-1, success: (res) => { console.log(res); var str = res.data.lrc.lyric; var lyrics = []; console.log(str); //将歌词数组分割成一行一行 var lines = str.split("\n"); for (var i = 0; i < lines.length - 1; i++) { var line = lines[i]; console.log(line); //将时间与歌词分割开 var timeLyric = line.split("]"); //取出时间并转成毫秒数 var time = timeLyric[0].trim().replaceAll("[",""); var minute = parseInt(time.split(":")[0]); var second = parseFloat(time.split(":")[1]); var seconds = minute * 60 * 1000 + second * 1000; //取出歌词 var lyric = timeLyric[1].trim(); // console.log(time,lyric); var gqc = {}; gqc.time = seconds; gqc.lyric = lyric; lyrics.push(gqc); } this.setData({ lyrics: lyrics, }); console.log(lyrics); } }) }, //进度条跟随 follow(e) { console.log(e.detail.value); var value = e.detail.value; player.seek(value / 1000); }, //播放 play(songId) { this.lrc(songId); var src = https://music.163.com/song/media/outer/url?id=${songId}.mp3; player.src = src; console.log(src); player.play(); //设置定时器 var task = setInterval(() => { var playTime = parseInt(player.currentTime) * 1000; this.setData({ //转换成毫秒 currentTime: playTime }); //歌词动起来,用for循环 var lyrics = this.data.lyrics; for (var i = 0; i < lyrics.length - 1; i++) { if (playTime > lyrics[i].time && playTime < lyrics[i + 1].time) { this.setData({ currentLyric: i }); break; } //歌词向下滚动,根据行号数来移动 if (this.data.currentLyric >= 6) { this.setData({ scrollTop: (this.data.currentLyric - 3) * 20 }); } } }, 100); //播放错误时提示 player.onError(() => { wx.showToast({ title: '出现错误', icon: 'error', duration: 2000 }) }); //播放结束 player.onEnded(() => { clearInterval(task); this.setData({ isPlay: false, scrollTop: 0, currentTime: 0, currentLyric: 0 }); }); }, /*
  • 生命周期函数--监听页面加载 / onLoad(options) { //从全局变量中取出来 this.data.songs = getApp().globalData.songs; var index = options.index; this.data.index = index; console.log(options); //获取歌手歌曲名 this.setData({ song: this.data.songs[index], index: index }); this.play(this.data.songs[index].id); }, /*
  • 生命周期函数--监听页面初次渲染完成 / onReady() { }, /*
  • 生命周期函数--监听页面显示 / onShow() { }, /*
  • 生命周期函数--监听页面隐藏 / onHide() { }, /*
  • 生命周期函数--监听页面卸载 / onUnload() { }, /*
  • 页面相关事件处理函数--监听用户下拉动作 / onPullDownRefresh() { }, /*
  • 页面上拉触底事件的处理函数 / onReachBottom() { }, /*
  • 用户点击右上角分享 */ onShareAppMessage() { } }) 歌词突然不显示了内容:

很抱歉,由于代码的篇幅较长,无法直接判断出问题所在。可以尝试以下方法进行排查:

  1. 检查接口是否正常,尝试在浏览器中访问歌词接口,看看是否能够成功获取到歌词数据。
  2. 检查歌词数组是否为空,或者是否解析出错。
  3. 检查歌词的渲染方式是否正确,例如是否正确设置了歌词的位置和样式。
  4. 尝试在控制台输出相关变量和数据,查看是否有异常或者错误。
  5. 如果以上方法都无法解决问题,可以尝试重新编写歌词部分的代码,或者寻求他人的帮助。
网易云音乐小程序-歌曲详情页实现

原文地址: https://www.cveoy.top/t/topic/oRcQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录