繁体   English   中英

CSS转换在for循环javascript中无法正常工作

[英]css transition not working properly in for loop javascript

我使用for循环来更改“ div组具有相同的className”的className,以通过使用CSS过渡效果改变高度来改变外观。 但是问题只是第一个div产生了影响,而其他的保持了相当的效果。

的HTML:

<body onload='init()'>
    <div id="menu">
    <div id="chosen" class="accor hide">od</div>
        <ul>
            <li>To</li>
            <li>Pr</li>
            <li>La</li>                
        </ul>
        <div class="accor hide">En</div>
        <ul>
            <li>fa</li>
            <li>Co</li>
            <li>Co</li>                
        </ul>
        <div class="accor hide">Sp</div>
    </div>
</body>    

CSS:

.accor + ul{
    max-height: 500px;
    overflow: hidden;
    transition: max-height 0.5s ease;
}
.hide + ul{
    max-height: 0px;
    overflow: hidden;
    transition: max-height 0.5s ease;
}

javascript:

function init(){
    var chosen = document.getElementById('chosen');
    chosen.onclick = toggleDivs;
};

function toggleDivs(){
    hideDivs = document.getElementsByClassName('accor hide');
    for( var i = 0; i <= hideDivs.length; i++)
        hideDivs[i].className = 'accor';
};

使用该代码,当我单击id ='chosen'的div时,我希望所有className:'accor hide'的div都将像jquery的slidedown一样散开,但只有第一个div会这样做。

如果我更改一点JavaScript代码,它将在2个divs生效的情况下完成。

更改了javascript:

function toggleDivs(){
    hideDivs = document.getElementsByClassName('accor hide');
    hideDivs[0].className = 'accor';
    hideDivs = document.getElementsByClassName('accor hide');
    hideDivs[0].className = 'accor';
};

我想在i = 0之后使用for循环代码的版本,所以第一个div会产生过渡效果,并且循环会中断,这真的很奇怪。

 function init() { var chosen = document.getElementById('chosen'); chosen.onclick = toggleDivs; }; function toggleDivs() { var menu = document.getElementsByClassName('accor') for (var i = 0; i <= menu.length; i++) menu[i].classList.toggle('hide'); }; 
 .accor + ul { max-height: 500px; overflow: hidden; transition: max-height 0.5s ease; } .hide + ul { max-height: 0px; overflow: hidden; transition: max-height 0.5s ease; } 
 <body onload='init()'> <div id="menu"> <div id="chosen" class="accor hide">od</div> <ul> <li>To</li> <li>Pr</li> <li>La</li> </ul> <div class="accor hide">En</div> <ul> <li>fa</li> <li>Co</li> <li>Co</li> </ul> <div class="accor hide">Sp</div> </div> </body> 

hideDivs = document.getElementsByClassName('accor hide');

“ hideDivs”是找到的元素的实时HTMLCollection,请参见此处 。HTMLDOM中的HTMLCollection是实时的。 更改基础文档后,它将自动更新。

因此,当您更新元素之一的类名时,它将从变量“ hideDivs”中删除。 希望这能回答您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM