【发布时间】:2018-07-12 16:01:41
【问题描述】:
首先,我对 javascript 非常陌生。我有一个 Shopify 商店,我计划像亚马逊一样为我的每个产品页面设置一个倒数计时器。我知道有很多插件可以用于 Shopify,但它们都不符合我 Shopify 商店的主题和风格,所以我打算自己制作一个。
我想要的是,如果用户 1 打开我的网站并导航到产品页面,他应该会看到一个倒计时到特定时间的计时器,例如 12:00:00 (hh:mm:ss)。假设 User-1 看到 'Deal ends in 11:20:10' 现在如果 User-2 同时打开同一个产品页面,那么他也应该看到 'Deal ends in 11:20:10' 重点是计时器不应该每次都刷新回12:00:00浏览器加载/重新加载页面,网站上的每个用户都应该看到倒数计时器上的剩余时间。
我开始进行一些研究,并设法在我的商店中运行了一个计时器。这不是我想要的,但这里是代码:
var interval;
var minutes = 1;
var seconds = 5;
window.onload = function() {
countdown('countdown');
}
function countdown(element) {
interval = setInterval(function() {
var el = document.getElementById(element);
if(seconds == 0) {
if(minutes == 0) {
el.innerHTML = "countdown's over!";
clearInterval(interval);
return;
} else {
minutes--;
seconds = 60;
}
}
if(minutes > 0) {
var minute_text = minutes + (minutes > 1 ? ' minutes' : ' minute');
} else {
var minute_text = '';
}
var second_text = seconds > 1 ? 'seconds' : 'second';
el.innerHTML = minute_text + ' ' + seconds + ' ' + second_text + ' remaining';
seconds--;
}, 1000);
}
</script>
这就是它的样子:
它确实有效,但存在以下问题:
- 它会随着浏览器的刷新而刷新。
- 没有时间。
- 计时器到零时不会自动重复。
- 每个用户的剩余时间都不一样。
正如我所提到的,我几乎是 JavaScript 的菜鸟。谁能帮我建立一个可以克服上述问题的倒数计时器?
【问题讨论】:
-
由于您希望多个用户看到相同的计时器,因此仅 js 将无济于事,因为它是客户端
-
您需要对您的服务器进行一些调用,该调用需要以原子方式处理。单靠 Js 帮不了你
-
您首先需要计算当前时间(即用户登陆您的页面的时间)和目标时间(计时器应该为零的时间)之间的差异。然后用时差填写你函数中使用的小时、分钟、秒。我不确定为什么人们建议这应该在服务器端完成。这看起来很愚蠢。
-
不要考虑倒计时应该运行多长时间。想想它应该什么时候结束,只存储那个信息(然后让你的 GUI 倒数到那个时间戳)。
标签: javascript