jQuery UI 实例 – 转换 Class(Switch Class)

jQuery UI SwitchClass(转换 Class)特效实例

switchClass() 是 jQuery UI Effects 中非常强大的方法,它可以以动画效果从一个 CSS 类平滑转换到另一个 CSS 类。本质上是先移除旧类,再添加新类,整个过程平滑过渡,常用于状态切换、主题更换、模式切换(正常/错误/成功)、动画按钮等场景。

addClass()removeClass()toggleClass() 不同的是,switchClass() 明确指定“从 A 切换到 B”,更适合有明确前后状态的交互。

官方文档:https://jqueryui.com/switchClass/

下面提供几个渐进实例,代码使用最新 CDN,可直接复制到 HTML 文件测试。

1. 基础转换 Class 动画

从一种状态平滑切换到另一种状态。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>jQuery UI SwitchClass 示例</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="//code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
  <style>
    .normal {
      background: #607D8B;
      color: white;
      width: 200px;
      height: 120px;
      padding: 20px;
      text-align: center;
      line-height: 120px;
      border-radius: 8px;
    }
    .success {
      background: #4CAF50;
      color: white;
      font-size: 1.6em;
      transform: scale(1.1);
      box-shadow: 0 10px 30px rgba(76,175,80,0.5);
      border-radius: 15px;
    }
    .warning {
      background: #FF9800;
      color: white;
      transform: rotate(3deg);
      box-shadow: 0 0 20px rgba(255,152,0,0.6);
    }
    .error {
      background: #f44336;
      color: white;
      transform: scale(0.95) rotate(-2deg);
      box-shadow: 0 0 25px rgba(244,67,54,0.7);
    }
    #box {
      margin: 40px auto;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <button id="toSuccess">切换到成功状态</button>
  <button id="toWarning">切换到警告状态</button>
  <button id="toError">切换到错误状态</button>
  <button id="toNormal">恢复正常</button>

  <div id="box" class="normal">当前状态:正常</div>

  <script>
    $(function() {
      $("#toSuccess").click(function() {
        $("#box").switchClass("normal", "success", 1200);
      });
      $("#toWarning").click(function() {
        $("#box").switchClass("normal", "warning", 1000);
      });
      $("#toError").click(function() {
        $("#box").switchClass("normal", "error", 1000);
      });
      $("#toNormal").click(function() {
        // 从当前任意状态切换回 normal
        $("#box").switchClass("success warning error", "normal", 1500);
      });
    });
  </script>
</body>
</html>

2. 带缓动 + 回调的转换

使用弹跳缓动,并在转换完成后提示。

<button id="modeSwitch">切换模式</button>

<style>
  .light { background: #FFFDE7; color: #333; }
  .dark { background: #212121; color: #FFFDE7; font-weight: bold; }
</style>

<script>
  $("#modeSwitch").click(function() {
    $("#box").switchClass("light", "dark", 1500, "easeInOutBack", function() {
      alert("已切换到暗黑模式!");
    }).switchClass("dark", "light", 1500, "easeInOutBack", function() {
      alert("已切换回明亮模式!");
    });  // 注意:这里会排队执行,形成来回切换
  });
</script>

3. 多状态循环切换

实现三种状态循环:正常 → 警告 → 错误 → 正常。

<button id="cycle">循环切换状态</button>

<script>
  var states = ["normal", "warning", "error"];
  var current = 0;

  $("#cycle").click(function() {
    var next = states[(current + 1) % states.length];
    $("#box").switchClass(states[current], next, 1000);
    current = (current + 1) % states.length;
  });
</script>

4. 常见应用:表单验证状态切换

输入框根据验证结果切换样式。

<input type="text" id="username" placeholder="请输入用户名">
<button id="validate">验证</button>

<style>
  .valid { border: 3px solid #4CAF50; background: #e8f5e8; }
  .invalid { border: 3px solid #f44336; background: #ffebee; }
  .default { border: 1px solid #ccc; }
</style>

<script>
  $("#validate").click(function() {
    var val = $("#username").val();
    if (val.length >= 3) {
      $("#username").switchClass("invalid default", "valid", 800);
    } else {
      $("#username").switchClass("valid default", "invalid", 800);
    }
  });
</script>

小技巧

  • 移除旧类、添加新类是原子操作,中间不会出现无样式状态。
  • 支持多个旧类:switchClass("old1 old2", "new", duration)
  • 队列动画:连续调用 switchClass 会自动排队,形成连续状态转换。
  • 与 toggleClass 区别:toggleClass 是“有/无”切换,switchClass 是“从A到B”明确转换。

switchClass() 是实现明确状态迁移的最佳选择,常用于主题切换、模式切换(日间/夜间)、步骤向导状态、按钮多态反馈等。如果你需要 暗黑模式全局切换步骤进度条状态动画,或 结合 Dialog 的状态反馈 示例,请告诉我!

文章已创建 3350

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部