javascript - 每次点击触发相同的 CSS 动画

标签 javascript jquery css

我正在尝试触发 CSS 动画 onclick,但每次单击后它都会重新启动。我知道我可以打开和关闭动画,但我只想在每次单击按钮时触发动画。此外,最初不应运行 CSS 动画。仅在单击时运行。

这是我的笔。 http://codepen.io/omarel/pen/JRwpZp

HTML :

<a href="#" class="addtocart">click me</a>

Jquery :

 $('.addtocart').click(function () {  
     $(this).addClass('on');
 }); 

CSS:

.addtocart {
    position: relative;
}

    .addtocart.on {
        -webkit-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
        -moz-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
        -ms-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
        -o-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
        animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
    }

@keyframes cartbtnFade {
    0% {
        opacity: 0;
        transform: translateY(-100%);
    }

    10% {
        transform: translateY(-100%);
    }

    15% {
        transform: translateY(0);
    }

    30% {
        transform: translateY(-50%);
    }

    40% {
        transform: translateY(0%);
    }

    100% {
        opacity: 1;
    }
}

最佳答案

您可以在动画结束时收听,然后删除“on”类

var animationEvent = 'webkitAnimationEnd oanimationend msAnimationEnd animationend';
$('.addtocart').click(function () { 
  $(this).addClass('on');
  $(this).one(animationEvent, function(event) {
    $(this).removeClass('on')
  });
}); 

$('.addtocart').click(function () { 
  $(this).addClass('on');
  $(this).one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(event) {
    $(this).removeClass('on')
  });
}); 
.addtocart {
		position:relative;
  width:100px;
  display:block;
  background-color:#000;
  color:#fff;
  padding:10px;
  text-align:center;
	}
	.addtocart.on {
    -webkit-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
    -moz-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
    -ms-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
    -o-animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
    animation: cartbtnFade 0.6s 0.1s 1 linear alternate;
	}

@keyframes cartbtnFade {
  0% {
    opacity: 0;
    transform:translateY(-100%);
  }
  10% {
  	transform:translateY(-100%);

  }
  15% {
	  transform:translateY(0);
	}
	30% {
	  transform:translateY(-50%);
	  
	}
	40% {
	  	transform:translateY(0%);

	}
  100% {
    opacity: 1;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="addtocart">click me</a>

关于javascript - 每次点击触发相同的 CSS 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179959/

相关文章:

css - 文本框中的右对齐斜体文本被截断

javascript - 单击 anchor 标记内的字形图标时无法访问 anchor 标记数据

css - 手写笔 @font-face url 编译不正确

javascript - 将表格添加到搜索结果自动完成下拉列表

jquery - 使用 jQuery 移动元素 - 淡出然后淡入?

javascript - React Render 中的不变违规或在 React 中迭代和返回的正确方法

java - 将 JSON 数组从 Java Servlet 传递到 HTML

javascript - Thymeleaf 模板中 HashMap 的级联下拉列表

javascript - Java 正则表达式替换功能未按预期工作

javascript - 在javascript中按原始顺序拆分整数并将其存储在数组中