element上传组件循环引用及简单时间倒计时的实现


Posted in Javascript onOctober 01, 2018

前言

今天记录几个简单的小问题,前端时间开发用到的,之前看到博客中没有记录,简单记录一下。 一个是element上传组件循环引用的方式,一个是简单的倒计时。

上传组件每个上传都要指定相应的函数,而且函数不能传入参数,10个上传按钮要写10个上传函数,非常麻烦。针对这个,我们可以循环这些函数。

案例

element一个上传组件如下:

<el-upload
 class="avatar-uploader"
 action="https://jsonplaceholder.typicode.com/posts/"
 :show-file-list="false"
 :on-success="handleAvatarSuccess"
 :before-upload="beforeAvatarUpload">
 <img v-if="imageUrl" :src="imageUrl" class="avatar">
 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

假如有10个上传,岂不是要指定10个handleAvatarSuccess这个回掉函数?这些太麻烦了!!!

no! 我们可以不用这么写。推荐的一个写法如下:

<div class="pzsrltv" v-for="(item,index) in sValueAddedServiceData" :key="index"> <!--这一块循环出来 -->
  <div class="s_step1">
    <div class="stitle">{{item.name}}<span class="sblue" v-if="item.showimg" @click.stop="showImg.show = true;showImg.url = item.showimg">点击查看示例</span>
    </div>
    <div class="one_line">
      <img class="imagelist" v-if="svalueImg[item.value]" :src="`${viewUrl}${svalueImg[item.value]}`" >
      <el-upload
      v-if="!svalueImg[item.value]"
      class="avatar-uploader mt10"
      accept="image/jpeg,image/png,image/gif"
      :action="baseUpload"
      :show-file-list="false"
      :on-success="handlescSuccess[item.value]"
      :before-upload="beforeAvatarUpload">
      <i class="el-icon-plus avatar-uploader-icon"></i>
      </el-upload>
    </div>
  </div>
 </div>

如上面代码,我们直接循环上传。

我们在data()里面指定handlescSuccess: {},

data(){
 return {
 handlescSuccess: {},
 svalueImg: {},
 }
}

初始化的时候,对上传进行设置

for (let i = 1; i <= 10; i++) { //循环的个数
 this.handlescSuccess[i] = function(res, file) {
  // console.log(res, _this.svalueImg)
  if (_this.svalueImg) {
   _this.$set(_this.svalueImg, i, res.file.sFile)
  }
 }
}

上面的代码是针对一个上传按钮只能上传一张图片的情况。上传多种做法类似。

例如如下:

//以下代码写在回调里面
  for (let i = 0; i < item.iNum; i++) {
   // 图文视频上传函数
   _this.handleTWSuccess[`${i}`] = function(res, file) {
    _this.sEvaluate['2'][i].sImg.push(res.file.sFile)
   }
  }

时间倒计时

这个实现起来很简单,但是在vue Dom 中实时展示,要用$set方式

天,小时,分钟,秒的倒计时函数:

data里面:

data(){
 return {
 letTimes: { nowTime: '' },
 }
}

methods里面:

countDown(times) {
   const _this = this
   let timer = null
   timer = setInterval(function() {
    let day = 0,
     hour = 0,
     minute = 0,
     second = 0// 时间默认值
    if (times > 0) {
     day = Math.floor(times / (60 * 60 * 24))
     hour = Math.floor(times / (60 * 60)) - (day * 24)
     minute = Math.floor(times / 60) - (day * 24 * 60) - (hour * 60)
     second = Math.floor(times) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
    }
    if (day <= 9) day = '0' + day
    if (hour <= 9) hour = '0' + hour
    if (minute <= 9) minute = '0' + minute
    if (second <= 9) second = '0' + second
    _this.$set(_this.letTimes, 'nowTime', `${day !== '00' ? `${day}天:` : ''}${hour}小时:${minute}分钟:${second}秒`)
    times--
   }, 1000)
   if (times <= 0) {
    _this.$set(_this.letTimes, 'nowTime', '')
    clearInterval(timer)
   }
  },

单纯分钟和秒倒计时

function resetTime(time){
 var timer=null;
 var t=time;
 var m=0;
 var s=0;
 m=Math.floor(t/60%60);
 m<10&&(m='0'+m);
 s=Math.floor(t%60);
 function countDown(){
  s--;
  s<10&&(s='0'+s);
  if(s.length>=3){
  s=59;
  m="0"+(Number(m)-1);
  }
  if(m.length>=3){
  m='00';
  s='00';
  clearInterval(timer);
  }
  console.log(m+"分钟"+s+"秒");
 }
 timer=setInterval(countDown,1000);
}

用法很简单,传秒数进来就可以了

例如:

this.countDown(5689)

this.resetTime(256)

小结

简单的小案例就分享到这里,国庆愉快,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
下拉框select的绑定示例
Sep 04 Javascript
javascript实现九宫格相加数值相等
May 28 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
JS实现移动端判断上拉和下滑功能
Aug 07 Javascript
js 图片转base64的方式(两种)
Apr 24 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
May 03 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 #Javascript
vue项目持久化存储数据的实现代码
Oct 01 #Javascript
详解mpvue scroll-view自动回弹bug解决方案
Oct 01 #Javascript
在create-react-app中使用sass的方法示例
Oct 01 #Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 #Javascript
Vue 组件封装 并使用 NPM 发布的教程
Sep 30 #Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 #Javascript
You might like
php 禁止页面缓存输出
2009/01/07 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP速成大法
2015/01/30 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Augularjs-起步详解
2016/07/08 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
python实现udp数据报传输的方法
2014/09/26 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
基于树莓派的语音对话机器人
2019/06/17 Python
python 字典操作提取key,value的方法
2019/06/26 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
使用Python的turtle模块画国旗
2019/09/24 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
描述RIP和OSPF区别以及特点
2015/01/17 面试题
校园餐饮创业计划书
2014/01/10 职场文书
省三好学生申请材料
2014/01/22 职场文书
自荐信需注意事项
2014/01/25 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
卖房授权委托书样本
2014/10/05 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
交通安全教育主题班会
2015/08/12 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python