以下是一个简单的实现战斗界面动画的示例代码:

HTML:

<!DOCTYPE html>
<html>
<head>
  <title>战斗界面动画</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <div class="container">
    <div id="boxA" class="box">
      <div id="healthA" class="health-bar"></div>
      <div id="damageA" class="damage-text"></div>
    </div>
    <div id="boxB" class="box">
      <div id="healthB" class="health-bar"></div>
      <div id="damageB" class="damage-text"></div>
    </div>
  </div>
  
  <script src="script.js"></script>
</body>
</html>

CSS (style.css):

.container {
  display: flex;
  justify-content: space-around;
  margin-top: 100px;
}

.box {
  width: 150px;
  height: 150px;
  background-color: green;
  position: relative;
}

.health-bar {
  width: 100%;
  height: 20px;
  background-color: blue;
  position: absolute;
  bottom: 0;
}

.damage-text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 18px;
  color: white;
  visibility: hidden;
  animation: shake 0.3s linear infinite;
}

@keyframes shake {
  0% { transform: translate(-50%, -50%); }
  10% { transform: translate(-55%, -50%); }
  20% { transform: translate(-50%, -50%); }
  30% { transform: translate(-55%, -50%); }
  40% { transform: translate(-50%, -50%); }
  50% { transform: translate(-55%, -50%); }
  60% { transform: translate(-50%, -50%); }
  70% { transform: translate(-55%, -50%); }
  80% { transform: translate(-50%, -50%); }
  90% { transform: translate(-55%, -50%); }
  100% { transform: translate(-50%, -50%); }
}

.red-bg {
  background-color: red !important;
}

JavaScript (script.js):

var healthA = 100;
var healthB = 100;

var boxA = document.getElementById("boxA");
var boxB = document.getElementById("boxB");
var healthBarA = document.getElementById("healthA");
var healthBarB = document.getElementById("healthB");
var damageTextA = document.getElementById("damageA");
var damageTextB = document.getElementById("damageB");

function updateHealthBar() {
  healthBarA.style.width = healthA + "%";
  healthBarB.style.width = healthB + "%";
  
  if (healthA <= 20) {
    boxA.classList.add("red-bg");
  } else {
    boxA.classList.remove("red-bg");
  }
  
  if (healthB <= 20) {
    boxB.classList.add("red-bg");
  } else {
    boxB.classList.remove("red-bg");
  }
}

function showDamageText(damage, isPlayerA) {
  var damageText = isPlayerA ? damageTextA : damageTextB;
  damageText.innerHTML = "-" + damage;
  damageText.style.visibility = "visible";
  
  setTimeout(function() {
    damageText.style.visibility = "hidden";
  }, 500);
}

function attack(isPlayerA) {
  var damage = Math.floor(Math.random() * 10) + 1;
  
  if (isPlayerA) {
    healthB -= damage;
    showDamageText(damage, isPlayerA);
    
    if (healthB <= 0) {
      boxB.style.display = "none";
      alert("Player A wins!");
    }
  } else {
    healthA -= damage;
    showDamageText(damage, isPlayerA);
    
    if (healthA <= 0) {
      boxA.style.display = "none";
      alert("Player B wins!");
    }
  }
  
  updateHealthBar();
}

updateHealthBar();
setInterval(function() {
  attack(Math.random() < 0.5);
}, 1000);

请将上述代码保存为三个文件:index.html,style.css和script.js,并在浏览器中打开index.html文件运行。战斗界面会显示两个方框AB,初始血量为100,背景为绿色。每秒钟随机选择一个方框进行攻击,攻击会随机扣除对方一定的血量,并显示扣血数量和抖动效果。当血量低于等于20时,背景会变成红色。当某个方框的血量降为0时,该方框会消失,并弹出提示获胜的消息框


原文地址: https://www.cveoy.top/t/topic/iShw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录