【发布时间】:2017-10-15 12:07:29
【问题描述】:
我正在构建一个网页,用于检测您所在地区的天气预报。然而,为了让它独一无二,我试图让网页在界面上改变它的颜色。它会根据天气 api 中的天气图标来改变颜色。 (即 weath.weather[0]["icon"] )。我试图让它尽可能快地运行,同时让它更容易理解。所以我正在寻找一种替代方法。
我决定将颜色更改函数存储在一个变量中,以便它可以重复使用多次,这样我就可以缩短 Switch 语句。它包含一个可以重用的 CSS 字符串变量。该字符串是 setAttribute 函数的样式属性:
var coloring = function(id, Text, Background) {
var colorChange = "color: " + Text + "; background: " + Background + ";";
document.getElementById(id).setAttribute("style", colorChange);
};
这将用于通过引用它们的 id 来更改 Dom 的各种元素/部分的颜色。这是 Dom:
<body id="background">
<div id="header">
<h1>Local Weather Detector</h1>
</div>
<div id="location">
<h5 id="locIntro">Today's weather from Location...</h5>
</div>
<div id="box">
<div id="temperature">
<p><strong>Today, </strong>The temperature in your area is...
<button id="tempSwap">
</button></p>
</div>
<div id="weather">
<p>- and the general forecast is...</p>
</div>
</div>
<div id="copywrite"><h6> Ⓒ Thomas Jackson</h6>
<h6>(Project for Free Code Camp, Full Stack course)</h6></div>
</body>
我会从 api 获取图标数据,然后 switch 语句将根据它是哪个图标来确定需要更改哪些颜色。每个使用 coloring() 函数的 Switch Case 都会将 Dom 的颜色更改为自己设置的颜色:
$.getJSON(api, function(weath) {
switch (weath.weather[0]["icon"]) {
case "01d": //clear
coloring("background", "#f1c40f", "#3498db");
coloring("box", "#2980b9", "#ecf0f1");
coloring("temp", "#c0392b", "");
break;
case "01d":
case "03d":
case "04d":
case "50d": //cloud
coloring("background", "#3498db", "#ecf0f1");
coloring("header", "#f1c40f", "");
coloring("box", "", "#2980b9");
coloring("temp", "", "#3498db");
break;
case "02d": //cloudClear
coloring("background", "c0392b", "#2980b9");
coloring("header", "#f1c40f", "");
coloring("box", "", "#ecf0f1");
coloring("temp", "", "#2980b9");
break;
case "11d": //thunder
coloring("background", "#c0392b", "#2980b9");
coloring("header", "#f1c40f", "");
coloring("box", "", "#f1c40f");
coloring("temp", "", "#c0392b");
break;
case "13d": //snow
coloring("background", "#ecf0f1", "#2980b9");
coloring("header", "#34495e", "");
coloring("box", "", "#a5f2f3");
coloring("temp", "", "#34495e");
break;
case "03n":
case "04n":
case "50n": //cloudNight
coloring("background", "#ecf0f1", "#7f8c8d");
coloring("header", "#e74c3c", "");
coloring("box", "#f1c40f", "#34495e");
coloring("temp", "", "#2c3e50");
break;
case "09n":
case "10n": //rainNight
coloring("background", "#3498db", "#2c3e50");
coloring("header", "#f1c40f", "");
coloring("box", "#2980b9", "#95a5a6");
coloring("temp", "#3498db", "#2980b9");
break;
case "11n": //thunderNight
coloring("background", "#f1c40f", "#2c3e50");
coloring("header", "#e74c3c", "");
coloring("box", "#c0392b", "#f1c40f");
coloring("temp", "", "#c0392b");
break;
case "13n": //snowNight
coloring("background", "#f1c40f", "#2c3e50");
coloring("header", "#a5f2f3", "");
coloring("box", "#34495e", "#a5f2f3");
coloring("temp", "#2c3e50", "#f1c40f");
break;}
}
如果我以错误的方式处理这件事,最好知道。我的主要目标是让其他开发人员更高效、更清晰。
【问题讨论】:
-
由于代码已经可以运行,我认为这个问题更适合代码审查堆栈交换:codereview.stackexchange.com。在那里,人们可能会给你更好的反馈。
-
谢谢。有什么方法可以在不复制和粘贴的情况下将其转移到 StackExchange 代码审查?
-
我认为不可能把它移植到那里。
-
天哪!我不敢相信代码缩进有多复杂!我只想发这个..
标签: javascript css switch-statement weather-api setattribute