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 相关文章推荐
Array.prototype.slice.apply的使用方法
Mar 17 Javascript
最简单的js图片切换效果实现代码
Sep 24 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
JS类的定义与使用方法深入探索
Nov 26 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
Jan 19 Javascript
js+html制作简单验证码
Feb 16 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 Javascript
实例详解JSON取值(key是中文或者数字)方式
Aug 24 Javascript
Nuxt.js踩坑总结分享
Jan 18 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
Oct 23 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 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简单封装了一些常用JS操作
2007/02/25 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
QQ登录简单实现代码
2021/03/09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
Vue3 源码导读(推荐)
2019/10/14 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
小程序实现多个选项卡切换
2020/06/19 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
基于python实现聊天室程序
2018/07/27 Python
python实现猜拳小游戏
2020/04/05 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python实现视频读取和转化图片
2019/12/10 Python
django列表筛选功能的实现代码
2020/03/27 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
应届医学毕业生求职信分享
2013/12/02 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
全网非常详细的pytest配置文件
2022/07/15 Python