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 类方法定义还是有点区别
Apr 15 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
Aug 18 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
JS实现具备延时功能的滑动门菜单效果
Sep 17 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
GOJS+VUE实现流程图效果
Dec 01 Javascript
纯js实现无缝滚动功能代码实例
Feb 21 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之readdir函数用法实例
2014/11/13 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python字典的常用操作方法小结
2016/05/16 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
python绘制趋势图的示例
2020/09/17 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
十岁生日家长答谢词
2014/01/17 职场文书
环境日宣传活动总结
2014/07/09 职场文书
离婚起诉状范本
2015/05/19 职场文书
法律意见书范本
2015/06/04 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS