浏览器是否跟踪活动setInterval
和setTimeout
ID?或者这完全由开发人员来跟踪?
如果它确实跟踪它们,是否可以通过BOM访问?
我有一个div
以编程方式添加的其他类.如何在不使用此setInterval
实现的情况下检测类名更改?
setInterval(function() {
var elem = document.getElementsByClassName('original')[0];
if (elem.classList.contains("added")) { detected(); }
}, 5500);
Run Code Online (Sandbox Code Playgroud)
MutationObserver?
我需要在一个间隔中刷新组件页面中的数据.此外,我需要在执行某些操作后刷新数据.我在服务中使用Obeservables,以便我可以在响应准备好时订阅.我正在推送对象的订阅,以便我可以清除它ngDestroy
,我认为,我有以下方法来实现相同的目标.
方法1:setInterval
我已经设置了一个间隔ngOnInit
,它将以相等的间隔调用refreshData.将使用clearInterval
in ngOnDestroy
方法清除interval对象.
export class MyComponent implements OnInit, OnDestroy {
private subscription: Subscription = new Subscription();
data: any;
interval: any;
ngOnInit() {
this.refreshData();
this.interval = setInterval(() => {
this.refreshData();
}, 5000);
}
ngOnDestroy() {
this.subscription.unsubscribe();
clearInterval(this.interval);
}
refreshData(){
this.subscription.add(
this.myService.getData()
.subscribe(data => {
this.data = data;
})
);
}
doAction(){
this.subscription.add(
this.myService.doAction()
.subscribe(result => {
if(result === true){
this.refreshData();
}
})
);
}
}
Run Code Online (Sandbox Code Playgroud)
Q1:在每次刷新调用时subscription
,都会向对象添加一个订阅,这会增加内存使用量,如果用户保持页面打开一段时间,浏览器可能会崩溃吗?
方法2:Observable.timer
此方法使用将在刷新数据后创建的计时器.
export class MyComponent …
Run Code Online (Sandbox Code Playgroud) memory-leaks subscriptions setinterval angular2-observables angular
为了练习,我试图显示一个从0 - 9递增,然后从9 - 0递减,并无限重复的数字.
我迄今似乎代码接近,但在第二次迭代中setInterval
的我2个各自函数的调用countUp
,并countDown
似乎彼此发生冲突,因为显示的数字没有在预期的顺序计数......然后浏览器崩溃.
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Algorithm Test</title>
</head>
<body onload = "onloadFunctions();">
<script type = "text/javascript">
function onloadFunctions()
{
countUp();
setInterval(countUp, 200);
}
var count = 0;
function countUp()
{
document.getElementById("here").innerHTML = count;
count++;
if(count == 10)
{
clearInterval(this);
countDown();
setInterval(countDown, 200);
}
}
function countDown()
{
document.getElementById("here").innerHTML = count;
count--;
if(count == 0)
{
clearInterval(this);
countUp();
setInterval(countUp, 200);
}
}
</script>
From 0 - 9, up and …
Run Code Online (Sandbox Code Playgroud) 我想在我的Javascript代码中添加一个小骰子滚动效果.我认为一个好方法是使用该setInterval()
方法.我的想法是遵循代码(仅用于测试):
function roleDice() {
var i = Math.floor((Math.random() * 25) + 5);
var j = i;
var test = setInterval(function(){
i--;
document.getElementById("dice").src = "./images/dice/dice" + Math.floor((Math.random() * 6) + 1) + ".png";
if(i < 1) {
clearInterval(test);
}
}, 50);
}
Run Code Online (Sandbox Code Playgroud)
现在我想等待setInterval,直到完成.所以我添加了一个setTimeout.
setTimeout(function(){alert("test")}, (j + 1) * 50);
Run Code Online (Sandbox Code Playgroud)
这段代码工作得很好.但在我的主代码中,该roleDice()
函数返回一个值.现在我不知道我怎么能处理那个...我无法从那里回来setTimeout()
.如果我在函数末尾添加一个返回值,则返回将提升为快速.有没有人有想法,我怎么能解决这个问题?
编辑 嗯,好吧,我明白回调剂量是什么,我想我知道它是如何工作的,但我仍然有问题.我认为这更像是一个"界面"问题......我的代码:
function startAnimation(playername, callback) {
var i = Math.floor((Math.random() * 25) + 5);
var int = setInterval(function() {
i--;
var number = Math.floor((Math.random() * …
Run Code Online (Sandbox Code Playgroud) n = 0;
var timer = setInterval(function() {
if (n == 0) {
console.log(new Date());
}
// execute some other code here
n++;
if (n == 1000) {
clearInterval(timer);
console.log(new Date());
}
}, 1);
Run Code Online (Sandbox Code Playgroud)
此代码在大约3-4秒内执行,具体取决于机器和浏览器.如何让它在1秒内完成?
就像标题所说的那样:setInterval
只会触发一次回调.
manifest.json的:
{
//...
"content_scripts" : [{
"js" : ["code.js"],
//...
}],
//...
}
Run Code Online (Sandbox Code Playgroud)
code.js(示例):
setInterval(alert('only shown once'),2000);
Run Code Online (Sandbox Code Playgroud)
为什么,以及我如何解决它?代码在扩展之外(甚至在小书签中)也能很好地工作.
javascript asynchronous google-chrome setinterval google-chrome-extension
假设我有setInterval(PostToServer, 1000);
.PostToServer
函数使ajax发布,可能需要超过一秒钟.那么接下来会发生什么:在第一次呼叫未完成或等待呼叫结束之前进行第二次呼叫,然后再制作新呼叫?
我试图找出如何使用moment.js显示动态日期和时间.
显然我无法理解正确使用setInterval.
如果可能的话我宁愿不使用jQuery作为moment.js也不需要它.
这是我到目前为止所拥有的:http://jsfiddle.net/37fLF/2/.
$(document).ready(function () {
var datetime = $('#datetime'),
date = moment(new Date()),
update = function(){
datetime.html(date.format('dddd, MMMM Do YYYY, h:mm:ss a'));
};
update();
setInterval(update, 1000);
});?
Run Code Online (Sandbox Code Playgroud) 今天我遇到了window.setInterval的一个有趣问题.当使用足够大的延迟(在这种情况下是30天内的毫秒数)时,它每秒执行一次而不是每30天执行一次.在最新的Chrome和Firefox中测试过.
window.setInterval(function() {
document.getElementById("first").innerHTML = new Date().toString();
}, 5000);
window.setInterval(function() {
document.getElementById("second").innerHTML = new Date().toString();
}, 2592000000);
Run Code Online (Sandbox Code Playgroud)
我在setInterval中找不到关于延迟最大值的任何权威文档,MDN文档没有提到任何内容.其他在线资料表明,延迟应该能够容纳任何带符号的32位整数.
window.setInterval中的delay参数是否具有最大值,它是什么?
setinterval ×10
javascript ×9
settimeout ×2
angular ×1
animation ×1
asynchronous ×1
counter ×1
html ×1
jquery ×1
loops ×1
memory-leaks ×1
momentjs ×1
wait ×1