javascript - 动画结束后 div 仍保留在屏幕上

标签 javascript html css

我正在用 HTML 为 Android 构建一个应用程序。我用 HTML 制作了 NavigationDrawer,并使用 javascript 使其在单击按钮时显示,并在 <p> 上消失点击。我正在为动画使用关键帧。当我按下按钮时,动画起作用(我正在使用 -webkit-transform: translateX),当我再次单击按钮时,动画起作用但 div 没有隐藏。它保留在屏幕上,但我可以单击它(如指针事件:无;)。有什么问题?

CSS:

@-webkit-keyframes sMenuClose {
    from {
        -webkit-transform: translateX(0%);
    }
    to {
        -webkit-transform: translateX(-100%);
    }
}
@-webkit-keyframes sMenuOpen {
    from {
        -webkit-transform: translateX(-100%);
    }
    to {
        -webkit-transform: translateX(0%);
    }
}
.slidemenu {
    background: transparent;
    height: 100%;
    left: 0px;
    pointer-events: none;
    position: fixed;
    top: 0px;
    width: 100%;
    z-index: 9991;
}

.slidemenu .menu {
    background: #FFF;
    border-right: 1px solid #000;
    color: #333;
    height: 100%;
    overflow: visible;
    pointer-events: visible;
    position: absolute;
    top: 0px;
    -webkit-transform: translateX(-100%);
    width: 80%;
}

.slidemenu .menu.hidden {
    -webkit-animation-name: sMenuClose;
    -webkit-animation-duration: 0.6s;
    -webkit-animation-timing-function: ease;
    -webkit-animation-delay: 0s;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-direction: normal;
    -webkit-animation-fill-mode: forwards;
    -webkit-animation-play-state: running;
}

.slidemenu .menu.visible {
    -webkit-animation-name: sMenuOpen;
    -webkit-animation-duration: 0.6s;
    -webkit-animation-timing-function: ease;
    -webkit-animation-delay: 0s;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-direction: normal;
    -webkit-animation-fill-mode: forwards;
    -webkit-animation-play-state: running;
}

HTML:

<html>
    <head>
        ...
    </head>
    <body>
        ...
        <div class="slidemenu">
            <div class="menu">
                <p>Some text</p>
            </div>
        </div>
    </body>
</html>

JS:

window.onload = function() {

    document.querySelector("body div#actionbar div.action ul li.menu a").addEventListener("click", function(e) {
        e.preventDefault();
        if(document.querySelector("body div.slidemenu div.menu").classList.contains("hidden"))
        {
            document.querySelector("body div.slidemenu div.menu").classList.remove("hidden");
        }
        document.querySelector("body div.slidemenu div.menu").classList.add("visible");
    });

    document.querySelector("p").addEventListener("click", function(e) {
        e.preventDefault();
        document.querySelector("body div.slidemenu div.menu").classList.remove("visible");
        document.querySelector("body div.slidemenu div.menu").classList.add("hidden");
    });

};

你能帮帮我吗?

最佳答案

我认为您可以通过稍微简单一些的设置来获得您想要的效果。此示例稍作修改以在此处显示演示,但我认为您应该能够轻松地将此按钮转换回您的 li 菜单项。我将滑出部分设为浅蓝色,以便在这里也更容易看到。

function slideMenu_Toggle(){
    var _selector = "body div.slidemenu div.menu";
    document.querySelector(_selector).classList.toggle("visible");
}

window.onload = function() {
    var _selector = ".slidemenu .menu";
    document.querySelector(_selector).addEventListener("click", function(){
        if( this.classList.contains("visible") ) { slideMenu_Toggle(); }
    });

    document.querySelector("#toggle").addEventListener("click", slideMenu_Toggle);
};
.slidemenu {
  background: transparent;
  height: 100%;
  left: 0px;
  pointer-events: none;
  position: fixed;
  top: 0px;
  width: 100%;
  z-index: 9991;
}

.slidemenu .menu {
  border-right: 1px solid #000;
  color: #333;
  height: 100%;
  overflow: visible;
  position: absolute;
  top: 0px;
  width: 80%;
  pointer-events: visible;

  background: aliceblue;
  -webkit-transition: transform .5s ease;
  -webkit-transform: translateX(-100%);
}

.slidemenu .menu.visible {
  -webkit-transform: translateX(0%);
}
<div style="text-align: right; margin-top: 3em;">
  <button id="toggle" style="font-size: 2em;">toggle</button>
</div>

<div class="slidemenu">
  <div class="menu">
    <p>Some text</p>
  </div>
</div>

关于javascript - 动画结束后 div 仍保留在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662249/

相关文章:

javascript - 组合单选按钮和文本字段

javascript - Parse Cloud Code - 等待并返回关系查询

javascript - Flotr x 轴日期/时间

javascript - QuerySelectorAll 识别所有但不为所有添加效果

CSS 最佳实践/新手问题

javascript - Rails jquery 上多次调用 click 事件

html - 针对移动设备和 CSS @font-face 进行优化

JavaScript 或 CSS 无法在 Internet Explorer 上运行

html - Bootstrap 图标与输入不对齐

javascript - Textarea 在用户输入时扩展其宽度