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 相关文章推荐
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
基于jquery的jqDnR拖拽溢出的修改
Feb 12 Javascript
javascript的alert box在java中如何显示多行
May 18 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
微信小程序 navbar实例详解
May 11 Javascript
Vue3 源码导读(推荐)
Oct 14 Javascript
JS实现滑动插件
Jan 15 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
JS实现扫雷项目总结
May 19 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
layui实现三级联动效果
2019/07/26 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python pycharm的安装及其使用
2019/10/11 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
生产工厂门卫岗位职责
2014/09/26 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
小学语文教学反思范文
2016/03/03 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android