如何每小时弹出模态?
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 变量 当前时间,请查看以下示例:
【讨论】:
但我想准确地弹出模态 10 0' 时钟,11 点钟等直到 6 点钟。怎么做? @developer3onecity请检查更新后的代码sn-p.. 这个函数在加载时会工作一次,否则不会检查` if(curentHour >= 9 && currentMinutes > 0) intervalId = setInterval(varModal, 3600000); ` @developer3onecity,我认为这个解决方案会奏效。尝试将间隔超时值更改为更小的数字,例如60000
(1 分钟)。
@developer3onecity 进行快速测试,请查看评论中的快速测试部分以上是关于如何每小时弹出模态?的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap 如何设置打开页面10秒后 弹出模态框的效果 请列出详细代码