javascript - 为 div 可见性使用过渡

标签 javascript html css

到目前为止,这是我已经完成的:

function getOffsetRect(elem) {
    var box = elem.getBoundingClientRect()
    var body = document.body
    var docElem = document.documentElement
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0
    var top = box.top + scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft
    return { top: Math.round(top), left: Math.round(left) }
}
function getOffsetSum(elem) {
    var box = elem.getBoundingClientRect()
    var body = document.body
    var docElem = document.documentElement
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0
    var top = box.top + scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft
    return { top: Math.round(top), left: Math.round(left) }
}
function getOffset(elem) {
    if (elem.getBoundingClientRect) {
    var regdiv = document.getElementById("register");
    var button = document.getElementById("regbtn");
    var a = getOffsetRect(elem);
    var top = parseInt(a.top);
    var bheight = button.style.height;
    var top_ = top + bheight;
    regdiv.style.top = top_ + "px";
    regdiv.style.left = a.left + "px";
    return a;
    } else { // old browser
        var a = getOffsetSum(elem);
        //window.alert("1\nTop:" + a.top + "\nLeft: " + a.left);
        var regdiv = document.getElementById("register");
        regdiv.style.top = a.top + "px";
        regdiv.style.left = a.left + "px";
        return a;
    }
}
function CloseRegister(elem) {
    var regdiv = document.getElementById("register");
    var button = document.getElementById("regbtn");
    if (register.style.display == 'none') {
        getOffset(button);
        register.classList.remove('hidden');
        register.classList.add('visible');
        register.style.display = "block";
        register.onmouseup = function () {
            register.onmouseup = null;
            register.classList.remove('visible');
            register.classList.add('hidden');
            setTimeout(function () { register.style.display = 'none'; }, 2000);
        }
    }
}
.register
{
    background-color:Purple;
    height:0;
    width:0;
    transition: 2s;
    -o-transition: 2s;
    -webkit-transition: 2s;
    -moz-transition: 2s;
}
.register.visible
{
    width:250px;
    height:250px;
    opacity:1;
}
.register.hidden
{
    font-size:0;
    width:0%;
    height:0%;
    opacity:0;
}
<center><div dir="rtl">
    <button style='margin-right:3px' type='button' id='regbtn' onclick='CloseRegister(this)'>Register</button>
    <div onmousedown="CloseRegister(this)" id="register" class="register" style="position:absolute; z-index:2; display:none;" dir="ltr">Register??</div>
</div></center>

现在,它按我的意愿工作了一半。当寄存器 div 打开并单击它时,它运行良好并且有一个过渡。但是 - 当 div 关闭并且我单击注册按钮以打开它时,它会立即打开而不进行转换(它的大小应该从 0 width height.visible 中定义的值。我尝试了我可能想到的所有方法,但我无法修复它..

最佳答案

您只需要在显示 DIV 元素时添加 setTimeout。

代替 register.classList.add('visible');地点

setTimeout(function(){register.classList.add('visible');}, 10);

关于javascript - 为 div 可见性使用过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220657/

相关文章:

javascript - JQuery 比较类名

javascript - 单击表格行以显示更多信息

javascript - 导航栏上的 Z-index 问题

html - 两列 html 布局,带拉伸(stretch)以适合列

css - 如何在 Suave web 中使用 css

html - 固定导航栏

javascript - 有没有办法用 css 给背景图片上色?如,只是图像

javascript - 将 json 对象合并到数据表中

javascript - jQuery Autogrow 和 Autosize - 它们不适用于我的输入

javascript - 在 DIV 上按下按键以引用某个位置