首次单击后,Javascript,CSS,按钮不调用动画函数[重复]

Posted

技术标签:

【中文标题】首次单击后,Javascript,CSS,按钮不调用动画函数[重复]【英文标题】:Javascript, CSS, button doesn't call the function for an animation after first click [duplicate] 【发布时间】:2018-08-11 11:55:34 【问题描述】:

有没有办法在不更改html代码的情况下,在第一次点击后多次调用函数动画?我需要保留代码中的 id 和 class。我试图将 display 属性设置为 none,但它似乎不起作用。我希望动画在单击<p> 标签时开始,但是一旦我第一次单击它,动画就不会再次开始。即使在动画中间,我也想再次调用该函数。我阅读了有关该主题的所有其他问题,但它们似乎对我不起作用,因为 HTML 不同。请不要使用Jquery,但可以使用普通的JS。谢谢!

     <!DOCTYPE html>
    <html>
   <head>
   <style>

 .something 
    background:blue;
    height:20px;
   width:20px;
  .earth
  position :relative;
    animation:move 10s linear;
  background:red;
  height:20px;
    width:20px;

         
      @-webkit-keyframes move
     
     from  left: 0%;  
        to  left: 100%; 
      

       </style>
      <script>
      function changetext ()

        document.getElementById("demo").style.color = "red";
      animation();
       

        function animation()
            document.getElementById('ghost').className ='earth';


        
         function repeat()
         var sd = document.getElementById("ghost").className ='earth';
        sd.style.display = 'none';
       
     </script>
     </head>
       <body>
     <div class="something"></div>
      <div id="ghost"> </div>

      <p onclick="changetext();" id="demo"> HELLO WORLD </p>


     </body>
       </html>

【问题讨论】:

【参考方案1】:

您可以删除该类并重新添加它,但会有 1 毫秒的轻微延迟。

function changetext() 
  document.getElementById("demo").style.color = "red";
  animation();


function animation() 
  document.getElementById('ghost').className = '';
  setTimeout(function()
    document.getElementById('ghost').className = 'earth';
  , 1);
.something 
  background: blue;
  height: 20px;
  width: 20px;


.earth 
  position: relative;
  animation: move 10s linear;
  background: red;
  height: 20px;
  width: 20px;


@-webkit-keyframes move 
  from 
    left: 0%;
  
  to 
    left: 100%;
  
<div class="something"></div>
<div id="ghost"> </div>

<p onclick="changetext();" id="demo"> HELLO WORLD </p>

【讨论】:

即使使用 0 而不是 1 也可以;) 但是 1 看起来更好@TemaniAfif 为什么更好? :) 看起来更好..:P @TemaniAfif 和 void 只是为了挑剔,但 setTimeout 的最小值无论如何都是4ms。此外,您可以通过强制回流来完全避免异步(ghost.offsetWidth; 会这样做)。

以上是关于首次单击后,Javascript,CSS,按钮不调用动画函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

求助:怎么实现css中—鼠标单击按钮后按钮换图片的效果

如何根据我单击的按钮更改 div 的颜色? ( javascript/css/html 只有没有库)

在 iOS 设备中单击按钮后 CSS 悬停样式仍然存在

仅在单击按钮后请求相机权限

单击按钮后在现有卡片旁边自动生成一张 CSS 卡片

单击按钮后为拖放 angularjs 实现 CSS3 样式