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 相关文章推荐
XmlUtils JS操作XML工具类
Oct 01 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
Feb 16 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
May 03 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
推荐JavaScript实现继承的最佳方式
Nov 11 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
详解Angular Reactive Form 表单验证
Jul 06 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
使用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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
js实现日历的简单算法
2017/01/24 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
python list转dict示例分享
2014/01/28 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
Python编写打字训练小程序
2019/09/26 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
电脑租赁公司创业计划书
2014/01/08 职场文书
五好党支部事迹材料
2014/02/06 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
自我鉴定书
2014/03/24 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
商业计划书范文
2019/04/24 职场文书