zoukankan      html  css  js  c++  java
  • 微信小程序实现点击拍照长按录像功能

    微信小程序实现点击拍照长按录像功能

    代码里面注释写的都很详细,直接上代码。官方的组件属性中有触摸开始和触摸结束属性。本功能依靠这些属性实现。

    .wxml代码:
    <!-- 相机 pages/camera/camera.wxml-->
    <!-- 相机 -->
    <camera wx:if="{{!videoSrc}}" device-position="back" flash="off" binderror="error" style=" {{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;
       200rpx;
      height: 200rpx;
    }
    #btn-photo-video{
      /* position: absolute; */
      margin-top:100%;
       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 -----------------------------

  • 相关阅读:
    (jmeter笔记)jmeter远程启用服务器(分布式)
    (jmeter笔记)jmeter打印日志
    (jmeter笔记)Jmeter正则表达式提取器获取Response hearders
    css3实现好看的边框效果
    简单递归写侧边菜单栏
    css3的transform-origin配合scale,控制动画,实现各种hover效果
    浅谈jQuery的promise
    tips07-encodeURI()的使用
    weui 的使用方法
    git 合并分支的时候会遇到的问题
  • 原文地址:https://www.cnblogs.com/jungejava/p/11213098.html
Copyright © 2011-2022 走看看