Javascript设置间隔/超时不工作
我正试图让一个计时器来键入文本,删除它,然后重复,在标题数组中循环。我可以让它写一次,但我对计时器的有限理解阻碍了我。这是我到目前为止所拥有的。在我将写逻辑放入它自己的方法之前,我可以从控制台手动调用writeText()插件,但现在它只工作一次。这里有一个Javascript设置间隔/超时不工作,javascript,jquery,html,Javascript,Jquery,Html,我正试图让一个计时器来键入文本,删除它,然后重复,在标题数组中循环。我可以让它写一次,但我对计时器的有限理解阻碍了我。这是我到目前为止所拥有的。在我将写逻辑放入它自己的方法之前,我可以从控制台手动调用writeText()插件,但现在它只工作一次。这里有一个 Lorem ipsum dolor sit amet,Concertetur Adipising //Javascript //要在标题中键入的文本的计数器和数组 可变磁头阵列=[ “互联网无法教你营销知识”, “我希望我在艺术学校学习”
Lorem ipsum dolor sit amet,Concertetur Adipising
//Javascript
//要在标题中键入的文本的计数器和数组
可变磁头阵列=[
“互联网无法教你营销知识”,
“我希望我在艺术学校学习”,
“每一家成功的初创公司最终都会成功”
],
headerCounter=0,
//headerContainer=$('.holder h1 span'),
headerContainer=document.querySelector(“#游标”).previousElementSibling;
//函数来键入文本
函数类型文本(i){
$('.holder h1 span').text('').writeText(headerArray[i]);
headerCounter++;
if(磁头计数器>=磁头阵列长度){
headerCounter=0;
}
}
$(函数(){
//淡入淡出光标
setInterval(函数(){
$('光标').fadeToggle(400);
}, 400);
//调用函数来键入文本
设置间隔(键入文本(表头计数器),5000);
});
//像打字机一样写出文本的插件
(函数($){
$.fn.writeText=函数(内容){
var contentArray=content.split(“”),
电流=0,
elem=这个;
setInterval(函数(){
if(当前
为了扩展cookie monster所说的内容,之所以setInterval
没有达到预期效果,是因为setInterval
的第一个参数应该是一个函数,但是对typeText(headerCounter)
的调用不会返回函数。我猜您的意思是,typeText
是每隔一段时间调用的函数。如果是这样,则不使用此选项:
setInterval(typeText(headerCounter), 5000);
你应该这样做:
setInterval(typeText, 5000);
当然,这会导致函数typeText
失败。快速而肮脏的修复方法是删除参数声明并使用全局作为索引:
function typeText() {
$('.holder h1 span').text('').writeText(headerArray[headerCounter]);
...
全局变量的弊病超出了您的问题范围,因此我将简单地指出,您可以通过闭包来实现这一点,并避免使用全局变量。这里是一个对代码进行一些编辑的“小提琴”:
html:
asdf
|
js:
//要在标题中键入的文本的计数器和数组
可变磁头阵列=[
“互联网无法教你营销知识”,
“我希望我在艺术学校学习”,
“每一家成功的创业公司最终都会这样”],
headerCounter=0;
//像打字机一样写出文本的插件
(函数($){
$.fn.writeText=函数(内容,完成回调){
var contentArray=content.split(“”),
电流=0,
elem=这个,
间隔柄;
intervalHandle=setInterval(函数(){
if(当前=磁头阵列长度){
headerCounter=0;
}
$('#header').text('').writeText(text,waitThenTypeNext);
}
函数waitThenTypeNext(){
设置超时(typeNext,2000);
}
//开始吧。
typeNext();
首先,这是不对的:setInterval(typeText(headerCounter),5000)
您需要将函数传递给setInterval
。而是立即调用它并传递未定义的返回值。@se_puede_dev同意cookie_monster。检查
function typeText() {
$('.holder h1 span').text('').writeText(headerArray[headerCounter]);
...
<h1>
<span id="header">asdf</span>
<span id="cursor">|</span>
</h1>
// counter and array of text to type in the header
var headerArray = [
"The Internet can't teach you about marketing",
"I wish I learned in art school",
"Every Successful Startup Eventually Does"],
headerCounter = 0;
// plugin that writes out the text like a typewriter
(function ($) {
$.fn.writeText = function (content, finishedCallback) {
var contentArray = content.split(""),
current = 0,
elem = this,
intervalHandle;
intervalHandle = setInterval(function () {
if (current < contentArray.length) {
elem.text(elem.text() + contentArray[current++]);
} else {
// dispose the interval.
clearInterval(intervalHandle);
finishedCallback();
}
}, 50);
};
})(jQuery);
// fades cursor in and out
setInterval(function () {
$('#cursor').fadeToggle(400);
}, 400);
// function to type the text
function typeNext() {
var text = headerArray[headerCounter];
headerCounter++;
if (headerCounter >= headerArray.length) {
headerCounter = 0;
}
$('#header').text('').writeText(text, waitThenTypeNext);
}
function waitThenTypeNext() {
setTimeout(typeNext, 2000);
}
// get things started.
typeNext();