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

点击模态框树图标实现Div上滑效果(无jQuery)故障排查

问题:点击树图标无法触发div上滑显示(无jQuery方案)

点击模态框中的树图标时,希望让指定div上滑显示,但当前代码无法实现效果,以下是当前使用的代码及修正方案:

原代码

HTML

<div id="alberi" class="alberi">
      <div id="acero">
          <img src="./images/tree.png">
          <h1>ACERO CAMPESTRE</h1>
          <h2>Altezza: 7,0m</h2>
          <h2>Ingombro: 2,0m</h2>
          <h2>Fornitore</h2>
      </div>
</div>

CSS

.alberi{
    background-color: green;
    display: flex;
    height: 0px;
    width: 90.9%;
    position: absolute;
    bottom: 0;
    border-bottom-left-radius: 30px;
    /* 可选:添加过渡动画让滑动更平滑 */
    /* transition: height 0.3s ease; */
}

.slided{
    height: 270px;
}

原JS(存在错误)

const sezionealberi = document.querySelector('#alberi')
const pulsantealberi = document.querySelector('#m-tree')

pulsantealberi.addEventListener('click', primavera)

let mezzastagione = 1;

function primavera()
{
    if(mezzastagione == 1) 
    { 
        sezionealberi.innerHTML = `<class = "alberi slided">`;
        mezzastagione = 0;
    }
    
    else{
        sezionealberi.innerHTML = `<class = "alberi">`;
        mezzastagione = 1;
    }
}

错误分析

原JS代码的核心问题是误用了innerHTML属性:innerHTML用于修改元素内部的HTML内容,而非元素自身的属性。你试图通过它修改div的class属性,完全不符合语法规范,自然无法生效。

修正方案

直接操作元素的classList属性来添加/移除类,这是原生JS操作类名的标准方式:

修正后的JS(方案一:保留状态变量)

const sezionealberi = document.querySelector('#alberi')
const pulsantealberi = document.querySelector('#m-tree')

pulsantealberi.addEventListener('click', primavera)

let mezzastagione = 1;

function primavera() {
    if (mezzastagione === 1) {
        // 添加slided类
        sezionealberi.classList.add('slided');
        mezzastagione = 0;
    } else {
        // 移除slided类
        sezionealberi.classList.remove('slided');
        mezzastagione = 1;
    }
}

更简洁的方案(方案二:使用toggle自动切换)

classList.toggle()方法可以自动切换类的存在状态,无需手动维护状态变量:

const sezionealberi = document.querySelector('#alberi')
const pulsantealberi = document.querySelector('#m-tree')

pulsantealberi.addEventListener('click', () => {
    sezionealberi.classList.toggle('slided');
});

可选优化

如果希望滑动过程更平滑,给.alberi类添加过渡动画:

.alberi{
    /* 原有样式 */
    transition: height 0.3s ease;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:16:13