我有定期执行活动的JavaScript.当用户没有看到该站点时(即窗口或选项卡没有焦点),最好不要运行.
有没有办法使用JavaScript?
我的参考点:如果您使用的窗口未处于活动状态,则Gmail聊天会播放声音.
我在页面上有一堆长时间运行的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服务器上的静态页面进行测试(或使用下面的链接).
为方便起见,我已将上面的代码部署 …
可能重复:
检测浏览器选项卡是否具有焦点
我有一个简单的Java小程序,可以捕获客户端的屏幕.借助一段javascript代码,我可以调用applet并捕获活动的屏幕图片.
但是,即使它仅通过单击按钮捕获活动屏幕,用户也可能通过在捕获过程中使用ALT TAB切换到其他选项卡来操纵该过程.我想确保只有在加载页面并关注页面时才能进行捕获.
到目前为止,我发现这段javascript代码似乎无法正常工作.即使页面最小化,有时也会卡在焦点上.
<script language="javascript">
window.onpageshow = function(e) { console.log('pageshow'); };
window.onfocus = function(e) { console.log('focus'); };
</script>
Run Code Online (Sandbox Code Playgroud)
那么有什么建议我想要实现的目标或任何其他解决方案.
我的主页顶部有一个CSS3动画,会在页面加载后立即启动.问题是如果用户在新选项卡中打开该页面但是没有立即查看它,即使他们没有查看该页面也会播放动画.
有没有办法只在用户拥有该页面的视图后才能启动动画?
有点像在另一个隐藏选项卡中打开YouTube视频时,如果打开该选项卡,它将无法自动播放.如果您在新选项卡中打开笔,它也会执行相同的操作,直到您查看该选项卡时它才会启动
我正在开发一个可以在不同选项卡中打开的AngularJS webapp,我想知道哪个是检测用户何时在其中一个选项卡中注销的最佳方法; 我想在其他选项卡中弹出一个登录模式窗口.我正在考虑使用服务器发送的事件或跟踪我的服务器cookie的存在.我从来没有做过这样的事情,所以我问的是我的选择有哪些优缺点,或者我是否缺少其他更聪明的方法.
编辑:在服务器上我有ServiceStack(C#)支持Server-Sent Events开箱即用
我有一个在控制器上运行的Web应用程序(几乎没有限制的处理,内存和网络带宽).该页面基本上是一个充满LED的简单HTML文件,应该按间隔更新.在每个时间间隔,Javascript向服务器发送Ajax请求,并根据回复更新所有LED.现在这个工作正常!
问题是当用户打开其中一个页面并开始浏览其他内容时.出于安全性和经济原因,我们不希望在客户端未看到此页面时更新页面.这是算法:
我开发了这个小测试代码,看看页面事件是如何工作的(参见jsFiddle上的直播):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function m(msg){
document.getElementById("logplace").innerHTML+=msg+"<br/>";
}
</script>
</head>
<body onblur="m('Blur')" onerror="m('Error')" onfocus="m('Focus')" onload="m('Load')" onresize="m('Resize')" onunload="m('Unload')">
<span id="logplace"></span>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我需要页面才能在用户当前正在查看时才更新.我搜索了Stackoverflow,以下线程似乎不是答案:
PS.JQuery也存在于服务器上.但如果有一种更简单的方法,我宁愿不使用JQuery.
我有这个代码
$(document).ready(function(){
var fade_in = function(){
$(".quote").fadeIn();
}
setTimeout(fade_in, 2000);
var fade_out = function() {
$(".quote").fadeOut();
}
setTimeout(fade_out, 10000);
});
Run Code Online (Sandbox Code Playgroud)
它的作用是div"引用"慢慢淡入,停留几秒然后淡出.我想要的是所有这一切都发生在用户在页面上,如果你不在页面中,文本淡入淡出,淡出而你错过它.我怎样才能做到这一点?
我为移动webapp构建了一个简单的基于JavaScript的计时器; 为了举例:
var a = 0;
setInterval(function() {
console.log('a', a);
a++;
}, 1000);
Run Code Online (Sandbox Code Playgroud)
这在Mobile Safari和Android Browser中运行良好.它将每秒登录到控制台并相应地增加a的值.(好吧,Android浏览器没有console.log支持,但让我们假设它.)
问题:如果屏幕超时(即用户停止与页面交互),则setInterval函数暂停.当用户再次打开屏幕时,它会恢复.这对我不起作用,因为我需要计时器才能继续运行.
问题:有没有办法阻止setInterval函数在屏幕超时时暂停?如果没有,是否可以防止屏幕超时?还有其他选择吗?
提前致谢!
javascript mobile-safari setinterval mobile-website android-browser
在我们的 web 应用程序中,我们有一个 baseTemplate.xhtml,我的应用程序的每个页面都使用这个模板。这个 baseTemplate.xhtml 具有处理空闲监视器的功能。
问题/问题:
如果用户打开多个选项卡并且一个选项卡处于活动状态,但另一个选项卡在指定的会话超时值内空闲,则用户将被注销。
要求:
我希望如果用户打开多个选项卡并且其中一个选项卡处于活动状态,空闲监视器不应注销。
<h:form>
<p:confirmDialog id="confirmDialog"
message="Please click Ok before the timer runs out: "
header="Are you there?"
severity="alert"
closable="false"
widgetVar="idleDialog">
<p:commandButton id="confirm"
value="Ok"
process="@this"
onclick="clearTimeout(window.logoffTimeoutId); PF('idleDialog').hide();"/>
</p:confirmDialog>
<p:remoteCommand name="terminateIdleSession"
actionListener="#{idleMonitorView.onIdle}"
process="@this"
out="count"/>
<p:idleMonitor timeout="#{5 * 60 * 1000}"
onidle="startTimer()"/>
</h:form>
<script type="text/javascript">
//<![CDATA[
function startTimer() {
clearTimeout(window.logoffUpdaterId);
PF('idleDialog').show();
// Set timeout to 2 minutes
var timeout = 2 * 60 * 1000;
// Calculate when the time runs out
window.logoffTime = new …
Run Code Online (Sandbox Code Playgroud) javascript ×8
jquery ×4
angularjs ×1
animation ×1
browser ×1
browser-tab ×1
css ×1
css3 ×1
focus ×1
html ×1
html5 ×1
jsf ×1
primefaces ×1
session ×1
setinterval ×1
tabs ×1
window ×1