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 Event学习第四章 传统的事件注册模型
Feb 07 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
简单介绍JavaScript数据类型之隐式类型转换
Dec 28 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
Jul 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
WHOIS类的修改版
2006/10/09 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
js继承的实现代码
2010/08/05 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
如何用python批量调整视频声音
2020/12/22 Python
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
消防安全检查制度
2014/02/04 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
《春晓》教学反思
2014/04/20 职场文书
岗位安全生产责任书
2014/07/28 职场文书
一行Python命令实现批量加水印
2022/04/07 Python
Python使用永中文档转换服务
2022/05/06 Python