javascript - 仅在所有转换结束后运行代码
问题描述
这对我来说是个脑筋急转弯。
每次转换结束时都会触发此事件,在我们的例子中是5 次,因为backgroundColor, borderTopLeftRadius, borderTopRightRadius...
我不想要,我希望此事件仅在所有转换结束后触发。这是一个片段:
function changeStyle() {
const elem = document.getElementById("elem");
const logs = document.getElementById("logs");
elem.style.backgroundColor = "red";
elem.style.borderRadius = "30px";
elem.ontransitionend = () => {
logs.insertAdjacentText("beforeend", "transition ended");
}
}
#elem {
height: 100px;
width: 100px;
color: white;
background-color: blue;
transition: background-color 0.5s, border-radius 0.6s;
}
<div onclick="changeStyle()" id="elem">
click me !
</div>
<span id="logs"></span>
解决方案
该transitionend
事件包含一个propertyName
属性,该属性引用结束的属性转换。在这里,您可以检查事件以检查哪个属性导致事件触发。由于最长的过渡是边界半径,请检查是否propertyName
是边界半径之一:
function changeStyle() {
const elem = document.getElementById("elem");
const logs = document.getElementById("logs");
elem.style.backgroundColor = "red";
elem.style.borderRadius = "30px";
elem.ontransitionend = (e) => {
if (e.propertyName === "border-bottom-right-radius") {
logs.insertAdjacentText("beforeend", "transition ended");
}
}
}
#elem {
height: 100px;
width: 100px;
color: white;
background-color: blue;
transition: background-color 0.5s, border-radius 0.6s;
}
<div onclick="changeStyle()" id="elem">
click me !
</div>
<span id="logs"></span>
推荐阅读
- spring-boot - @RestControllerAdvice 不处理 ExpiredJwtException
- google-chrome - 对于预加载链接标记的 as 属性的每个不同值,Google Chrome 的优先级是什么?
- excel - 更新链接,现在我的公式已经停止工作
- c++ - C++ STL Stack 转发顺序是什么意思?
- node.js - Firebase web 9.0.1 错误包路径。未导出
- raspberry-pi - 向 Windows.Devices.GPIO.GpioPin.ValueChanged 添加处理程序会使窗口崩溃
- google-compute-engine - 计算引擎:重新启动后错误连接被拒绝
- javascript - 在 vue.js 更改 Swal2 的字体系列
- python - 比较方法违反了它的总合同!尝试运行决策树模型时
- r - 汇总按字符列分组的多个因子列并将结果作为 R 中的“嵌套”表返回