用BroadcastChannel标签页通信实现音乐切换,模拟酷狗音乐

【需求】
1、点击音乐后新开页签,进行播放
2、切换歌曲后,页签不变且不刷新,直接切换歌曲
3、切换歌曲时不自动切换到播放页
(效果见酷狗音乐)

  • 音乐列表页
let musicList = document.querySelectorAll('.music-item>.play'); // 获取按钮NodeList
const channel = new BroadcastChannel('music') // 创建BroadcastChannel实例
for (const btn of musicList) { // 循环播放按钮添加点击事件
    btn.addEventListener('click',function(){
        const first = localStorage.getItem('firstPlayTab') // 本地缓存实现判断是否首次打开播放页
        const name = btn.dataset.name // 获取播放歌曲名
        if(!first){ // 播放tab页是否打开
            window.open(`./music.html?name=${name}`,'music') // 首次则新开播放页
        }else{
            channel.postMessage(name) // 发送BroadcastChannel消息
        }
    })
}
  • 音乐播放页
const name = getQueryString('name') // 首次打开获取歌曲名
const audio = document.querySelector('audio')
audio.src = `./${name}` // 播放相应歌曲
const channel = new BroadcastChannel('music') // 创建同name实例
channel.addEventListener('message',function(e){ // 监听消息
    document.querySelector('audio').src = `./${e.data}` // 切换歌曲
})
window.onbeforeunload = function(){
    localStorage.removeItem('firstPlayTab') // 网页关闭前删除本地缓存tag
}
window.onload = function(){
    localStorage.setItem('firstPlayTab','1') // 网页加载后添加本地缓存tag
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值