• 小程序-分享菜单列表 与 音乐播放


     onShareTap: function(event) {
        // //缓存最大不能超过10m,如果不删除就是永久存在的
        // wx.removeStorageSync('key');//个别删除
        // wx.clearStorageSync();//全部删除
    
        const itemList = [
          '分享给好友',
          '分享到朋友圈',
          '分享到QQ',
          '分享到微博'
        ]
    
        //操作菜单列表
        wx.showActionSheet({
          itemList: itemList,
          itemColor:'#405f80',
          success:function(res){
               wx.showModal({
                 title: '用户' + itemList[res.tapIndex],
                 content: '用户是否取消?' + res.errMsg+'现在还不能实现分享功能',
               })
          }
        })
      },

     音乐播放功能

    首先要有个标识,播放显示播放图标,暂停显示暂停图标

      /**
       * 页面的初始数据
       */
      data: {
        currentPostId: 0,
        collected: false,
        isPlayMusic:false
      },

    <image 
      class='audio' 
      src="{{isPlayMusic?'/images/music/music-stop.png':'/images/music/music-start.png'}}"
      catchtap='onMusicTap'
      ></image>

    音乐开始播放

      onMusicTap: function (event){
      //获取当前详情页的数据
        var postData = postsData.postList[this.data.currentPostId]
    //获取当前音乐是否播放着
        var isPlayMusic = this.data.isPlayMusic;
        if (isPlayMusic){
         //如果播放着就停止播放
          wx.pauseBackgroundAudio();
          this.setData({
            isPlayMusic:false
          })
        }else{
         //没有播放就开始播放
          wx.playBackgroundAudio({
            dataUrl: postData.music.url,//获取当前页的音乐信息
            title: postData.music.title,
            coverImgUrl: postData.music.coverImg
          })
          this.setData({
            isPlayMusic: true
          })
        }
    
      }

    播放音乐的小bug

    第一种,模拟器的播放会跟页面的播放按钮不同步

    解决:在obload周期函数中监听状态

      setMusicMonitor:function(){
    
        const self = this;
    //音乐播放监听,如果播放着,就同步按钮的状态
        wx.onBackgroundAudioPlay(function () {
          self.setData({
            isPlayMusic: true
          })
    //给全局属性赋值,解决第二种bug
    //详情页播放着然后退出来,再进去,播放按钮为没播放状态,实际上音乐还在播放状态,原因是,在进入页面的时候,重新加载了播放标识,为false,
    //解决方法是,设置一个全局属性,控制 变量
          globalData.g_isPlayMusic = true;
    //给全局属性赋值,解决第三种bug
    //第一个播放着然后退出,到第二个里面,他的状态也是播放的,所以要记录具体播放的是那个
          globalData.g_currentMusicPostId = self.data.currentPostId;
        })
        wx.onBackgroundAudioPause(function () {
          self.setData({
            isPlayMusic: false
          })
          globalData.g_isPlayMusic = false;
          globalData.g_currentMusicPostId = null;
        })
      },
      //在onload周期函数中这样使用
    //当音乐在播放状态,并且当前播放的音乐id等于你点击进来的id,这时候你进来的时候音乐播放按钮是正在播放的状态,否则不变,因为数据重新加载的时候就是false,未播放状态
    
      if (globalData.g_isPlayMusic && globalData.g_currentMusicPostId === this.data.currentPostId){
          this.setData({
            isPlayMusic:true
          })
        }
  • 相关阅读:
    [程序员代码面试指南]栈和队列-单调栈结构(单调栈)
    快学Scala第一部分
    Add Digits
    Nim Game
    将分布式中多台节点的日志信息集中到一个节点上
    Eclipse调试的一些小技巧
    Maven的常用命令
    Eclipse插件本地扩展安装
    Spark应用程序的运行框架
    Spark运行各个时间段的解释
  • 原文地址:https://www.cnblogs.com/joer717/p/10609071.html
Copyright © 2020-2023  润新知