Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript设置间隔/超时不工作_Javascript_Jquery_Html - Fatal编程技术网

Javascript设置间隔/超时不工作

Javascript设置间隔/超时不工作,javascript,jquery,html,Javascript,Jquery,Html,我正试图让一个计时器来键入文本,删除它,然后重复,在标题数组中循环。我可以让它写一次,但我对计时器的有限理解阻碍了我。这是我到目前为止所拥有的。在我将写逻辑放入它自己的方法之前,我可以从控制台手动调用writeText()插件,但现在它只工作一次。这里有一个 Lorem ipsum dolor sit amet,Concertetur Adipising //Javascript //要在标题中键入的文本的计数器和数组 可变磁头阵列=[ “互联网无法教你营销知识”, “我希望我在艺术学校学习”

我正试图让一个计时器来键入文本,删除它,然后重复,在标题数组中循环。我可以让它写一次,但我对计时器的有限理解阻碍了我。这是我到目前为止所拥有的。在我将写逻辑放入它自己的方法之前,我可以从控制台手动调用writeText()插件,但现在它只工作一次。这里有一个


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();