h5页面的扫一扫

一,使用的插件:vue-qrcode-reader

官网:

https://gruhn.github.io/vue-qrcode-reader/demos/Simple.html

二,我在项目中使用;

项目代码:

<template>
  <div class="scan">
    <div class="scan-back" @click="handleBack()">
      <img :src="require('@/assets/images/qrcodeScanner-delete.png')" alt="">
    </div>
    <div class="scan-content">
      <p class="scan-error" v-if="error">{{error?'暂不支持扫一扫':''}}</p>
      <p class="scan-error" v-if="error">{{error}}</p>
      <qrcode-stream @decode="onDecode" @init="onInit"></qrcode-stream>
    </div>
  </div>
</template>

<script>
import { QrcodeStream } from 'vue-qrcode-reader'
export default {
  name: 'qrcodeScanner',
  components: {
    QrcodeStream
  },
  data () {
    return {
      error: ''
    }
  },
  methods: {
    /**
     * 返回
     */
    handleBack () {
      this.$router.go(-1)
    },
    onDecode (result) {
      if (!result) {
        return
      }
      let params = {
        TXCODE: 'ST0074',
        qrCode: result
      }
      this.ajax('get', params, res => {
        if (res.data.SUCCESS === 'Y') {
          //对于我这个项目,应该跳转到龙支付的页面,并且将二维码得到的参数带入
          this.$notify({
            message: '应该跳转到龙支付页面',
            type: 'success', 
            duration: 500,
          });
        } else {
          this.$notify({
            message: res.data.ERRMSG,
            type: 'warning', 
            duration: 500,
          });
        }
      }, err => { console.log(err) }, this.$baseAPIs.server3rd)
    },
    async onInit (promise) {
      try {
        await promise
      } catch (error) {
        if (error.name === 'NotAllowedError') {
          this.error = "ERROR: you need to grant camera access permisson"
        } else if (error.name === 'NotFoundError') {
          this.error = "ERROR: no camera on this device"
        } else if (error.name === 'NotSupportedError') {
          this.error = "ERROR: secure context required (HTTPS, localhost)"
        } else if (error.name === 'NotReadableError') {
          this.error = "ERROR: is the camera already in use?"
        } else if (error.name === 'OverconstrainedError') {
          this.error = "ERROR: installed cameras are not suitable"
        } else if (error.name === 'StreamApiNotSupportedError') {
          this.error = "ERROR: Stream API is not supported in this browser"
        }else{
          this.error=error
        }
        console.log(this.error)
      }
    }
  }
}
</script>

<style scoped>
.scan {
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
}
.scan-back {
  position: absolute;
  top: 5vw;
  left: 5vw;
  z-index: 1;
}
.scan-back img {
  width: 52px;
}
.scan-content {
  height: 100%;
}
.scan-error {
  margin-top: 10vh;
  color: #a0a0a0;
  font-size: 36px;
}
</style>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue H5页面中使用扫一扫功能,你需要使用HTML5的API,比如MediaDevices.getUserMedia()和Canvas等。 首先,你需要在页面中引入一个二维扫描库,比如zxing-js。然后,你可以使用Vue的生命周期钩子函数mounted()来初始化二维扫描器,并在页面中创建一个canvas元素来显示扫描到的二维图像。 以下是一个简单的示例代: ```html <template> <div> <canvas ref="canvas"></canvas> </div> </template> <script> import QrScanner from 'zxing'; export default { mounted() { const canvasElement = this.$refs.canvas; const qrScanner = new QrScanner(canvasElement, result => { console.log(result); qrScanner.stop(); }); qrScanner.start(); } } </script> ``` 在这个示例中,我们引入了zxing-js库,并在mounted()钩子函数中初始化了一个QrScanner对象。我们将canvas元素传递给QrScanner构造函数,并在回调函数中处理扫描到的二维数据。最后,我们调用qrScanner.start()方法来启动扫描器。 请注意,要在移动设备上使用摄像头,你需要在页面中请求用户授权。你可以使用navigator.mediaDevices.getUserMedia()方法来请求摄像头访问权限,例如: ```javascript const stream = await navigator.mediaDevices.getUserMedia({ video: true }); ``` 然后,你可以将流传递给QrScanner对象: ```javascript const qrScanner = new QrScanner(canvasElement, result => { console.log(result); qrScanner.stop(); }); qrScanner.start(stream); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值