详解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 相关文章推荐
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
JavaScript学习笔记之JS函数
Jan 22 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
详解JavaScript的另类写法
Apr 11 Javascript
Javascript 调用 ActionScript 的简单方法
Sep 22 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
Javascript实现登录记住用户名和密码功能
Mar 22 Javascript
jQuery选择器中的特殊符号处理方法
Sep 08 jQuery
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
vue特效之翻牌动画
Apr 20 Vue.js
原生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
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
jquery学习笔记之无new构建详解
2017/12/07 jQuery
微信小程序常用简易小函数总结
2019/02/01 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python在命令行下使用google翻译(带语音)
2014/01/16 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python实现操作文件(文件夹)
2019/10/31 Python
基于python实现坦克大战游戏
2020/10/27 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
计算机专业职业规划
2014/02/28 职场文书
青蓝工程实施方案
2014/03/27 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
九一八事变演讲稿
2014/09/05 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
银行贷款收入证明
2014/10/17 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
Python多个MP4合成视频的实现方法
2021/07/16 Python
解析MySQL索引的作用
2022/03/03 MySQL