详解Vue调用手机相机和相册以及上传


Posted in Javascript onMay 05, 2019

组件

<template>
 
  
 <div>
  <input id="upload_file" type="file" style="display: none;" accept='image/*' name="file" @change="fileChange($event)"/>
  <div class="image-item space" @click="showActionSheet()">
   <div class="image-up"></div>
  </div>
  
  <div class="upload_warp">
   <div class="upload_warp_img">
    <div class="upload_warp_img_div" v-for="(item,index) in imgList">
     <div class="upload_warp_img_div_top">
      <img src="http://114.115.162.39/static/image/x.png" class="upload_warp_img_div_del" @click="fileDel(index)">
     </div>
     <img :src="item.file.src" style="display: inline-block;">
    </div>
    <div class="upload_warp_left" id="upload_warp_left" @click="fileClick()" v-if="this.imgList.length < 6">
     <!--<img src="../assets/upload.png">-->
     <img src="../assets/images/添加图片.png" class="imgs"/>
    </div>
   </div>
 
  </div>
  
  <div class="upload_warp_text">
  <span>选中{{imgList.length}}张文件,共{{bytesToSize(this.size)}}</span>
  </div>
 </div>
 
</template>

javaScript代码

<script type="text/ecmascript-6">
  export default {
    name: "cameras-and-albums",
   data(){
    return{
     imgList: [],
     datas: new FormData(),
     files:0,
     size:0
    }
   },
   methods:{
    //调用相册&相机
    fileClick() {
     $('#upload_file').click();
 
    },
    //调用手机摄像头并拍照
    getImage() {
     let cmr = plus.camera.getCamera();
     cmr.captureImage(function(p) {
      plus.io.resolveLocalFileSystemURL(p, function(entry) {
       compressImage(entry.toLocalURL(),entry.name);
      }, function(e) {
       plus.nativeUI.toast("读取拍照文件错误:" + e.message);
      });
     }, function(e) {
     }, {
      filter: 'image'
     });
    },
    //从相册选择照片
    galleryImgs() {
     plus.gallery.pick(function(e) {
      let name = e.substr(e.lastIndexOf('/') + 1);
      compressImage(e,name);
     }, function(e) {
     }, {
      filter: "image"
     });
    },
    //点击事件,弹出选择摄像头和相册的选项
    showActionSheet() {
     let bts = [{
      title: "拍照"
     }, {
      title: "从相册选择"
     }];
     plus.nativeUI.actionSheet({
       cancel: "取消",
       buttons: bts
      },
      function(e) {
       if (e.index == 1) {
        this.getImage();
       } else if (e.index == 2) {
        this.galleryImgs();
       }
      }
     );
    },
    fileChange(el) {
     this.files=$("#upload_file").get(0).files;
     console.log(this.files.length);
     for(let i=0;i<this.files.length;i++){
      this.datas.append("file",this.files[i]);
     }
     this.show1=false;
     console.log(typeof this.files);
     console.log(this.files);
     if (!el.target.files[0].size) return;
     this.fileList(el.target);
     el.target.value = ''
    },
    fileList(fileList) {
     let files = fileList.files;
     for (let i = 0; i < files.length; i++) {
      //判断是否为文件夹
      if (files[i].type != '') {
       this.fileAdd(files[i]);
      } else {
       //文件夹处理
       this.folders(fileList.items[i]);
      }
     }
    },
    //文件夹处理
    folders(files) {
     let _this = this;
     //判断是否为原生file
     if (files.kind) {
      files = files.webkitGetAsEntry();
     }
     files.createReader().readEntries(function (file) {
      for (let i = 0; i < file.length; i++) {
       if (file[i].isFile) {
        _this.foldersAdd(file[i]);
       } else {
        _this.folders(file[i]);
       }
      }
     })
    },
    fileAdd(file) {
     //总大小
     this.size = this.size + file.size;
     //判断是否为图片文件
     if (file.type.indexOf('image') == -1) {
      file.src = 'wenjian.png';
      this.imgList.push({
       file
      });
     } else {
      let reader = new FileReader();
      reader.vue = this;
      reader.readAsDataURL(file);
      reader.onload = function () {
       file.src = this.result;
       this.vue.imgList.push({
        file
       });
      }
     }
    },
    fileDel(index) {
     this.size = this.size - this.imgList[index].file.size;//总大小
     this.imgList.splice(index, 1);
    },
    bytesToSize(bytes) {
     if (bytes === 0){
      return '0 B';
     }
     let k = 1000, // or 1024
      sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
      i = Math.floor(Math.log(bytes) / Math.log(k));
     return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
    },
    dragenter(el) {
     el.stopPropagation();
     el.preventDefault();
    },
    dragover(el) {
     el.stopPropagation();
     el.preventDefault();
    },
    drop(el) {
     el.stopPropagation();
     el.preventDefault();
     this.fileList(el.dataTransfer);
    },
    shows(et,tx){
     this.strut=et;
     this.txt=tx;
    },
    handleClick(){
     this.$store.commit('add')
    },
   },
  }
</script>

以上所述是小编给大家介绍的Vue调用手机相机及上传详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery随意添加移除html的实现代码
Jun 21 Javascript
JS获取整个页面文档的实现代码
Dec 15 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
ES6中的数组扩展方法
Aug 26 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
Angular @HostBinding()和@HostListener()用法
Mar 05 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
Angular value与ngValue区别详解
Nov 27 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 #Javascript
Angular实现svg和png图片下载实现
May 05 #Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 #jQuery
node Buffer缓存区常见操作示例
May 04 #Javascript
JS实现checkbox互斥(单选)功能示例
May 04 #Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
May 04 #jQuery
微信小程序实现判断是分享到群还是个人功能示例
May 03 #Javascript
You might like
十大“创意”战术!
2020/03/04 星际争霸
php计算两个文件相对路径的方法
2015/03/14 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
软件项目开发计划书
2014/05/01 职场文书
小学生常见病防治方案
2014/06/06 职场文书
高效课堂标语
2014/06/26 职场文书
胡桃夹子观后感
2015/06/11 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
浅谈Vue的computed计算属性
2022/03/21 Vue.js
零基础学java之循环语句的使用
2022/04/10 Java/Android
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS