移动端vue调用照相机及相册

本文详细介绍了在移动端Vue应用中如何调用设备的相机和相册功能,帮助开发者实现图片上传前的压缩处理,提升用户体验。
摘要由CSDN通过智能技术生成
<template>
    <div class="me-detail">
        <m-hbar title="个人笔记"/>
        <div class="detail-title">
            个人总结
        </div>
        <p v-if="vpersonalNotes.notesContext">
          {
  {vpersonalNotes.notesContext}}
        </p>
        <textarea class="note-textarea"  v-else v-model="notesContext"></textarea>
        <div class="detail-title">
            图片
        </div>
        <ul class="img-list" v-if="vpersonalNotes.notesContext">
            <li class="img-list-li" v-for="i in accessoryInfo" :key="i.fileBh">
              <img :src="picUrl + i.fileBh" alt="">
            </li>
          </ul>
          <ul class="img-list" v-else>
            <li class="img-list-li" v-for="i in imglist" :key="i.fileBh">
              <img :src="i.imgUrl" alt="">
            </li>
            <li class="puload-btn" id="upload" @click="chooseImgBtn()">
              <input type="file" id="choose" accept="image/*">
               + 
            </li>
          </ul>
        <div class="button-wriper" v-if="!vpersonalNotes.notesContext"><button class="login-btn" @click="submit">提交</button></div>
    </div>
</template>

<script>
import $ from 'jquery'
import MHbar from '@/components/headerBar'
import { FormDataShim, getBlob} from '@/compress';

export default {
  components: {
    MHbar
  },
  data () {
    return {
      dialogImageUrl: '',
      dialogVisible: false,
      picUrl: PIC_FILE_HOST,
      fileList: [],
      imglist: [],
      notesContext: '',
      canvas: null,
      ctx: null,
      tctx: null,
      tCanvas: null,
      vpersonalNotes: {},
      accessoryInfo: []
    }
  },
  methods: {
    chooseImgBtn() {
      var vm = this
      var filechooser = document.getElementById("choose");
      // 用于压缩图片的canvas
      vm.canvas = document.createElement("canvas");
      vm.ctx = vm.canvas.getContext('2d');
      // 瓦片canvas
      vm.tCanvas = document.createElement("canvas");
      vm.tctx = vm.tCanvas.getContext("2d");
      var maxsize = 1048576;
      filechooser.onchange = function() {
        if (!this.files.length) return;
        var files = Array.prototype.slice.call(this.files);
        if (vm.imglist.length > 9) {
          
Vue3中实现移动端调用相机和相册上传图片的功能,可以借助于原生的`<input type="file">`标签以及Web API中的`navigator.mediaDevices`,通过HTML5的Media Capture API来访问用户的媒体设备。以下是基本步骤: 1. 在Vue组件中创建一个`<input>`元素,并将其`type`属性设置为`file`,同时添加`accept`属性来限定用户可以选择的文件类型(例如图片),并添加`capture`属性来指定使用相机或相册。 ```html <input type="file" @change="handleFileUpload" accept="image/*" capture="camera"> ``` 2. 在Vue组件的`methods`中定义`handleFileUpload`方法,该方法将在用户选择文件后被触发。 ```javascript methods: { handleFileUpload(e) { const file = e.target.files[0]; if (file) { // 使用FileReader读取文件内容 const reader = new FileReader(); reader.onload = (e) => { // 处理文件读取完成后的逻辑,例如展示图片预览或上传到服务器 const imgPreviewUrl = e.target.result; // 你可以将imgPreviewUrl展示到页面上作为图片预览 }; reader.readAsDataURL(file); // 进行文件上传操作 this.uploadFile(file); } }, uploadFile(file) { // 这里可以使用fetch或者axios等方法将文件上传到服务器 // 例如使用fetch const formData = new FormData(); formData.append('file', file); fetch('YOUR_SERVER_ENDPOINT', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); } } ``` 3. 如果你需要在Vue3的Composition API中实现上述功能,可以使用`ref`来创建响应式引用,`onMounted`和`onUnmounted`生命周期钩子来处理DOM元素的挂载和卸载。 以上是在Vue3中实现移动端拍照和图片上传的基本逻辑,需要注意的是,实际部署时还需要处理用户权限请求、错误处理以及兼容性问题等。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值