我在jQuery中使用JavaScript.我有以下脚本hi每隔30秒发出警报.
$(document).ready( function() {
alert("hi");
setInterval(function() {
alert("hi");
}, 30000);
});
Run Code Online (Sandbox Code Playgroud)
我希望hi在页面加载时(文档/页面完全加载时)和之后每30秒间隔(如hi(0s) - hi(30s) - hi(60s)等)发出警报.但我的解决方案适用于两个实例.一个在DOM准备好,另一个在循环中.有没有办法在单个实例中做同样的事情?
你可以在这里看到我的小提琴.
我有React Native应用程序,我从得到的数据API通过fetch。我创建了从API. 我需要每 5 秒重新渲染一次。为此,我将我的自定义钩子包装到 setInterval 并且在我的应用程序变得非常缓慢并且当我导航到另一个屏幕时我收到此错误:
无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
你能告诉我如何解决这个错误,哪种方法是最好的方法setInterval,因为我认为我的方法不好。
我的自定义钩子:
export const useFetch = url => {
const [state, setState] = useState({ data: null, error: false, loading: true })
useEffect(() => {
setInterval(() => {
setState(state => ({ data: state.data, error: false, loading: true }))
fetch(url)
.then(data => data.json())
.then(obj =>
Object.keys(obj).map(key => {
let newData = obj[key]
newData.key = key
return newData
})
)
.then(newData …Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery在几个元素上设置定时器或间隔循环,以便每隔几秒检查一次.我已经尝试设置一个计时器并检查我是否应该重新启动它,或者设置和间隔并检查是否应该停止它.
虽然简化了,但基本上我需要的是:
var mytimers = new Array();
$('div.items').each(function() {
myID = $(this).attr('id');
mytimers[myID] = setInterval( function() { myFunction(myID) } , 3000)
});
function myFunction(param) {
alert(param);
if (something()) {
clearInterval(mytimers[param]);
}
}
Run Code Online (Sandbox Code Playgroud)
类项目的ID是id_1,id_2,id_3.但我只得到3个提醒id_3.在我的代码中,我开始尝试传递'this',但一直在简化它以找出问题.
我怎样才能让它每次都将变量复制到一个新地址?我知道我需要使用闭包.它似乎是在引用其他var var mater是什么.
我尝试将它简化为一个带有定时器的循环:
function tester(item) {
return function() {
alert(item);
};
}
for(x=1;x<=3;x++) {
setTimeout( '(function() { tester(x) })(x)' , 3000);
}
Run Code Online (Sandbox Code Playgroud)
但我认为我只是让我的问题变得更糟,而且似乎没有做任何事情.
我已经搜索过以前的问题,但大多数都填充了大量的额外代码,而不是削减特定的问题,并以其他方式解决.通过让这个例子有效,我想了解这是如何工作的.在写这篇文章的过程中,我确实设法了解我可以通过帮助功能来启动计时器.
function tester(item)
alert(item);
function myTimer(item)
setInterval( function() { tester(item); }, 3000);
for(x=1;x<=3;x++)
myTimer(item);
Run Code Online (Sandbox Code Playgroud)
没有这个怎么办呢?有更好的方法吗?
我有一个自定义幻灯片对象来执行名称在网站上指示的常用内容.除非我在Chrome中切换标签并返回网站标签,否则一切正常.当发生这种情况时,幻灯片显示会变得疯狂并开始淡化图像而忽略setInterval给定的间隔.找不到与此相关的任何问题,所以我想至少知道代码或软件问题是否存在问题.
这是代码(与jQuery一起使用):
$(function() {
// slideshow
var slideshow = {
id : false,
current : 0,
count : 0,
interval : false,
init : function(data) {
if (!data)
return false;
$.each(data, $.proxy(
function(index, value) {
this[index] = data[index];
}, this)
);
this.count = this.images.length;
for (x=1;x<=this.count;x++)
$('#slider ul.nav').append('<li></li>');
$('#slider ul.nav li').live('click', function()
{
slideshow.click(this);
});
$('#slider ul.nav li:eq(0)').addClass('on');
$('#slider ul.nav').css('width', (15*this.count)+'px');
return true;
},
start : function () {
slideshow.id = setInterval(function() { slideshow.action(); }, slideshow.options.interval);
},
stop …Run Code Online (Sandbox Code Playgroud) 在NodeJS之上设置的ExpressJS中,我有一些像这样的代码:
app.get('/keys/readresults/:keyname', basic_auth, function(req,res){
res.writeHead(200, {'content-type': 'text/json'});
setInterval(
go_to_database_and_get('stuff', function (database_replies) {
res.write(database_replies)
})
,5000);
});
Run Code Online (Sandbox Code Playgroud)
代码是为了简单而编写的(如果有人想要真正的代码我很乐意将它发布在一些pastebin中).
当我正是我想要发生的事情时会发生什么:我得到一个200状态标题,它检查数据库是否有我想要的结果并将响应写回给我,然后等待5秒并在数据库中搜索新结果并写入再次响应,等等每隔5秒钟.curl -u username:password http://localhost:4000/keys/readresults/key
问题是,当我退出curl时,循环会一直持续下去.如果请求结束,我如何告诉express或nodejs应该结束该循环(我猜是否使用clearInterval)?
您好我正在使用此代码从另一个PHP文件加载内容.
$(document).ready(function(){
setInterval(function(){
$('.live-stream ul').each(function(){
$(this).load('tx.php');
});
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我希望脚本淡入每个"li"时添加新记录,任何人?
我想做的事情就像Facebook的家庭右上方的facebook的实时用户动作源
目前我正在使用角度js
我有一个get方法从default.html页面的服务器端获取数据
function bindActiveLoans() {
$http.get(rootUrlSingleEscaped + '/cooperativa/allunfundedloans/?authId=' + userInfo.UserId)
.success(function (response) {
if (response.Loans.length == 0) {
$scope.IsValues = false;
$scope.$apply();
return true;
}
$scope.IsValues = true;
$scope.unfundedLoans = response;
});
};
setInterval(function () {
$scope.$apply(bindActiveLoans());
}, 5000);
Run Code Online (Sandbox Code Playgroud)
上述功能有助于每5秒调用服务器端方法.这对我来说非常有用.
但我有一个问题.我有更多的页面,页面是
default2.html,default3.html,default4.html,default5.html.
如果我运行我的default.html页面,计时器每5秒运行一次,那么我将转到另一页,此时该计时器正在运行.我想只显示默认页面上运行的计时器.如果我转到另一页,那么计时器应该停止???
你知道吗?
当我转到另一个页面(default2.html,default3.html,default4.html,default5.html)页面时,如何在默认页面中停止计时器?
我想在默认页面中使用clearInterval
嗨,我想删除所有$interval在Angular中运行.在我的页面有很多$间隔和按钮点击我想删除所有间隔.我将如何做.
任何帮助表示赞赏.
我是React的新手,我正在尝试创建一个带有启动和停止按钮的简单秒表.我正在撞墙,试图通过"停止"按钮上的onClick事件来清除InterInterval.我会为setInterval声明一个变量,然后使用clearInterval清除它.不幸的是它不起作用.有小费吗?先感谢您.
import React, { Component } from 'react';
class App extends Component {
constructor(props){
super(props);
this.state = {time:0}
this.startHandler = this.startHandler.bind(this);
}
getSeconds(time){
return `0${time%60}`.slice(-2);
}
getMinutes(time){
return Math.floor(time/60);
}
startHandler() {
setInterval(()=>{
this.setState({time:this.state.time + 1});
},1000)
}
stopHandler() {
//HOW TO CLEAR INTERVAL HERE????
}
render () {
return (
<div>
<h1>{this.getMinutes(this.state.time)}:{this.getSeconds(this.state.time)}</h1>
<button onClick = {this.startHandler}>START</button>
<button onClick = {this.stopHandler}>STOP</button>
<button>RESET</button>
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud) 我需要遍历每个div .row来添加或删除具有CSS3 3D变换效果的翻转类.
当我使用jquery each()将这个添加/删除类应用于每个".row"时,所有div都会在同一时间添加或删除类".flip".我需要这个延迟,所以它看起来像多米诺骨牌效应.
知道如何让这个工作吗?或者如何逐个添加/删除翻转类?
这是我发现但它不起作用:
$('.row').each(function(i){
if($(this).hasClass('flip')){
$(this).delay(i*500).removeClass('flip');
}else{
$(this).delay(i*500).addClass('flip');
}
});
Run Code Online (Sandbox Code Playgroud) setinterval ×10
javascript ×7
jquery ×4
angularjs ×2
loops ×2
closures ×1
delay ×1
each ×1
express ×1
node.js ×1
react-hooks ×1
react-native ×1
reactjs ×1
timer ×1
use-effect ×1