最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照

 更新時(shí)間:2021年09月29日 17:00:38   作者:小咸魚大翻身  
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Vue之調(diào)用PC端攝像頭實(shí)時(shí)拍照,供大家參考,具體內(nèi)容如下

由于我使用的是點(diǎn)擊按鈕打開模態(tài)框拍照所以在這里吧按鈕和模態(tài)框代碼都粘貼如下。

<!-- 打開模態(tài)框按鈕-->
        <el-form-item label="*照片:" prop="headImage">
          <el-input type="text" v-model="imgSrc" />
            <el-col :span="1.5">
              <el-button
                @click="onTake"
                icon="el-icon-camera"
                size="small">
                拍照上傳
              </el-button>
            </el-col>
        </el-form-item>
        <!--拍照后顯示圖片-->
        <el-form-item label="" prop="imgSrc">
          <img v-if="imgSrc"  :src="imgSrc" style="width: 200px;height: 240px;" />
</el-form-item>

<!--拍照模態(tài)框-->
    <el-dialog
      title="拍照上傳"
      :visible.sync="visible"
      @close="onCancel"
      width="1065px">
      <div class="box">
        <video id="videoCamera" class="canvas" :width="videoWidth" :height="videoHeight" autoPlay></video>
        <canvas id="canvasCamera" class="canvas" :width="videoWidth" :height="videoHeight"></canvas>
      </div>
      <div slot="footer">
        <el-button
          @click="drawImage"
          icon="el-icon-camera"
          size="small">
          拍照
        </el-button>
        <el-button
          v-if="os"
          @click="getCompetence"
          icon="el-icon-video-camera"
          size="small">
          打開攝像頭
        </el-button>
        <el-button
          v-else
          @click="stopNavigator"
          icon="el-icon-switch-button"
          size="small">
          關(guān)閉攝像頭
        </el-button>
        <el-button
          @click="resetCanvas"
          icon="el-icon-refresh"
          size="small">
          重置
        </el-button>
        <el-button
          @click="onCancel"
          icon="el-icon-circle-close"
          size="small">
          完成
        </el-button>
   </div>
</el-dialog>

下來(lái)我們來(lái)看js代碼,我把不需要的部分刪除了,因?yàn)樯婕皢挝豁?xiàng)目問題實(shí)屬抱歉哈

<script>
export default {
  name: "XXX",
  data() {
    return {
      visible: false,//彈窗
      loading: false,//上傳按鈕加載
      os: false,//控制攝像頭開關(guān)
      thisVideo: null,
      thisContext: null,
      thisCancas: null,
      videoWidth: 500,
      videoHeight: 400,
      postOptions:[],
      CertCtl:'',
      // 遮罩層
      loading: true,
      // 選中數(shù)組
      ids: [],
      // 非單個(gè)禁用
      single: true,
      // 非多個(gè)禁用
      multiple: true,
      // 總條數(shù)
      total: 0,
      // 項(xiàng)目人員表格數(shù)據(jù)
      akworkerList: [],
      //工種類別數(shù)據(jù)字典
      workerTypeOptions:[],
      // 彈出層標(biāo)題
      title: "",
      // 是否顯示彈出層
      open: false,
      // 查詢參數(shù)
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        imgSrc:undefined,
      },
      // 表單參數(shù)
      form: {},
      // 表單校驗(yàn)
      rules: {
      }
    };
  },
  created() {
   
  },
  methods: {
    /*調(diào)用攝像頭拍照開始*/
    onTake() {
      this.visible = true;
      this.getCompetence();
    },
    onCancel() {
      this.visible = false;
     /* this.resetCanvas();*/
      this.stopNavigator();
    },
    // 調(diào)用攝像頭權(quán)限
    getCompetence() {
      //必須在model中render后才可獲取到dom節(jié)點(diǎn),直接獲取無(wú)法獲取到model中的dom節(jié)點(diǎn)
      this.$nextTick(() => {
        const _this = this;
        this.os = false;//切換成關(guān)閉攝像頭
        this.thisCancas = document.getElementById('canvasCamera');
        this.thisContext = this.thisCancas.getContext('2d');
        this.thisVideo = document.getElementById('videoCamera');
        // 舊版本瀏覽器可能根本不支持mediaDevices,我們首先設(shè)置一個(gè)空對(duì)象
        if (navigator.mediaDevices === undefined) {
          navigator.menavigatordiaDevices = {}
        }
        // 一些瀏覽器實(shí)現(xiàn)了部分mediaDevices,我們不能只分配一個(gè)對(duì)象
        // 使用getUserMedia,因?yàn)樗鼤?huì)覆蓋現(xiàn)有的屬性。
        // 這里,如果缺少getUserMedia屬性,就添加它。
        if (navigator.mediaDevices.getUserMedia === undefined) {
          navigator.mediaDevices.getUserMedia = function (constraints) {
            // 首先獲取現(xiàn)存的getUserMedia(如果存在)
            let getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.getUserMedia;
            // 有些瀏覽器不支持,會(huì)返回錯(cuò)誤信息
            // 保持接口一致
            if (!getUserMedia) {
              return Promise.reject(new Error('getUserMedia is not implemented in this browser'))
            }
            // 否則,使用Promise將調(diào)用包裝到舊的navigator.getUserMedia
            return new Promise(function (resolve, reject) {
              getUserMedia.call(navigator, constraints, resolve, reject)
            })
          }
        }
        const constraints = {
          audio: false,
          video: {width: _this.videoWidth, height: _this.videoHeight, transform: 'scaleX(-1)'}
        };
        navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
          // 舊的瀏覽器可能沒有srcObject
          if ('srcObject' in _this.thisVideo) {
            _this.thisVideo.srcObject = stream
          } else {
            // 避免在新的瀏覽器中使用它,因?yàn)樗诒粭売谩?
            _this.thisVideo.src = window.URL.createObjectURL(stream)
          }
          _this.thisVideo.onloadedmetadata = function (e) {
            _this.thisVideo.play()
          }
        }).catch(err => {
          this.$notify({
            title: '警告',
            message: '沒有開啟攝像頭權(quán)限或?yàn)g覽器版本不兼容.',
            type: 'warning'
          });
        });
      });
    },
    //繪制圖片
    drawImage() {
      // 點(diǎn)擊,canvas畫圖
      this.thisContext.drawImage(this.thisVideo, 0, 0, this.videoWidth, this.videoHeight);
      // 獲取圖片base64鏈接
      this.imgSrc = this.thisCancas.toDataURL('image/png');
      /*const imgSrc=this.imgSrc;*/
    },
    //清空畫布
    clearCanvas(id) {
      let c = document.getElementById(id);
      let cxt = c.getContext("2d");
      cxt.clearRect(0, 0, c.width, c.height);
    },
    //重置畫布
    resetCanvas() {
      this.imgSrc = "";
      this.clearCanvas('canvasCamera');
    },
    //關(guān)閉攝像頭
    stopNavigator() {
      if (this.thisVideo && this.thisVideo !== null) {
        this.thisVideo.srcObject.getTracks()[0].stop();
        this.os = true;//切換成打開攝像頭
      }
    },
  /*調(diào)用攝像頭拍照結(jié)束*/
  }
};
</script>

