效果展示

 

 项目总结

  •  请求数据的方式采用wx.request(),将其封装称为一个Promise对象
export default (url, data={}, method = "GET") => {
    return new Promise((resolve, reject) => {
        wx.request({
            url: config.host + url,
            data,
            method,
            header: {
                cookie: wx.getStorageSync('cookies')?wx.getStorageSync('cookies').find(item => item.indexOf('MUSIC_U') !== -1):''
            },
            success: (res) => {
                if(data.isLogin) {
                    wx.setStorage({
                        key: 'cookies',
                        data: res.cookies
                    })
                }
                resolve(res.data)
            },
            fail: (err) => {        
                reject(err)
            }
        })
    })
}
  • 通过在app.js中定义全局属性,将是否有音乐在播放记录下来
App({
  globalData: {
    isMusicPlay: false, // 是否有音乐在播放
    musicId: '' // 音乐id
  },
})
  •  页面之间的相互通信采用pubsub-js,订阅事件与发布事件。歌单页面首先订阅播放页面发布的消息,得到一个变量是选择下一首还是上一首,然后将下一首或者上一首的歌曲的id发布给播放页面,播放页面订阅歌单页面发来的歌曲id,从而请求这首歌的播放数据

 歌单页面

PubSub.subscribe('switchType', (msg, type) => {
    PubSub.publish('musicId', musicId)
}

 播放页面

PubSub.subscribe('musicId', (msg, musicId) => {})
PubSub.publish('switchType', type)
  •  搜索功能则采用节流的方式,一直发送请求,isSend初始值为false,会发送一次请求,300毫秒之内如果用户再次输入则直接return不会到this.getSearchList()发送请求
handleInputChange(event) {
    this.setData({
        searchContent: event.detail.value.trim()
    })
    if (isSend) {
       return
    }
    isSend = true;
    this.getSearchList();

    setTimeout(() => {
        isSend = false;
    }, 300)

},

 项目源码

 gitee地址:https://gitee.com/tao-yuhan/smart-music.git