触发单向CSS转换的可靠方式
Reliable way to trigger one-way CSS transition?
我设计了一个过渡,可以立即改变背景颜色,然后慢慢恢复到原始颜色:
body, html {margin: 0px;padding: 0px;}
div {
padding: 3px;
margin: 1px 0 1px 0;
border: 1px solid black;
background-color: #3377FF;
transition: background-color .9s ease-in;
}
div:hover {
background-color: #33FF11;
transition-duration: 0s;
}
<div> Hello</div>
<div> Hello</div>
这是为表中的行设计的,用于通知用户更改。我想通过编程触发效果,但要使用实际的CSS。
Row.prototype.blink = function() {
... ?
}
我尝试使用setTimeout
来添加和删除节点中的类名:
$("div").on("click", function() {
$(this).addClass("updated");
var _this = this;
setTimeout(function(){$(_this).removeClass("updated");}, 30);
});
body, html {margin: 0px;padding: 0px;}
div {
padding: 3px;
margin: 1px 0 1px 0;
border: 1px solid black;
background-color: #3377FF;
transition: background-color .9s ease-in;
}
div.updated {
background-color: #33FF11;
transition-duration: 0s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click div to activate the blink effect:</p>
<div> Hello</div>
<div> Hello</div>
我还尝试使用transitioned
事件,但该事件从未触发:
$("div").on("click", function() {
$(this).one("transitionend", function(){$(this).removeClass("updated");}); // never happens
$(this).addClass("updated");
});
我不喜欢setTimeout方法,难道你想不出更好的技巧来触发眨眼效果吗?
未触发transitionend
事件的原因是transition-duration
设置为0s
。换句话说,在移除类之前,转换永远不会开始(但由于事件未被激发,所以不会移除类)。
这听起来确实像一个动画会更适合这个。只需监听animationend
事件,并在动画结束时删除回调中的类:
$('div').on('click', function() {
$(this).addClass('updated').one('animationend', function() {
$(this).removeClass('updated');
});
});
body, html {margin: 0px;padding: 0px;}
div {
padding: 3px;
margin: 1px 0 1px 0;
border: 1px solid black;
background-color: #3377FF;
cursor: pointer;
}
div.updated {
animation: updatedFade .9s ease-in forwards;
}
@keyframes updatedFade {
0% { background-color: #33FF11; }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Hello</div>
<div>Hello</div>
作为初始解决方案的变通方案,可以将transition-duration
更改为极短的值,如1ms
,以便实际开始初始转换,从而允许触发transitionend
事件:
$("div").on("click", function() {
$(this).addClass("updated").one("transitionend", function() {
$(this).removeClass("updated");
});
});
body, html {margin: 0px;padding: 0px;}
div {
padding: 3px;
margin: 1px 0 1px 0;
border: 1px solid black;
background-color: #3377FF;
transition: background-color .9s ease-in;
cursor: pointer;
}
div.updated {
background-color: #33FF11;
transition-duration: 1ms;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Hello</div>
<div>Hello</div>
相关文章:
- 如何以用户友好的方式在计算机上保存从画布转换的图像
- CSS Div 类之间的转换仅以一种方式发生
- 有没有一种方法可以制作一个prezi,然后以某种方式将其转换为html和css类型的代码
- 如何将jQuery removeClass转换为ReactJS方式
- 将方程转换为 java 脚本可以解释它的方式
- 使用 JS 将日期字符串转换为可读方式
- 以编程方式将同步代码转换为异步代码
- 如何以简单的方式将函数转换为 RequireJS 中的模块
- 以数学方式转换 SVG 路径中的值以填充视图框
- 将 HTML 表转换为下拉列表(或以其他方式获取带有列的选择标记)
- 如何以简单的方式将像素转换为em
- 将 svg 转换为 base64.以编程方式创建的
- 从JS以编程方式使用CSS转换的干净方法
- 在*最后一个*CSS3转换之后,事件处理的稳健方式
- 如何以编程方式转换SVG
- 如何以交互方式降低(或停止)jquery转盘转换速度
- 更干净的方式转换dd-mm-yyyy到mm-dd-yyyy格式的Javascript
- 函数式Javascript-以FP方式转换为点格式(使用Ramda)
- 如何用insertAfter和insertBefore代码以三进制方式转换if块
- 为什么以这种方式转换代码