如何每小时弹出模态?

Posted

技术标签:

【中文标题】如何每小时弹出模态?【英文标题】:How can I pop up modal for each hour? 【发布时间】:2021-12-18 11:07:37 【问题描述】:

我想显示从 10 到 6 开始的每个小时的弹出模式,以编写登录用户报告。它应该像 10 点时弹出窗口一样工作,用户编写他们的报告并关闭它。 1 小时后,即 11 点钟再次弹出。

我正在使用 laravel 7、javascript 和 jquery。这些语言中的任何一种对我来说都很方便。请帮帮我。

这是我目前使用的代码

** 弹出模态的javascript代码**

setInterval(function () 
       get_task_data();
    , 3600000);
  
    
    $.ajaxSetup(
        headers: 
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            
    );

   function get_task_data() 
    
        $.ajax(
            url: ' route('project.employee.task') ',
            type:'GET',
            data:  
        ).done(function(data)
             $('#myModal .modal-body').append(data);
            $('#myModal').modal('show');
        );
    


但我想在 10 点 0 点、11 点等准确弹出模态,直到 6 点 0 点。

已编辑

我想每小时发送一次“桌面通知”“请发送您的报告”,类似这样。我该怎么做?

【问题讨论】:

到目前为止你有什么尝试? @kiner_shah 我使用了 setInterval ` setInterval(function () get_task_data(); , 50000); ` 请使用相关代码编辑帖子并突出显示您面临的问题(如果有)。 @kiner_shah 已编辑,请检查 您需要做的是:在页面加载时获取当前时间,例如是 9:45。计算到 10:00 的分钟数,在本例中为 15 分钟,因此请相应地拨打setInterval。然后在 10:00,当调用函数时,在函数内部调用 clearInterval,然后再次调用 setInterval,但这次超时时间为 3600000 毫秒。 【参考方案1】:

使用类似 100/200ms 延迟的间隔,然后检查当前分钟是否为 0。为了避免多次调用,请检查当前 H-m 是否与上次调用不同。

let last = null;
setInterval(function() 
  const d = new Date();
  const curr_hm = `$d.getHours()-$d.getMinutes()`;
  if (d.getMinutes() == 0 && curr_hm != last) 
    console.log('Do task here!');
    last = curr_hm;
  
, 200);

【讨论】:

你为什么使用这个 const curr_hm = d.getHours()-d.getMinutes(); ?你能解释一下吗 这只是一个字符串,如 H-m(小时 - 分钟)。否则,该函数将在触发分钟内每 200 毫秒调用一次,从而导致不必要的多次调用。 第一次有效,但第二次以后 'curr_hm != last' 将相等,因为分配 'last = curr_hm;'在第一个真实的情况下。所以第二次以后它就不能工作了。 哦,等等,修复了我的代码,在字符串插值中缺少 $。【参考方案2】:

如果没问题,可以使用Window setInterval()方法

如何使用?

setInterval(function() 
    // Call your modal popup init function here__
, 3600000);

3600000 = 3600 秒 = 60 分钟 = 1 小时

了解更多关于设置间隔Click here


以下示例,代码将用于每隔一小时显示警报弹出窗口

setInterval(function() 
    alert("Hello");
, 3600000);

更新的代码片段

此代码将用于精确显示弹出模式 10 0' 时钟,11 点时钟等等,直到 6 0' 时钟。

var currentDate = new Date(); // get your current date and time__
var curentHour = currentDate.getHours(); // get Hours of your current time__
var curentMinutes = currentDate.getMinutes(); // get minutes of your current time__

var intervalId = null;
var varCounter = 0; // count the display times, and set initial value
var displayTimes = 9; // between 10'O clock to 6'O clock modal has to display 9 times

// stop function arround 6'O clock 
var varModal = function()
     if(varCounter < 10) 
          varCounter++; // you can remove this code
          alert(varCounter + 'time'); // you can remove this code
         
          /* your code goes here */
          
      else 
          // stop modal duisplay after 9 times, it's mea after on 6'O clock 
          clearInterval(intervalId);
          alert('Stop will start on next day'); // you can remove this code
     
;

/*
* display modal arround 10'O clock, 
* This function will trigger after each one hour, 
* So you have to set value 9, then only it'trigger arround 10'O clock
* -------
* If you want to trigger this modal arround 9'O clock, you have to check with value 8
*/
  
  
if(curentHour >= 9 && curentMinutes > 0)
  intervalId = setInterval(varModal, 3600000);

快速测试

从上述代码 sippet 更新以下代码

   if(curentHour >= 9 && curentMinutes > 0)
      intervalId = setInterval(varModal, 3600000);
    

改为

var localTimeInHours = 11; // have to mention your current time hours
var hoursForValidation = localTimeInHours - 1;

   if(curentHour >= hoursForValidation && curentMinutes > 0)
      intervalId = setInterval(varModal, 30000);
    

我在上述代码中做了以下更改

    我将 3600000 更改为 30000(30000 = 30 秒),这将用于 每 30 秒显示一次弹出窗口

    使用您的小时值更新 localTimeInHours 变量 当前时间,请查看以下示例:

如果您当前的本地时间是 11.15am,则更新值 localTimeInHours* 变量值应为 11 如果您当前的本地时间是10.00am 更新值localTimeInHours 变量值应该是10 如果您当前的本地时间是 10.00pm = 22.00pm 更新值 localTimeInHours 变量值应该是 22 如果您当前的本地时间是 6.40pm = 18.40pm 更新值 localTimeInHours 变量值应该是 18

【讨论】:

但我想准确地弹出模态 10 0' 时钟,11 点钟等直到 6 点钟。怎么做? @developer3onecity请检查更新后的代码sn-p.. 这个函数在加载时会工作一次,否则不会检查` if(curentHour >= 9 && currentMinutes > 0) intervalId = setInterval(varModal, 3600000); ` @developer3onecity,我认为这个解决方案会奏效。尝试将间隔超时值更改为更小的数字,例如 60000(1 分钟)。 @developer3onecity 进行快速测试,请查看评论中的快速测试部分

以上是关于如何每小时弹出模态?的主要内容,如果未能解决你的问题,请参考以下文章

将模态视图放在视图上并使背景变灰

刷新页面后如何显示模态弹出窗口?

Bootstrap 如何设置打开页面10秒后 弹出模态框的效果 请列出详细代码

如何使用动态添加的按钮打开模态窗口 - 纯 JavaScript

在通用应用程序中,如何将模态视图转换或重用为弹出框?

如何在 vue 中创建模态弹出窗口