className 改变不通过所有 if 和 else if 语句
className Changing not passing through all if and else if Statements
更改 类 时遇到问题。如果我将像素硬编码到样式更改中但想要使用 类 和 CSS 的更清晰的版本,我可以让它工作。目标是根据宽度的 healthPercent 值使像素大小变化更大或更小。这部分有效,但麻烦的部分是更改 类 以更改栏的颜色。出于某种原因,它没有正确地通过 if 语句并且一直保持绿色直到死亡(对于 healthPercent 为零或更小),当它达到零然后变为红色时。我不太明白为什么它通过了第一个 if 检查而不是其余的。关于如何解决此问题的任何想法?
编辑:我正在开发一款游戏。只是为了澄清。
JAVASCRIPT
displayLifeBar = function ()
{
pixelMod = 2.3; //added definition here but global on full code
healthPercent = 130; //added here for example but passed down
lifeBar = 'player_lifebar';
document.getElementById(lifeBar).style.width = healthPercent + 'px';
var criticalLife = 25 * pixelMod;
var lowLife = 50 * pixelMod;
var hurtLife = 75 * pixelMod;
if (healthPercent <= 0){
document.getElementById(lifeBar).className = '';
}
else if (healthPercent < criticalLife){
document.getElementById(lifeBar).className = 'lifebar critical';
}
else if (healthPercent < lowLife){
document.getElementById(lifeBar).className = 'lifebar low';
}
else if (healthPercent < hurtLife){
document.getElementById(lifeBar).className = 'lifebar hurt';
}
else
{
document.getElementById(lifeBar).className = 'lifebar';
}
}
CSS
/* LIFEBAR COLORS STARTS */
.lifebar{
height:20px;
background-color: forestgreen;
}
.lifebar.hurt{
background-color: gold;
}
.lifebar.low{
background-color: orange;
}
.lifebar.critical{
background-color: red;
}
/* LIFEBAR COLORS ENDS */
您的代码片段似乎符合您的描述 - 假设您的 HTML 看起来像 <div id='player_lifebar'></div>
。
var pixelMod = 2.3;
var healthPercent = 10;
var lifeBar = 'player_lifebar';
displayLifeBar = function ()
{
document.getElementById(lifeBar).style.width = healthPercent + 'px';
var criticalLife = 25 * pixelMod;
var lowLife = 50 * pixelMod;
var hurtLife = 75 * pixelMod;
if (healthPercent <= 0){
document.getElementById(lifeBar).className = '';
} else if (healthPercent < criticalLife){
document.getElementById(lifeBar).className = 'lifebar critical';
} else if (healthPercent < lowLife){
document.getElementById(lifeBar).className = 'lifebar low';
} else if (healthPercent < hurtLife){
document.getElementById(lifeBar).className = 'lifebar hurt';
} else {
document.getElementById(lifeBar).className = 'lifebar';
}
}
displayLifeBar();
// for testing:
function modifyHealth(points) {
healthPercent = healthPercent + points;
displayLifeBar(); //re-render healthbar
}
document.getElementById('heal').addEventListener('click', function() { modifyHealth(10) });
document.getElementById('attack').addEventListener('click', function() { modifyHealth(-10) });
.lifebar{
height:20px;
background-color: forestgreen;
}
.lifebar.hurt{
background-color: gold;
}
.lifebar.low{
background-color: orange;
}
.lifebar.critical{
background-color: red;
}
<div id='player_lifebar'></div>
<!-- for testing -->
<br>
<button id='heal'>♡ heal (+10)</button>
<button id='attack'> attack (-10)</button>
更改 类 时遇到问题。如果我将像素硬编码到样式更改中但想要使用 类 和 CSS 的更清晰的版本,我可以让它工作。目标是根据宽度的 healthPercent 值使像素大小变化更大或更小。这部分有效,但麻烦的部分是更改 类 以更改栏的颜色。出于某种原因,它没有正确地通过 if 语句并且一直保持绿色直到死亡(对于 healthPercent 为零或更小),当它达到零然后变为红色时。我不太明白为什么它通过了第一个 if 检查而不是其余的。关于如何解决此问题的任何想法?
编辑:我正在开发一款游戏。只是为了澄清。
JAVASCRIPT
displayLifeBar = function ()
{
pixelMod = 2.3; //added definition here but global on full code
healthPercent = 130; //added here for example but passed down
lifeBar = 'player_lifebar';
document.getElementById(lifeBar).style.width = healthPercent + 'px';
var criticalLife = 25 * pixelMod;
var lowLife = 50 * pixelMod;
var hurtLife = 75 * pixelMod;
if (healthPercent <= 0){
document.getElementById(lifeBar).className = '';
}
else if (healthPercent < criticalLife){
document.getElementById(lifeBar).className = 'lifebar critical';
}
else if (healthPercent < lowLife){
document.getElementById(lifeBar).className = 'lifebar low';
}
else if (healthPercent < hurtLife){
document.getElementById(lifeBar).className = 'lifebar hurt';
}
else
{
document.getElementById(lifeBar).className = 'lifebar';
}
}
CSS
/* LIFEBAR COLORS STARTS */
.lifebar{
height:20px;
background-color: forestgreen;
}
.lifebar.hurt{
background-color: gold;
}
.lifebar.low{
background-color: orange;
}
.lifebar.critical{
background-color: red;
}
/* LIFEBAR COLORS ENDS */
您的代码片段似乎符合您的描述 - 假设您的 HTML 看起来像 <div id='player_lifebar'></div>
。
var pixelMod = 2.3;
var healthPercent = 10;
var lifeBar = 'player_lifebar';
displayLifeBar = function ()
{
document.getElementById(lifeBar).style.width = healthPercent + 'px';
var criticalLife = 25 * pixelMod;
var lowLife = 50 * pixelMod;
var hurtLife = 75 * pixelMod;
if (healthPercent <= 0){
document.getElementById(lifeBar).className = '';
} else if (healthPercent < criticalLife){
document.getElementById(lifeBar).className = 'lifebar critical';
} else if (healthPercent < lowLife){
document.getElementById(lifeBar).className = 'lifebar low';
} else if (healthPercent < hurtLife){
document.getElementById(lifeBar).className = 'lifebar hurt';
} else {
document.getElementById(lifeBar).className = 'lifebar';
}
}
displayLifeBar();
// for testing:
function modifyHealth(points) {
healthPercent = healthPercent + points;
displayLifeBar(); //re-render healthbar
}
document.getElementById('heal').addEventListener('click', function() { modifyHealth(10) });
document.getElementById('attack').addEventListener('click', function() { modifyHealth(-10) });
.lifebar{
height:20px;
background-color: forestgreen;
}
.lifebar.hurt{
background-color: gold;
}
.lifebar.low{
background-color: orange;
}
.lifebar.critical{
background-color: red;
}
<div id='player_lifebar'></div>
<!-- for testing -->
<br>
<button id='heal'>♡ heal (+10)</button>
<button id='attack'> attack (-10)</button>