否则,如果声明不起作用

时间:2017-08-10 05:18:06

标签: javascript

我一直在使用这个与我一直合作过的代码。

对于上下文,我正在编写一个简单的Tumblr页面(不是我的博客主题,只是一个页面),其中音乐,背景和gif将根据一天中的时间而改变。经过多次挫折和反复试验之后,我得到了大部分工作 - 除了一件事。

我希望有一天三次(白天,日落,夜晚)但是,我只能白天和黑夜,因为每当我尝试包括“否则”它不起作用。这是 工作的当前代码,但每天只有两次(夜晚/日落):

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”但我没有任何工作。我还试图制作第三个块,其余的编码只是“其他”,但这也不起作用。有人知道解决方案和/或我做错了吗?

3 个答案:

答案 0 :(得分:1)

  

我认为你必须改变你的代码。

     

if(19&lt; = currentTime&amp;&amp; currentTime&lt; 6)不正确。

     

因为它意味着19 <= X&lt;这不可能。

     

所以你应该改变if(19&lt; = currentTime || currentTime&lt; 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;


    }
}

答案 1 :(得分:1)

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

如果您想添加其他活动,还需要添加更多代码。

我建议您在数组中制定计划。这使得添加新事件变得更加容易。

length

如果你仍想使用if语句,这是一个有效的例子:

// 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 (19 <= currentTime && currentTime < 6) { } 仅在currentTime为19或更高时才为真
  • 19 <= currentTime仅在currentTime小于6时才为真。

他们不可能同时成真。

答案 2 :(得分:-1)

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

有关详细信息,请参阅here