美文网首页让前端飞Web前端之路
WeChat 文章评论页(三)

WeChat 文章评论页(三)

作者: Nian糕 | 来源:发表于2020-03-09 17:31 被阅读0次
    Unsplash

    本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问题的解决方案,还请大家购买书籍进行学习实践,该系列博文的发布已得到七月老师的授权许可

    授权许可

    0 系列文章目录

    01 WeChat 从一个简单的“Welcome”页面来开启小程序之旅吧
    02 WeChat 文章列表页面(一)
    03 WeChat 文章列表页面(二)
    04 WeChat 模块、模板与缓存
    05 WeChat 文章详情页
    06 WeChat 文章评论页(一)
    07 WeChat 文章评论页(二)
    08 WeChat 文章评论页(三)

    1 实现发送语音功能

    我们之前已经实现了文字和图片评论功能,接下来实现的语音发送功能,建议大家在真机上运行小程序进行调试,我们在之前的 wxml 文件中已经注册了 recordStartrecordEnd 事件函数,按住录音按钮之后会执行 recordStart 函数,并通过绑定变量 recodingClass 来改变录音按钮的样式,随后调用 wx.startRecord 录音 API,如果录音成功就执行 success 方法,录音失败则执行 fail 方法,无论录音成功还是失败,都将执行 compelte 方法,结束录音我们调用了 wx.stopRecord 方法,若是不调用该方法,那么录音开始 1 分钟后自动结束录音,这种情况大家可自行实践

    // pages/post/post-comment/post-comment.js
    //开始录音
    recordStart: function () {
      let that = this;
      this.setData({
        recodingClass: 'recoding'
      })
      this.startTime = new Date();
      wx.startRecord({
        success: function (res) {
          console.log('success');
          let diff = (that.endTime - that.startTime) / 1000
          diff = Math.ceil(diff)
          //发送录音
          that.submitVoiceComment({ url: res.tempFilePath, timeLen: diff })
        },
        fail: function (res) {
          console.log('fail')
          console.log(res)
        },
        complete: function (res) {
          console.log('complete')
          console.log(res)
        }
      })
    },
    //结束录音
    recordEnd: function () {
      this.setData({
        recodingClass: ''
      });
      this.endTime = new Date()
      wx.stopRecord()
    },
    //提交录音 
    submitVoiceComment: function (audio) {
      let newData = {
        username: "青石",
        avatar: "/images/avatar/avatar-3.png",
        create_time: new Date().getTime() / 1000,
        content: {
          txt: '',
          img: [],
          audio: audio
        },
      }
      //保存新评论到缓存数据库中
      this.dbPost.newComment(newData)
      //显示操作结果
      this.showCommitSuccessToast()
      //重新渲染并绑定所有评论
      this.bindCommentData()
    }
    

    2 实现语音暂停播放功能

    语音的播放需要满足以下几个播放场景,假设有两条语音—— A 语音和 B 语音,当点击 A 语音时:如果 A 语音处于未播放状态,就开始播放 A 语音;如果 A 语音处于暂停状态,就继续播放 A 语音。当点击 B 语音时:B 语音的行为同上述的 A 语音;无论 A 语音处于何种状态,都能立刻被中断,被中断后,再次点击 A 语音,A 语音将重新开始播放

    小程序提供了 wx.playVoice 方法用于播放语音,wx.pauseVoice 方法用于暂停语音播放,wx.stopVoice 方法用于停止语音播放,如果我们调用 wx.pauseVoice 方法暂停语音播放,那么再次调用 wx.playVoice 方法播放同一个文件时,就会从暂停处开始播放;如果想要从头开始播放,需要先调用 wx.stopVoice 方法

    wx.playVoice 方法自身会记录上一次播放语音的 url,当我们播放 B 语音时,该方法会自行对比两次播放的 url,如果两次播放的 url 相同,且第一次播放的语音被暂停了,就将继续上一次语音的播放;如果第二次播放的语音和第一次不同,就直接播放新语音

    // pages/post/post-comment/post-comment.js
    import { DBPost } from '../../../db/DBPost.js'
    
    Page({
      data: {
        ...
        // 保存当前正播放语音的url
        currentAudio: ''
      },
      ...
      playAudio: function (event) {
        let url = event.currentTarget.dataset.url,
            that = this;
        //暂停当前录音
        if (url == this.data.currentAudio) {
          wx.pauseVoice();
          this.data.currentAudio = ''
        }
        //播放录音
        else {
          this.data.currentAudio = url;
          wx.playVoice({
            filePath: url,
            complete: function () {
              //只有当录音播放完后才会执行
              that.data.currentAudio = ''
              console.log('complete')
            },
            success: function () {
              console.log('success')
            },
            fail: function () {
              console.log('fail')
            }
          })
        }
      }
    })
    

    3 实现文章阅读计数功能

    我们没有在这个项目中实现实时刷新,当我们刷新项目或者下次进入小程序时,文章列表的阅读数才会被更新

    // pages/post/post-detail/post-detail.js
    Page({
      data: {},
      onLoad: function(options) {
        ...
        this.addReadingTimes()
      },
      ...
      //阅读量+1
      addReadingTimes: function () {
        this.dbPost.addReadingTimes();
      }
    })
    
    // db/DBPost.js
    //阅读数+1
    addReadingTimes() {
      this.updatePostData('reading');
    }
    

    该章节的内容到这里就全部结束了,源码我已经发到了 GitHub WeChat_08 上了,有需要的同学可自行下载

    End of File

    行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下喜欢关注,为了我能早日成为简书优秀作者献上一发助攻吧,谢谢!^ ^

    相关文章

      网友评论

        本文标题:WeChat 文章评论页(三)

        本文链接:https://www.haomeiwen.com/subject/xfrpdhtx.html