我在页面上有一堆长时间运行的CSS动画.我想在用户切换到另一个选项卡时暂停它们,并在用户再次返回原始选项卡时恢复它们.为简单起见,我不打算在此时使用跨浏览器解决方案; 让它在Chrome中运行应该足够了.
document.addEventListener("visibilitychange", function() {
if (document.hidden) {
document.querySelector("#test").classList.add("paused");
} else {
document.querySelector("#test").classList.remove("paused");
}
});Run Code Online (Sandbox Code Playgroud)
div#test {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 10vw;
animation-name: move;
animation-duration: 5s;
animation-fill-mode: forwards;
animation-timing-function: linear;
}
@keyframes move {
to {
left: 90vw
}
}
.paused {
animation-play-state: paused !important;
-webkit-animation-play-state: paused !important;
-moz-animation-play-state: paused !important;
}Run Code Online (Sandbox Code Playgroud)
<div id="test"></div>Run Code Online (Sandbox Code Playgroud)
上面的代码水平移动一个红色矩形.矩形完成动画需要5秒钟.
问题:动画启动后,切换到另一个浏览器选项卡; 经过一段时间(超过5秒)后切换回第一个标签.
预期结果:矩形从其停止的位置继续其路径.
实际结果:矩形出现在最终目的地并停止的大部分时间.有时它按预期工作.视频演示了这个问题.
我打了不同的价值观animation-fill-mode和animation-timing-function,但结果总是相同的.正如rv7 指出的那样,在CodePen,JSFiddle,JSBin和stackoverflow JS工具中共享示例会影响结果,因此最好直接针对本地HTTP服务器上的静态页面进行测试(或使用下面的链接).
为方便起见,我已将上面的代码部署 …
从这个字符串:
dfasd {{test}} asdhfj {{te{st2}} asdfasd {{te}st3}}
Run Code Online (Sandbox Code Playgroud)
我想获得以下子字符串:
test, te{st2, te}st3
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望将所有内容都保留在双花括号内,包括单花括号。
我不能使用这种模式:
{{(.*)}}
Run Code Online (Sandbox Code Playgroud)
因为它匹配第一个 {{ 和最后一个 }} 之间的整个内容:
test}} asdhfj {{te{st2}} asdfasd {{te}st3
Run Code Online (Sandbox Code Playgroud)
我设法用这个正则表达式模式获得了前两个:
{{([^}]*)}}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用正则表达式获得所有三个?