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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
js实现移动端微信页面禁止字体放大
Feb 16 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
js数字滑动时钟的简单实现(示例讲解)
Aug 14 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
node实现的爬虫功能示例
May 04 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
修改vue源码实现动态路由缓存的方法
Jan 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
什么是短波收听SWL
2021/03/01 无线电
php URL编码解码函数代码
2009/03/10 PHP
yii添删改查实例
2015/11/16 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js实现文字滚动效果
2016/03/03 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
详解VUE 数组更新
2017/12/16 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
js实现轮播图特效
2020/05/28 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python实现猜单词小游戏
2020/05/22 Python
css3的transition属性详解
2014/12/15 HTML / CSS
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
啦啦队口号大全
2014/06/16 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
如何利用python创作字符画
2022/06/25 Python