繁体   English   中英

如何使用具有过渡缓入效果的JavaScript隐藏/显示div?

[英]How to hide/show the div using javascript with transition ease-in-out effect?

这是我的代码,它隐藏/显示div ...,但是我想在转入/隐藏等javascript中隐藏/显示时具有过渡效果。 如何在javascript中实现呢?

function showHide(shID) {

    if (document.getElementById(shID)) {
        if (document.getElementById(shID + '-show').style.display != 'none') {
            document.getElementById(shID + '-show').style.display = 'none';
                document.getElementById(shID).style.display = 'block';
                window.scrollTo(0, 2346);
            }
        else {

            document.getElementById(shID + '-show').style.display = 'inline';
            document.getElementById(shID).style.display = 'none';

        }
    }
}

正如已经指出的那样,如果要以标准方式执行此操作,则应使用CSS3过渡,这也不会因维护成本高而引起很多麻烦。

但是,问题是,您正在尝试对没有可量化过渡值的属性使用过渡。 display: block;之间没有中间立场display: block; display: none; 因此您必须使用具有过渡值的东西。 通常,诸如widthheight类的属性是适当的,但您也可以在opacitylefttop等上使用它(因此,基本上任何具有数字值的属性)。

该CSS适用于从顶部淡入淡出和滑入文档的元素。

.panel {
    position: absolute;
    top: 0px;
    opacity: 0;
    -moz-transition: opacity .25s ease-in-out , top .25s ease-in-out;
    -o-transition: opacity .25s ease-in-out , top .25s ease-in-out;
    -webkit-transition: opacity .25s ease-in-out , top .25s ease-in-out;
    transition: opacity .25s ease-in-out , top .25s ease-in-out;
}
.panel.show {
    top: 50px;
    opacity: 100;
}

这是一个Javascript,它遍历所有元素,检查data-toggle属性,并在找到它时分配一个click处理程序。 处理程序为目标元素切换show类。

function toggleElem(evt) {
    var cn = 'show';
    var panel = document.getElementById(evt.target.getAttribute('data-toggle'));
    var classes = panel.className.split(/\s+/);
    var x = classes.indexOf(cn);

    if(x >= 0)
        { classes.splice(x,1); }
    else
        { classes.push(cn); }

    panel.className = classes.join(' ');
}

var elems = document.body.getElementsByTagName('*');

for(var i=0,l=elems.length;i<l;i++) {
    var elem = elems[i];
    var toggle = elem.getAttribute('data-toggle');

    if(toggle !== null)
        { elem.addEventListener('click',toggleElem,false); }
}

HTML示例。

<input type="button" data-toggle="foo" value="Toggle"/>
<div id="foo" class="panel">
    <p>This is a transitioned panel.</p>
</div>

由于您实际上将使用opacity而不是display您可能还会遇到这样的麻烦:要切换的元素虽然不可见,但就光标而言仍将存在。 然后,除了执行类更改之外,您可能还希望使用setTimeout()来更改display值,以防止过渡元素在隐藏时捕获输入。

我不确定,为什么不使用CSS3过渡。

但是严格地使用javascript可能会使用以下源代码: https//github.com/jquery/jquery/blob/master/src/effects.js#L107

暂无
暂无

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

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