You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Vanilla JavaScript的toggle()方法精简3个IF循环?

当然可行!用原生JS就能实现,不用依赖jQuery

你原来的代码用三个独立函数+判断src的方式,其实可以通过统一维护状态或者CSS类切换来大幅精简,逻辑更集中,还能避免src.match可能出现的路径问题(比如浏览器把相对路径转成绝对URL后匹配异常)。

方法一:用状态变量统一管理(最直接)

定义一个布尔变量记录灯泡状态,点击时一次性切换所有效果,不用多次判断src:

<h1 class="title-text" id="title-text">Click the lightbulb to turn it on or off!</h1>
<img id="lightbulb" onclick="toggleAll()" src="/personal-projects/pic_bulbon1.gif">
<script>
    const lightbulb = document.getElementById("lightbulb");
    const titleText = document.getElementById("title-text");
    let isBulbOn = true; // 初始状态为开

    function toggleAll() {
        // 切换灯泡图片
        lightbulb.src = isBulbOn 
            ? "/personal-projects/pic_bulboff1.gif" 
            : "/personal-projects/pic_bulbon1.gif";
        
        // 切换背景色和标题颜色
        document.body.style.background = isBulbOn ? "black" : "#FEDD00";
        titleText.style.color = isBulbOn ? "white" : "black";
        
        // 反转状态
        isBulbOn = !isBulbOn;
    }
</script>

方法二:CSS类切换(更推荐,样式与逻辑分离)

把样式写在CSS里,通过给<body>添加/移除类来控制背景和标题颜色,逻辑只负责切换类和灯泡图片:

<style>
    body {
        transition: background 0.3s; /* 可选:添加过渡动画让切换更平滑 */
    }
    .light-on {
        background: #FEDD00;
    }
    .light-on .title-text {
        color: black;
    }
    .light-off {
        background: black;
    }
    .light-off .title-text {
        color: white;
    }
</style>

<h1 class="title-text" id="title-text">Click the lightbulb to turn it on or off!</h1>
<img id="lightbulb" onclick="toggleAll()" src="/personal-projects/pic_bulbon1.gif">
<script>
    const lightbulb = document.getElementById("lightbulb");
    const body = document.body;
    let isBulbOn = true;

    function toggleAll() {
        // 切换灯泡图片
        lightbulb.src = isBulbOn 
            ? "/personal-projects/pic_bulboff1.gif" 
            : "/personal-projects/pic_bulbon1.gif";
        
        // 切换body的类,原生classList.toggle直接实现类的添加/移除
        body.classList.toggle("light-on");
        body.classList.toggle("light-off");
        
        // 反转状态
        isBulbOn = !isBulbOn;
    }
</script>

额外优化:不用状态变量也能实现

如果不想维护状态变量,也可以直接通过DOM类的存在来判断当前状态,避免状态与实际DOM不一致的问题:

function toggleAll() {
    const isOff = body.classList.contains("light-off");
    lightbulb.src = isOff 
        ? "/personal-projects/pic_bulbon1.gif" 
        : "/personal-projects/pic_bulboff1.gif";
    
    body.classList.toggle("light-on");
    body.classList.toggle("light-off");
}

内容的提问来源于stack exchange,提问作者Joi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:40:40