我认为这些术语可以互换使用,作为DOM的全局环境.有什么区别(如果有的话)我应该何时使用每一个?
我setInterval每秒运行一段代码30次.这很好用,但是当我选择另一个选项卡(以便我的代码的选项卡变为非活动状态)时,由于setInterval某种原因将其设置为空闲状态.
我做了这个简化的测试用例(http://jsfiddle.net/7f6DX/3/):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Run Code Online (Sandbox Code Playgroud)
如果您运行此代码然后切换到另一个选项卡,等待几秒钟然后返回,动画将继续在您切换到另一个选项卡时的位置.因此,如果选项卡处于非活动状态,则动画不会每秒运行30次.这可以通过计算setInterval每秒调用函数的次数来确认- 如果选项卡处于非活动状态,则不会是30,而只是1或2.
我想这是通过设计完成的,以提高性能,但有没有办法禁用这种行为?在我的场景中,它实际上是一个缺点.
请考虑以下网页:
<html>
<body onscroll="alert('body scroll event')">
<div style='width:200px;height:200px;overflow:auto' onscroll="alert('div scroll event')">
<div style='height:400px'>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这个html创建一个带滚动条的div.如果移动滚动条,则会触发div元素上的"onscroll"事件.但是,身体上的"onscroll"事件不会被触发.这是预期的,因为W3C声明元素onscroll事件不会"冒泡".
但是,我正在开发一个客户端Web框架,只要滚动页面的任何元素上的滚动条,就需要知道它.如果"onscroll"冒泡,这很容易做到,但不幸的是,它没有.有没有其他方法可以检测整个页面上的onscroll事件?(现在我主要关注Webkit,所以特定于Webkit的解决方案会很好......)
以下是我尝试过的一些事情:1.捕获DOMAttrModified(似乎不会触发移动滚动条.)2.使用DOM Observers(似乎也不会触发滚动条)3.更改"onscroll"事件类型泡沫(似乎不可能)
似乎全局捕获onscroll事件的唯一方法是将onscroll事件附加到可能滚动的每个元素,这非常难看并且会损害我的框架的性能.
谁知道更好的方法?
提前致谢!
我想在我的IndexedDB的objectstore中保存约35000个对象.我使用下面的代码插入.
AddListings = function (x2j_list_new, callback) {
var transaction = db.transaction(["listings"], IDBTransaction.READ_WRITE);
var count = 0;
transaction.oncomplete = function (event) {
if (callback) {
console.log('x2jShowListing Added ' + count + '/' + x2j_list_new.length);
callback([count, x2j_list_new.length]);
}
};
transaction.onerror = function (e) {
console.log("myError: ", e);
if (callback) {
callback(false);
}
};
var store = transaction.objectStore("listings");
$.each(x2j_list_new, function (index0, item0) {
var request = store.put(item0);
request.onsuccess = function (event) {
count++;
// event.target.result
};
});
});
};
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但循环和插入约35000个对象使UI无响应约200秒.我想也许我可以使用WebWorkers,但是WebWorkers中没有IndexedDB.我试图找到批量插入的方法,找不到一个.有关如何在不阻止UI的情况下插入大量对象的任何想法?
我有反应应用程序与渲染多个组件的多个路由。如何检查所有页面的用户不活动状态。如果用户在任何页面中不活动的时间超过 5 分钟,我希望执行一个执行某些操作的函数,如果用户执行一些活动,例如单击、输入等,则不活动时间应重置回 5 分钟。
研究了这些答案但无法做到。
可以仅使用普通 Javascript 而不使用任何软件包来完成吗?
提前致谢 !
我的要求有点复杂.用户使用Web浏览器访问数据库,如果用户关闭活动页面而不是注销会话,则访问数据库 - 该会话需要自动注销.有人可以指导我如何做到这一点?我使用jquery - 在母版页中.
onbeforeunload - 我收到消息离开页面或留在此页面.即使我在登录时收到此消息,也查看主页.
在快速会话中是否有内置功能,以便在给定的不活动时间后启用自动注销?我正在使用它如下所示,如果会话处于非活动状态半小时,则希望它注销.
app.use(session({
key: 'sessid',
secret: 'This is secret',
resave: true,
saveUninitialized: true,
store: new RedisStore(redisOptions),
cookie: {
path: '/',
httpOnly: true,
secure: false,
maxAge: 24 * 60 * 60 * 1000,
signed: false
}
}))
Run Code Online (Sandbox Code Playgroud) I'm having a problem with an inactivity check for my website. I've found a code sample on StackOverflow on how to do a simple inactivity check. And this works
var inactivityTime = function () {
var t;
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;
function logout() {
location.href = 'logout.aspx'
}
function resetTimer() {
clearTimeout(t);
t = setTimeout(logout, 1000 * 60 * 1);
}
};Run Code Online (Sandbox Code Playgroud)
Since I'm doing typescript, I rewrote the code into a class. The inactivity …
Facebook如何检测你的离开状态(你知道,聊天窗口中的半月)吗?如果一个人离开您的页面,即使它在浏览器中打开,您如何检查Javascript?你认为有没有图书馆已经做到了吗?
我遇到的问题是一个搜索功能,doSearch()在用户在我的$("input#q)字段中停止键入至少100毫秒之后应该调用我的方法.
我试图通过使用这个答案的逻辑来实现这一目标,但我仍然坚持我应该设置/取消设置的setInterval()增量idleTime.
var idleTime = 0;
$("input#q").keyup(function() {
idleTime = 0;
idleInterval = setInterval(function() {
idleTimeIncrement();
}, 25);
});
function idleTimeIncrement() {
idleTime += 25;
if (idleTime >= 100) {
doSearch($("input#q").val());
}
}
Run Code Online (Sandbox Code Playgroud)
我在Firebug Console中遇到的错误说:
递归太多了.
所以我想我的代码中有一个无限循环... ;-)
我看到很多这样的代码:
var myApp ={};
(function() {
console.log("Hello");
this.var1 = "mark"; //"this" is global, because it runs immediately on load. Caller is global
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
})();
Run Code Online (Sandbox Code Playgroud)
这会导致匿名函数立即执行。但与仅仅将代码内联相比,这样做有什么好处呢?
var myApp ={};
console.log("Hello");
var1 = "mark";
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
Run Code Online (Sandbox Code Playgroud)
显然这与函数的作用域有关,但由于该函数是匿名的并且由窗口调用,因此它的作用域(即this)是全局的,不是吗?
我正在尝试创建一个 wordpress 页面,在一段时间后将您注销而没有任何活动。现在我只是在测试“检测不活动并做某事”的一部分(关键部分)。我在这里找到了一些部分有效的代码;这是代码:
<script>
var timeout;
document.onmousemove = function(){
clearTimeout(timeout);
timeout = setTimeout(function(){alert("move your mouse");}, 10000);
}
</script>
Run Code Online (Sandbox Code Playgroud)
现在设置为每 10 秒发送一次警报,这样我就可以立即看到它正在工作(以后会更长)。反正; 当我在页面上运行它时,它什么也不做。我可以在那里坐 5 分钟,什么也没有发生。但是,如果我将该选项卡留在浏览器中,它会立即开始工作,并在没有应有活动的情况下每 10 秒发送一次警报。
但是如果我只是坐在那个页面上什么都不做,整个功能就不起作用。有人能帮忙吗?谢谢...
当用户在页面不活动 30 秒后按下刷新时,此代码可以完美运行,但我需要一些代码来自动销毁 sassion 并在页面不活动 30 秒后刷新页面。
<?php
$inactive = 30;
ini_set('session.gc_maxlifetime', $inactive);
session_start();
if (isset($_SESSION['testing']) && time() - $_SESSION['testing'] > $inactive) {
session_unset(); // unset $_SESSION variable for this page
session_destroy(); // destroy session data
echo "<br><br>Sorry, you can't go any further!!!";
echo "<br>Please log in.";
echo "<br/><a href='index.php'>Go back to login page</a>";
}else{
//Here is some code to do when the session is still active
}
$_SESSION['testing'] = time();
?>
Run Code Online (Sandbox Code Playgroud) javascript ×10
.net ×1
asp.net ×1
dom ×1
express ×1
facebook ×1
idle-timer ×1
iife ×1
indexeddb ×1
jquery ×1
node.js ×1
page-refresh ×1
php ×1
reactjs ×1
scroll ×1
session ×1
setinterval ×1
typescript ×1
user-input ×1