详解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实现web页面中指定区域打印
Oct 30 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 Javascript
JS中利用FileReader实现上传图片前本地预览功能
Mar 02 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 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
PHP form 表单传参明细研究
2009/07/17 PHP
php中几种常见安全设置详解
2010/04/06 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
Python中tell()方法的使用详解
2015/05/24 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python字典的遍历3种方法详解
2019/08/10 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
质检的岗位职责
2013/11/17 职场文书
辅导员评语
2014/05/04 职场文书
公司踏青活动方案
2014/08/16 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
我是特种兵观后感
2015/06/11 职场文书
爱的教育观后感
2015/06/17 职场文书
领导视察通讯稿
2015/07/18 职场文书
2016新年感言
2015/08/03 职场文书
volatile保证可见性及重排序方法
2022/08/05 Java/Android