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 相关文章推荐
jQuery timers计时器简单应用说明
Oct 28 Javascript
jQuery数据显示插件整合实现代码
Oct 24 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
Aug 15 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
详解用node编写自己的cli工具
May 23 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
Apr 08 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
js删除数组中某几项的方法总结
Jan 16 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
javascript异常处理实现原理详解
Feb 17 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
jquery 选择器部分整理
2009/10/28 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JavaScript多线程详解
2015/08/12 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
js实现随机点名小功能
2017/08/17 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
vue绑定class的三种方法
2020/12/24 Vue.js
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
Python是怎样处理json模块的
2020/07/16 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
值传递还是引用传递
2015/02/08 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
淘宝活动策划方案
2014/02/06 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers