如何使用addEventListener(webkitTransitionEnd)在window.close()之前延迟
How to delay before window.close() with addEventListener(webkitTransitionEnd)?
我对JS不是很精通,也不知道如何将类似的答案应用于我的问题,所以我非常感谢您的帮助和建议。
我在做什么:我正在处理一个网络视图弹出窗口。它的底部有一个关闭按钮,我想像应用程序中的按钮一样设置动画。
我是如何做到的:我现在只是用<a href="#" onclick="window.close(); return false;"><img class="button" src="img.png"></a>
来结束它。
我有一个在img.button:active
模式下更改的webkit动画。
我的问题:我希望在窗口关闭之前完成转换。我知道我必须使用addEventListener
来检查转换何时结束,但使用window.close()
似乎无法正确执行此操作。有什么好方法可以做到这一点吗?
我一整天都在阅读大量的文件,却没能弄清楚这一点。
您可以监听在元素img.button
上触发的事件transitionend
,它表示CSS转换结束。然而,由于浏览器对transitionend
的支持是不完整的(尽管所有最新版本的Chrome、Firefox和Safari本机都支持transitionend
,没有供应商前缀),因此您应该使用此脚本来找出实际支持的事件。
关于标记,我强烈建议避免使用内联JS,而是设置一个事件侦听器。
<a href="#" id="closeWindow"><img class="button" src="http://placehold.it/100x100" /></a>
我的脚本还假设页面上可能有多个img.btn
元素,因此我们必须循环遍历与选择器匹配的所有元素。如果不是这样,您可以简单地使用document.querySelector
并放弃循环。
// Determine which transntionend event is supported
function whichTransitionEvent() {
var t,
el = document.createElement("fakeelement");
var transitions = {
"transition" : "transitionend",
"OTransition" : "oTransitionEnd",
"MozTransition" : "transitionend",
"WebkitTransition": "webkitTransitionEnd"
}
for (t in transitions){
if (el.style[t] !== undefined){
return transitions[t];
}
}
}
var customTransitionEnd = whichTransitionEvent();
// Get button
var btns = document.querySelectorAll('img.btn:active'),
i;
for (i = 0; i < btns.length; ++i) {
btns[i].addEventListener(customTransitionEnd, function(e) {
e.preventDefault();
alert('Transition End');
// window.close();
});
}
实现这一点的最简单方法是,当用户单击锚或图像时,使用Element.classList API添加一个类,然后在给定的类上添加EventTarget.addEventListener。
function closeWindow () {
alert("actice: transition end you can call window.close() now");
window.close();
}
function anchorActive (e) {
e.preventDefault();
imgButton.classList.add("active")
}
var clickAnchor = document.querySelector("#clickAnchor"),
imgButton = document.querySelector("img.button");
clickAnchor.addEventListener("click", anchorActive, false);
imgButton.addEventListener("transitionend", closeWindow, false);
img{
opacity: 1;
transition: opacity 3s ease
}
img.active{opacity: .3}
<a id=clickAnchor href="#"><img class="button" src="http://placehold.it/150x150.png"></a>
- 可以简化嵌套的延迟Q Promises解析吗
- onclick函数需要双击,因为类分配延迟
- 更多延迟动画
- 对父作用域的指令更新延迟了一步
- 为JS函数添加延迟
- 带有延迟的循环每次应运行5次
- 关键帧之间的css3动画延迟
- 如何在有延迟的情况下对两个代码进行积分
- 如何为.css状态的更改添加延迟
- Angular.js延迟控制器初始化
- 在延迟时设置Whois脚本
- 如何在Javascript中延迟setInterval
- 如何在一个元素动画之后延迟
- 如何将一个方法延迟到另一个方法首先完成,javascript
- jQuery延迟了ajax调用的循环
- 如何减少在移动网络应用程序上播放声音的延迟
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- 实现延迟的jquery更改事件处理程序
- 如何使用addEventListener(webkitTransitionEnd)在window.close()之前延迟
- setTimeout 不会延迟 Chrome 中的 self.close()