javascript 动画HTML对话框元素背景关闭不工作

cvxl0en2  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(106)

我正在尝试使用新的原生功能来动画打开和关闭我的对话框,其中显示属性可以被动画化。(该功能在这里的底部进行了解释)。请注意,目前仅在Chrome,Edge和Opera中支持:see caniuse
(!)请注意:我意识到我应该使用一些技巧,比如为我的动画设置一个封闭类,并将其与onanimationend事件侦听器配对,然后运行dialog.close()方法。然而,我的问题不是关于这个,而是关于让本机显示无动画工作。
正如你从我的代码片段中看到的,我能够成功地动画化对话框的关闭和打开。更进一步,当打开对话框时,::background成功地动画化了。然而,出于某种原因,我不明白,当关闭对话框时,::background没有动画化。这是动画显示属性的bug吗?或者我犯了一个错误?
我试着做另一个淡出关键帧,没有显示值,只用于背景,但它仍然不工作。
我怀疑这与离散动画效果只作用于元素本身而不是子元素或伪元素有关,但我不确定。

const dialog = document.getElementById("dialog")
const open = document.getElementById("open")
const close = document.getElementById("close")

open.onclick = () => dialog.showModal()
close.onclick = () => dialog.close()
dialog {
    background: white;
    color: black;
    padding: 1rem;
    border: unset;
    inset: unset;
    width: unset;
    height: unset;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    box-shadow: 0 0 0.5rem 0 rgba(0,0,0,0.2);
    animation: scale-out 1000ms forwards, fade-out 1000ms forwards;
}
dialog::backdrop {
    background: rgba(0,0,0,0.5);
    animation: test 1000ms forwards;
}

dialog[open] {
    animation: scale-in 1000ms forwards, fade-in 1000ms forwards;
}
dialog[open]::backdrop {
    animation: fade-in 1000ms forwards;
}

@keyframes test {
    0% {
        opacity: 1;
    }
    100% {
        opacity: 0;
    }
}

@keyframes fade-out {
    0% {
        opacity: 1;
        display: block;
    }
    100% {
        opacity: 0;
        display: none;
    }
}

@keyframes fade-in {
    0% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}

@keyframes scale-in {
    0% {
        transform: translate(-50%, -50%) scale(0.5);
    }
    100% {
        transform: translate(-50%, -50%) scale(1);
    }
}

@keyframes scale-out {
    0% {
        transform: translate(-50%, -50%) scale(1);
        display: block;
    }
    100% {
        transform: translate(-50%, -50%) scale(0.5);
        display: none;
    }
}
<dialog id="dialog">
  <button id="close">Close</button>
</dialog>

<button id="open">Open</button>
hfwmuf9z

hfwmuf9z1#

我看到你试图动画背景,同时关闭对话框,它在你的情况下消失,我已经测试了边缘,因为你的关注是与谷歌Chrome,我同意你.所以我只能请你尝试这与您各自的浏览器,并希望,这解决了你的问题.如果没有,然后让我知道.
修改only in css

dialog{
    /* rest piece of code */
    /* box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.2); */
    box-shadow: 0 0 0.5rem 100vw rgba(0, 0, 0, 0.2); /* updated */
    transition: 2s ease-out; /* added */
    /* rest piece of code */
}

字符串

  • box-shadow: **h-shadow v-shadow blur spread color inset** ;
  • 在您提供的代码中,box-shadow属性设置为0 0 0.5rem 100vw rgba(0, 0, 0, 0)。这里,0 0将阴影的水平偏移垂直偏移分别设置为00.5rem将阴影的模糊半径设置为0.5rem100vw将阴影的扩散半径设置为100vw,这意味着阴影将延伸到视口的整个宽度。rgba(0, 0, 0, 0.2)将阴影的颜色设置为半透明或半透明黑色,即,除了您为box-shadow选择的颜色之外什么都没有。

欲了解更多详情,请访问MDN css/box-shadow

相关问题