详解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 相关文章推荐
js控制input输入字符解析
Dec 27 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
Sep 09 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
在element-ui的select下拉框加上滚动加载
Apr 18 Javascript
如何利用node转发请求详解
Sep 17 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
php格式化时间戳
2016/12/17 PHP
php常用字符函数实例小结
2016/12/29 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
python3抓取中文网页的方法
2015/07/28 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
使用python远程操作linux过程解析
2019/12/04 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
本科毕业生求职信
2014/06/15 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
农村党支部承诺书
2015/04/30 职场文书
2015年妇女工作总结
2015/05/14 职场文书
董事长致辞
2015/07/29 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
利用python进行数据加载
2021/06/20 Python
python之基数排序的实现
2021/07/26 Python
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS