微信小程序實現點擊拍照長按錄像功能

微信小程序實現點擊拍照長按錄像功能

代碼裏面註釋寫的都很詳細,直接上代碼。官方的組件屬性中有觸摸開始和觸摸結束屬性。本功能依靠這些屬性實現。小程序

.wxml代碼:
<!-- 相機 pages/camera/camera.wxml-->
<!-- 相機 -->
<camera wx:if="{{!videoSrc}}" device-position="back" flash="off" binderror="error" style="width: {{cameraWidth}}px; height: {{cameraHeight}}px;">
  <!-- 拍完顯示照片 -->
  <cover-image wx:if="{{image1Src}}" src='{{image1Src}}'></cover-image>
  <cover-view>
    <!-- 拍照按鈕 -->
    <button id='btn-photo-video' bindtouchstart="handleTouchStart" bindtouchend="handleTouchEnd" bindlongpress="handleLongPress" bindtap="handleClick">
      點擊/長按</button>
  </cover-view>
</camera>
<video wx:if="{{videoSrc}}" src="{{videoSrc}}" controls></video>
.wxss代碼:
/* pages/camera/camera.wxss */

cover-image,video {
  margin-top:100%;
  position: absolute;
  width: 200rpx;
  height: 200rpx;
}
#btn-photo-video{
  /* position: absolute; */
  margin-top:100%;
  width: 242rpx;
  left: 2%;
}
.js代碼:
// pages/camera/camera.js
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    cameraHeight: '',
    cameraWidth: '',
    image1Src: '',
    videoSrc: '',
    num: 0,
  },

  /**
   * 生命週期函數--監聽頁面加載
   */
  onLoad: function(options) {
    //調用設置相機大小的方法
    this.setCameraSize();
    this.ctx = wx.createCameraContext();
    console.log(this.lijiajun)

  },

  /**
   * 生命週期函數--監聽頁面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命週期函數--監聽頁面顯示
   */
  onShow: function() {

  },

  /**
   * 生命週期函數--監聽頁面隱藏
   */
  onHide: function() {

  },

  /**
   * 生命週期函數--監聽頁面卸載
   */
  onUnload: function() {

  },

  /**
   * 頁面相關事件處理函數--監聽用戶下拉動做
   */
  onPullDownRefresh: function() {

  },

  /**
   * 頁面上拉觸底事件的處理函數
   */
  onReachBottom: function() {

  },

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function() {

  },

  /**
   * 獲取系統信息 設置相機的大小適應屏幕
   */
  setCameraSize() {
    //獲取設備信息
    const res = wx.getSystemInfoSync();
    //獲取屏幕的可以使用寬高,設置給相機
    this.setData({
      cameraHeight: res.windowHeight,
      cameraWidth: res.windowWidth
    })
    console.log(res)
  },

  /**
   *拍照的方法 
   */
  takePhoto() {

    this.ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        this.setData({
          image1Src: res.tempImagePath
        })
      },
      fail() {
        //拍照失敗
        console.log("拍照失敗");
      }
    })
  },

  /**
   * 開始錄像的方法
   */
  startShootVideo() {

    console.log("========= 調用開始錄像 ===========")
    this.ctx.startRecord({
      success: (res) => {
        wx.showLoading({
          title: '正在錄像',
        })
      },
      fail() {
        console.log("========= 調用開始錄像失敗 ===========")
      }
    })
  },

  /**
   * 結束錄像
   */
  stopShootVideo() {

    console.log("========= 調用結束錄像 ===========")
    this.ctx.stopRecord({
      success: (res) => {
        wx.hideLoading();
        this.setData({
          videoSrc: res.tempVideoPath,
        })
      },
      fail() {
        wx.hideLoading();
        console.log("========= 調用結束錄像失敗 ===========")
      }
    })
  },

  //touch start 手指觸摸開始
  handleTouchStart:   function(e)  {    
    this.startTime  =  e.timeStamp;    
    console.log(" startTime = "  +  e.timeStamp);  
    console.log(" 手指觸摸開始 " ,  e);  
    console.log(" this " , this);  
  },

  //touch end 手指觸摸結束
  handleTouchEnd:   function(e)  {    
    this.endTime  =  e.timeStamp;    
    console.log(" endTime = "  +  e.timeStamp);  
    console.log(" 手指觸摸結束 ", e);
    //判斷是點擊仍是長按 點擊不作任何事件,長按 觸發結束錄像
    if (this.endTime - this.startTime > 350) {
      //長按操做 調用結束錄像方法
      this.stopShootVideo();
    }

  },

  /**
   * 點擊按鈕 - 拍照
   */
  handleClick:   function(e)  {    
    console.log("endTime - startTime = "  +  (this.endTime  -  this.startTime));        
    if  (this.endTime  -  this.startTime  <  350)  {    
      console.log("點擊");
      //調用拍照方法
      this.takePhoto();    
    }
  },

  /**
   * 長按按鈕 - 錄像
   */
  handleLongPress:   function(e)  {
    console.log("endTime - startTime = "  +  (this.endTime  -  this.startTime));
    console.log("長按");
    // 長按方法觸發,調用開始錄像方法
    this.startShootVideo();
  },
  
})

----------------------------- end -----------------------------微信小程序

相關文章
相關標籤/搜索