我一直认为CSS3动画(与CSS3 Transitions不同) 一旦启动,就总是完成工作 ,无论选择器是否与激活它们的元素都不匹配。
我今天意识到自己可能是错的。
在以下示例中,动画由:focus
和:active
类触发。专注于第一个文本字段:
tab
缓慢按下按钮,您将看到动画正确开始和结束;如果tab
快速按下按钮,您将看到一个新元素获得焦点后,旧元素的动画立即结束并消失。
@-webkit-keyframes pressed {
0%, 100% { transform : scale(1); }
50% { transform : scale(2); }
}
@keyframes pressed {
0%, 100% { transform : scale(1); }
50% { transform : scale(2); }
}
a:focus, a:active {
-webkit-animation : pressed 2s;
animation : pressed 2s;
}
a, input {
border : 1px solid silver;
padding : 5px;
height : 40px;
line-height : 28px;
margin : 0px;
display : inline-block;
width : 33.3%;
box-sizing : border-box;
background : white;
vertical-align : middle;
}
a {
color : dodgerBlue;
text-decoration : none;}
input {
color : red;
}
Lorem
如评论中所讨论的,即使在最初应用该动画的选择器规则不再适用之后,目前也没有办法强制动画完成一个完整的周期。
实现此目的的唯一方法是使用脚本。以下是使用JavaScript的示例代码段。这样做是animation
在元素获得焦点时向该元素添加一个类(已设置属性),然后仅在动画结束时将其删除。
注意:
我已在代码段中使用了webkitAnimationEnd事件,因此在其他浏览器中将无法使用。该代码还需要进行更精细的调整,因为它当前仅在动画结束时删除该类。因此,如果您在一个周期完成之前退出并进入,则不会发生任何事情。
window.onload = function() {
var anchors = document.querySelectorAll('a');
for (var i = 0; i < anchors.length; i++) {
anchors[i].addEventListener('focus', function() {
addanim(this);
});
anchors[i].addEventListener('webkitAnimationEnd', function() {
endanim(this);
});
}
function addanim(el) {
el.classList.add('focus');
}
function endanim(el) {
el.classList.remove('focus');
}
}
@keyframes pressed {
0%, 100% {
transform: scale(1);
}
50% {
transform: scale(2);
}
}
.focus {
animation: pressed 2s;
}
a,
input {
border: 1px solid silver;
padding: 5px;
height: 40px;
line-height: 28px;
margin: 0px;
display: inline-block;
width: 33.3%;
box-sizing: border-box;
background: white;
}
a {
color: dodgerBlue;
text-decoration: none;
}
input {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<input type="text" id="foo" value="Start here, then press tab" />
<a href="#">Lorem</a>
<a href="#">Ipsum</a>
<a href="#">dolor</a>
<a href="#">sit</a>
<a href="#">amet</a>
<a href="#">consectetur</a>
<a href="#">adipiscing</a>
<a href="#">elit</a>
animationcancel
注释中提到的事件(由BoltClock提出)对于我们的案例可能更有用,但它只是遇到动画异常结束时触发的事件。我们仍然必须编写自己的代码,以使其继续到周期结束。
问题内容: 给定 当我不知道n是什么时,如何选择最后一个’service-n’行?我尝试添加,但是没有用。 我有: 但它选择第一行,而我要最后一行。 我无法使用,因为实际上’service-n’行的数量是动态的,并且变化很大。 问题答案: 答案正是我把[last()]放在哪里,我把它放在错误的地方 它在这里: 不在这里:
如果条目的时间戳与今天的日期匹配,我想从SQLite表中选择所有条目。 我查询SQLite数据库如下: 这是我最近的行为,但我不希望在过去24小时内选择所有条目。我只想选择今天的日期是否与时间戳匹配。 如何仅选择表中时间戳与今天日期匹配的行。 数据库中的日期格式为:2014-07-05 12:59:35。
null 我正在编写一个数据库客户端库,示例使用了一个假设的、不存在的数据库服务器。因此,示例在运行时总是失败,但重要的是示例在语法上是有效的。因此我有上述要求。 如果没有办法做我想做的事情,那么如何选择不让运行特定的文档测试呢?例如,编译并运行一些文档测试,但完全忽略其他一些测试吗?
问题内容: 我有一个看起来像这样的报告: 这是通过SQL完成的(特别是T-SQL版本的Server 2005): 我希望该报告仅显示每个工作流程的最早日期: 有任何想法吗?我不知道这一点。我尝试使用嵌套的选择返回最早的托盘日期,然后在WHERE子句中进行设置。如果只有一家公司,这将非常有用: 但是,如果该表中有不止一家公司,那么这显然将行不通。任何帮助表示赞赏! 问题答案: 只需使用
#animated_div{ width:76px; height:47px; background:#92B901; color:#ffffff; position:relative; font-weight:bold; font-size:20px; padding:10px; animation:animated_div 5s 1;
我在一个微服务体系结构中工作,其工作原理如下 我有两个服务Web应用程序(REST服务),在eureka服务器中正确注册自己,然后我有一个客户端应用程序,获取eureka注册表,并使用ribbon作为客户端负载均衡器,确定哪个服务应用程序去(目前,一个简单的正在使用圆形罗宾)。 我的问题是,当我停止其中一个服务应用程序(它们目前在docker容器中运行)时,eureka不会将它们从注册表中删除(似