在此,本篇文章也就分享完畢了,若有什么不對(duì)之處還望各位大佬多多指點(diǎn),若有相似之處還望聯(lián)系修改刪除,謝謝

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue和element上傳圖片以及進(jìn)行拖拽圖片排序問題

    vue和element上傳圖片以及進(jìn)行拖拽圖片排序問題

    這篇文章主要介紹了vue和element上傳圖片以及進(jìn)行拖拽圖片排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 解決vue中數(shù)據(jù)更新視圖不更新問題this.$set()方法

    解決vue中數(shù)據(jù)更新視圖不更新問題this.$set()方法

    這篇文章主要介紹了解決vue中數(shù)據(jù)更新視圖不更新問題this.$set()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue中使用canvas繪圖詳解

    vue中使用canvas繪圖詳解

    這篇文章主要介紹了vue中使用canvas繪圖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 如何在寶塔面板部署vue項(xiàng)目

    如何在寶塔面板部署vue項(xiàng)目

    這篇文章主要給大家介紹了關(guān)于如何在寶塔面板部署vue項(xiàng)目的相關(guān)資料,寶塔面板可以通過Nginx來(lái)部署Vue項(xiàng)目,并解決跨域問題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server error的兩種解決方法

    vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server err

    前端使用axios 訪問后端接口時(shí)報(bào)錯(cuò),在瀏覽器中點(diǎn)擊紅色的報(bào)錯(cuò)數(shù)據(jù),本文給大家分享vue axios調(diào)用接口方法報(bào)錯(cuò)500 internal server error的兩種解決方法,感興趣的朋友一起看看吧
    2023-10-10
  • Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件的操作方法

    Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件的操作方法

    這篇文章主要介紹了Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Vue3.x如何設(shè)置瀏覽器動(dòng)態(tài)Title方法

    Vue3.x如何設(shè)置瀏覽器動(dòng)態(tài)Title方法

    這篇文章主要介紹了Vue3.x如何設(shè)置瀏覽器動(dòng)態(tài)Title方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue App.vue中的公共組件改變值觸發(fā)其他組件或.vue頁(yè)面監(jiān)聽

    vue App.vue中的公共組件改變值觸發(fā)其他組件或.vue頁(yè)面監(jiān)聽

    這篇文章主要介紹了vue App.vue里的公共組件改變值觸發(fā)其他組件或.vue頁(yè)面監(jiān)聽,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue使用monaco?editor漢化右鍵菜單示例

    vue使用monaco?editor漢化右鍵菜單示例

    這篇文章主要為大家介紹了vue使用?monaco?editor?漢化右鍵菜單實(shí)現(xiàn)漢化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue + CSS實(shí)現(xiàn)漸變柵格進(jìn)度條效果

    Vue + CSS實(shí)現(xiàn)漸變柵格進(jìn)度條效果

    基于Vue和CSS實(shí)現(xiàn)漸變柵格進(jìn)度條,通過劃分柵格單元、顏色漸變、標(biāo)簽與刻度的絕對(duì)定位來(lái)實(shí)現(xiàn)高度靈活和交互性,進(jìn)度條劃分為多個(gè)柵格,每個(gè)單元格顏色漸變并且連續(xù),可以根據(jù)不同的場(chǎng)景配置個(gè)性化屬性,具有極高的靈活度和交互性,感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論

云浮市| 灵丘县| 景泰县| 沅江市| 民勤县| 甘洛县| 河北省| 株洲县| 项城市| 城口县| 凤翔县| 工布江达县| 乌审旗| 辽源市| 怀柔区| 昌平区| 泸州市| 武穴市| 简阳市| 江永县| 建阳市| 临猗县| 金堂县| 云霄县| 唐山市| 平南县| 石狮市| 鄂托克前旗| 定襄县| 广水市| 太和县| 康保县| 中山市| 龙井市| 宁强县| 淮阳县| 满洲里市| 噶尔县| 会同县| 九龙城区| 永新县|