繁体   English   中英

否则,如果陈述无效

[英]Else if statment not working

我一直在努力处理这段代码。

对于上下文,我正在编程一个简单的Tumblr页面(不是我的博客主题,而是一个页面),其中的音乐,背景和gif会根据一天中的时间而变化。 经过无数次挫折和反复试验后,除了一件事情,我已经完成了大多数工作。

我想一天有3次(白天,日落,夜晚),但我只能白天和黑夜实现,因为每当尝试包含“ else if”时,它都将失效。 这里是我的, 的工作电流的代码,但只有一天两次了三个(夜/日落)的:

 var currentTime = new Date().getHours(); if (19 <= currentTime && currentTime < 6) { if (document.body) { document.body.background = "(night bg)"; var url = "(night gif)"; var img = new Image(); img.src = url; document.body.appendChild(img); var source = "(night music)"; var audio = new Audio(); audio.addEventListener("load", function() { audio.play(); }, true); audio.src = source; audio.autoplay = true; audio.loop = true; } } else { if (document.body) { document.body.background = "(sunset bg)"; var url = "(sunset gif)"; var img = new Image(); img.src = url; document.body.appendChild(img); var source = "(day music)"; var audio = new Audio(); audio.addEventListener("load", function() { audio.play(); }, true); audio.src = source; audio.autoplay = true; audio.loop = true; } } 

我试图改变

else {
    if (document.body) {
        document.body.background = "(day bg)";

在顶部说“ else if”,而不是仅仅“ else”,并添加时间,例如:

 else if (16 <= currentTime && currentTime < 19) {
    if (document.body) {
        document.body.background = "(day bg)";

当这种方法不起作用时,我尝试了多种方法,例如取消“ if”或将“ if”和“ else”都设置为“ else if”,但是我什么也没做。 我还尝试过用剩下的代码制作第三个块,而“其他”块也没用。 有人知道解决方案和/或我做错了什么吗?

我认为您必须更改代码。

如果(19 <= currentTime && currentTime <6)不正确。

因为这意味着19 <= X <6。这是不可能的。

因此,您应该更改是否(19 <= currentTime || currentTime <6)

 var currentTime = new Date().getHours(); if (19 <= currentTime || currentTime < 6) { if (document.body) { document.body.background = "(night bg)"; var url = "(night gif)"; var img = new Image(); img.src = url; document.body.appendChild(img); var source = "(night music)"; var audio = new Audio(); audio.addEventListener("load", function() { audio.play(); }, true); audio.src = source; audio.autoplay = true; audio.loop = true; } } else if(16 <= currentTime && currentTime < 19){ /* programming Here */ } else { if (document.body) { document.body.background = "(sunset bg)"; var url = "(sunset gif)"; var img = new Image(); img.src = url; document.body.appendChild(img); var source = "(day music)"; var audio = new Audio(); audio.addEventListener("load", function() { audio.play(); }, true); audio.src = source; audio.autoplay = true; audio.loop = true; } } 

我认为您的解决方案可以改善。 查看代码,您会发现每个事件都有很多重复。

如果要添加另一个事件,则需要添加更多代码。

我建议您改为在阵列中制定计划。 这使得添加新事件变得更加容易。

// Define the schedule. start= start hour, end = end hour.
// With start=6 and end=19, the schedule will be used between
// 06:00 - 18:59.
// The schedules will be searched in order, and the first matching
// schedule will be used. Therefore the default schedule (night) must
// be last in the list.
var schedule = [
  { start : 6, end:19, bbg:"(sunset bg)", img:"(sunset gif)", music:"(sunset music)" },

  // Default schedule, must be last in list.
  { start : 0, end:24, bbg:"(night bg)", img:"(night gif)", music:"(night music)" }
];

var currentHour = new Date().getHours();
var currentSchedue;

// Loop though schedules    
for (var idx=0; idx < schedule.length; idx+=1) {
  currentSchedule = schedule[idx];

  // Find first matching schedule
  if (currentSchedule.start <= currentHour && currentSchedule.end > currentHour) {
    document.body.background =  currentSchedule.bbg;

    var img = new Image();
    img.src = currentSchedule.img;
    document.body.appendChild(img);

    var audio = new Auido();
    audio.src = currentSchedule.music;
    audio.autoplay = true;
    audio.loop = true;

    break; // stop loop if matching schedule was found
  }
}

如果您仍想使用if语句,请参见以下示例:

if ( 6 <= currentHour && currentHour < 16 ) {
  // Daytime, valid from 06:00 - 15:59
  console.log('Day', currentHour);
}
else if ( 16 <= currentHour && currentHour < 19 ) {
  // Evening  valid from 16:00 - 18:59
  console.log('Evening', currentHour);
}
else {
  // Night, valid 00:00 - 05:59 and 19:00 - 24:00
  console.log('Night', currentHour);
}

您的if陈述式中的逻辑错误

if (19 <= currentTime && currentTime < 6) {
}
  • 19 <= currentTime仅在currentTime为19或更高时才为true
  • 仅当currentTime小于6时currentTime < 6才是true。

他们不能同时是真实的。

var currentTime = new Date().getHours();
if (currentTime > 19 && currentTime < 6) {
  // Night
} else if (currentTime > 6 && currentTime < 17) {
  // Day
} else {
  // Sunset
}

详情请看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM