【问题标题】:Animation not playing for the second time动画第二次没有播放
【发布时间】:2022-01-22 17:17:31
【问题描述】:

当密码错误时,我有一个简单的密码框抖动动画,但是当我输入错误的密码时它不会第二次播放。我的逻辑如下:

function passwordCheck(){
    var password = document.getElementById("passwordbox")
    var checkbox = document.getElementById("checkbox")
    var submittedPassword = password.value;
    
    if( submittedPassword == "abc"){
        
        location.href = "secret.html"
    }
    if(submittedPassword !== "abc"){
       checkbox.checked = false
       document.getElementById("passwordbox").style.animation = "shake 0.82s cubic-bezier(.36,.07,.19,.97) both"    
    }
}

这是我的 css 动画:

@keyframes shake {
    8%, 41% {
        transform: translateX(-10px);
    }
    25%, 58% {
        transform: translateX(10px);
    }
    75% {
        transform: translateX(-5px);
    }
    92% {
        transform: translateX(5px);
    }
    0%, 100% {
        transform: translateX(0);
    }
}

【问题讨论】:

标签: javascript css css-animations


【解决方案1】:

在您的代码中,您永远不会删除动画。每次播放动画之前,您都需要将其删除,这样它就会播放不止一次。您可以使用以下代码:

function passwordCheck(){
    var password = document.getElementById("passwordbox")
    var checkbox = document.getElementById("checkbox")
    var submittedPassword = password.value;
    
    if( submittedPassword == "abc"){
        
        location.href = "secret.html"
    }
    if(submittedPassword !== "abc"){
       document.getElementById("passwordbox").style.animation = "";
       checkbox.checked = false
       document.getElementById("passwordbox").style.animation = "shake 0.82s cubic-bezier(.36,.07,.19,.97) both"    
    }
}

【讨论】:

  • 我不知道为什么,但它似乎仍然不起作用。如果有帮助,我在此 HTML 代码中调用密码检查功能:<input type="checkbox" onclick="passwordCheck()" id = "checkbox">
【解决方案2】:

已修复!我的 JS 代码现在是这样的

function passwordCheck(){
    var password = document.getElementById("passwordbox")
    var checkbox = document.getElementById("checkbox")
    var submittedPassword = password.value;
    
    if( submittedPassword == "abc"){
        
        location.href = "secret.html"
    }
    if(submittedPassword !== "abc"){
        document.getElementById("passwordbox").style.animation = "shake 0.82s cubic-bezier(.36,.07,.19,.97) both";
        checkbox.checked = false
        document.getElementById('passwordbox').addEventListener("animationend" ,function restart(){document.getElementById("passwordbox").style.animation = "";})    
    }
}

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-08-15
  • 2016-06-12
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 2015-11-03
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多