JS实现为控件添加倒计时功能

多态潮汐
• 阅读 1289

一.概述
在有些报表需求中,需要为控件添加倒计时功能,限制到某一个时间点后能进行一项操作或不能进行某项操作,比如查询,导出功能等等,又需要人性化地显示还有多少时间,即倒计时功能,比如下图中我们限制这个报表在每天10点后才能查询
JS实现为控件添加倒计时功能

当倒计时结束的时候,查询功能可用
JS实现为控件添加倒计时功能

这种功能如何实现的呢
二.实现思路
主要原理是利用控件的setEnable(true)/setEnable(false)来进行设置控件的可用与不可用状态,在获取时间的过程中,需要利用到js中的获取时间,利用JS的定时器函数setInterval(function(){},time)来进行定时取得倒时时,并判断倒计时是否结束。

三.实现过程
1、修改模板
以自带的gettingstarted.cpt模板为例,设置初始化时查询按钮不可用,如下图
JS实现为控件添加倒计时功能

2、添加倒计时控制功能
为了简化控制流程,把JS代码直接写在查询按钮的初始化后事件中,如下图

代码如下:

  1. var h=10;//限制几点可查询

  2. var m=00;//限制几分可查询

  3. var s=00;//限制几秒可查询

  4. //格式化时间

  5. function timeToString(a){

  6. //小时

  7. var s='还有'

  8. s+=parseInt(a/3600)+'时';

  9. //分

  10. s+=parseInt(a % 3600 /60)+'分';

  11. //秒

  12. s+=parseInt(a % 60)+'秒可查';

  13. return s;

  14. }

  15. var date1=new Date();

  16. var date2=new Date();

  17. //设置预置可查时间

  18. date1.setHours(h);

  19. date1.setMinutes(m);

  20. date1.setSeconds(s);

  21. //比如时间

  22. var d=(date1-date2)/1000;

  23. //如果初始化时可用,就启用按钮

  24. if(d<0){

  25. this.setValue('查询');

  26. this.setEnable(true);

  27. } else {

  28. var btn=this;

  29. //显示倒计时时间

  30. btn.setValue(timeToString(d));

  31. //设置不可用

  32. btn.setEnable(false);

  33. //定时器函数

  34. setInterval(function(){

  35. //重新设置时间

  36. date1=new Date();

  37. date2=new Date();

  38. date1.setHours(h);

  39. date1.setMinutes(m);

  40. date1.setSeconds(s);

  41. //重新当前时间与设定时间的时间差

  42. d=(date1-date2)/1000;

  43. if(d<0){

  44. btn.setValue('查询');

  45. btn.setEnable(true);

  46. } else {

  47. btn.setValue(timeToString(d));

  48. btn.setEnable(false);

  49. }

  50. },1000);

  51. }
    3.预览

最终效果如上图.

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
不才 不才
2年前
前端实现在浏览器中打印网页
前端数据报表打印方案背景项目:vueelementui需求:web端连接打印机打印报表功能关键词:浏览器端连接打印机打印报表调研首先,前端调用打印只有两种方式,使用window.print()和调用网络打印机。window.print这个是浏览器开放的api一般快捷键ctrlp或右键都也能调用。可以通过媒体查询的方案进行局部打印,也就是隐
Stella981 Stella981
3年前
Js中polyfill的使用限制
随着浏览器的更新,JS也在新增功能功能。这些功能为我们开发带来了很大的便利。在旧浏览器上使用,需要引入相关的polyfill才能用。然而,有些功能在旧浏览器中是无法完美实现的,只有在一定条件下才能使用。本文将为大家分析这些功能的使用限制。Symbol1.禁止用typeof和instanceof,如果要判断,建议判断是否是string。
Stella981 Stella981
3年前
CountDownLatch和CylicBarrier以及Semaphare你使用过吗
CountDownLatch是什么CountDownLatch的字面意思:倒计时门栓它的功能是:让一些线程阻塞直到另一些线程完成一系列操作后才唤醒。它通过调用await方法让线程进入阻塞状态等待倒计时0时唤醒。它通过线程调用countDown方法让倒计时中的计数器减去1,当计数器为0时,会唤醒哪些因为调用了await而阻塞的线程。
Stella981 Stella981
3年前
HTML5 audio 如何实现播放多个MP3音频
<audio标签是HTML5中的新标签,定义声音用于嵌入音频内容,比如音乐或其他音频流。用的比较多音频格式是.mp3。<audio标签常用属性如下表属性值描述autoplayautoplay添加该属性后,音频会自动播放controlscontrols设置后,显示控件,如播放按钮、音量looploop添加
Wesley13 Wesley13
3年前
ActiveReports 报表应用教程 (1)
在开始专题内容之前,我们还是了解一下ActiveReports是一款什么产品:ActiveReports是一款在全球范围内应用非常广泛的报表控件,以提供.NET报表所需的全部报表设计功能领先于同类报表控件,包括对交互式报表的强大支持、丰富的数据可视化形式、与VisualStudio的完美集成、以及对WPF/WinForm/ASP.NET/S
Wesley13 Wesley13
3年前
PHP二维数据排序,二维数据模糊查询
一、因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索。三表合并后的数组结构如下:Array(0Array(history_id12sla_group_
Stella981 Stella981
3年前
CountDownTimer 实现倒计时功能
CountDownTimerCountDownTimer是android自带的一个倒计时类,使用这个类可以很简单的实现倒计时功能CountDownTimer的实现方式newCountDownTimer(6000,1000){//第一个参数表示的是倒计时的总时间,第二参数表示的是倒计时的间隔时间。
混世魔王 混世魔王
2年前
皕杰报表的分页方法
如果一张报表有很多行,在打印的时候因为收到纸张的限制,所以需要对这张表进行分页。皕杰报表里分页的方式有很多,还能够自定义分页,可以最大程度满足各种页面的需求。单击报表的空白处,则与报表纸张、分页、打印相关的设置显示在属性视图中,如下图所示:基本的分页方式分
程序员一鸣 程序员一鸣
3星期前
鸿蒙元服务项目实战:备忘录实现列表展示
目前仅仅是文字的存储,在实际的备忘录中,还有很多的功能,比如图片,比如画图,比如表格等等,当然了需要我们一步一步来实现。
鸿蒙小林 鸿蒙小林
2星期前
《伴时匣》app开发技术分享--用户登陆页静态(1)
技术栈Appgalleryconnect开发准备大家好,今天给大家带来一个全新的鸿蒙应用,名字叫做伴时匣,意思就是一个陪伴度过时光的匣子,首先来介绍关于伴时匣的整个功能设想,首先呢,就是应用的功能,这个应用主要用来进行倒计时提醒的功能,在这里我们可以发布一
多态潮汐
多态潮汐
Lv1
想起你的最初炙热的光芒和现在冷冷的回应
文章
2
粉丝
0
获赞
0