【问题标题】:Simulating typing with jQuery, pausing or lengthening the setInterval function用 jQuery 模拟打字,暂停或延长 setInterval 函数
【发布时间】:2016-03-13 08:37:37
【问题描述】:

所以我想制作一个 jQuery 应用程序,其中文本在屏幕上被动画化,看起来好像有人在输入什么东西。我以最简单的形式实现了这一点。

HTML

<p></p>

jQuery

$(document).ready(function() {
    var p = $('p');
    p.text('');


    window.setInterval(function(){
        inc(p);
    }, 100);

});

var i = 0;

function inc(p)
{

    var text = "Hey... This is just a test";
    p.append(text.charAt(i));
    i++;
}

我想知道的是,在“嘿……”之后我怎么可能告诉函数停止 2 秒?或者我想要的任何数量。

我有一个想法,但它非常低效且“蹩脚”,那就是添加尽可能多的空格以在 2 秒内不打印任何内容,然后将字符串替换为空格之前的所有内容并继续追加。

这太糟糕了,我想要一种更好的方法。任何人都可以给我任何建议吗? setInterval 是正确的函数还是我应该使用 setTimeout?

Here's 我的代码的小提琴。

感谢任何帮助或建议,非常感谢。

【问题讨论】:

  • 我没听懂,你想在 2 秒后重新加载你的函数吗?
  • 所以,假设我有一个字符串“嘿...这只是一个测试”,我希望能够做一些类似的事情,“”嘿... [暂停:2s] 这个只是一个测试”,然后我可以在附加任何内容之前运行一个 if 语句,并使用正则表达式检查要暂停多少秒,然后在该时间过去之后,我继续附加 @shayanypn

标签: jquery animation settimeout


【解决方案1】:

我想有更好的方法可以做到这一点,但我正在发布我的工作答案。

我在你的inc 函数中用setTimeout 替换了你的setInterval。所以它现在是递归的。

您可以通过检查索引来更改键入某个字符时的间隔。

编辑:

在 OP 评论之后,我更改了答案,因此您可以使用拥抱在文本内设置延迟。

$(document).ready(function() {
    var p = $('p');
    p.text('');

    inc(p);
});

var i = 0;
var j = 0;

function inc(p) {
  var interval = 0.1;
  var text = "Hey... {2} This is a {1} test";
  var array = text.split(/[\{\}]/); // Split on embraces
  
  if (i < array.length) {
    p.append(array[i].charAt(j));
    
    if (j == array[i].length -1 && typeof array[i + 1] !== "undefined") {
      interval = array[i + 1];
      i += 2;
      j = 0;
    }
    
    j++;
    setTimeout(function () { inc(p); }, interval*1000);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p></p>

【讨论】:

  • 我在上面的答案上发表了这条评论,但我也有同样的担忧,所以我会在这里粘贴“我想如果我有多个等待点,我会创建一个数组,但我没有'不想每次我想暂停时都索引,无论如何我可以通过检查字符串中的一个特殊字符串来做到这一点,比如“嘿.. [pause:2s] 这是一个测试”,当它读取 '[' 它看看我告诉它等待多少秒?” 我希望这是有道理的,所以我可能想要这个“嘿... [pause:2s] 这是一个测试。[pause:4s] 大家好”并暂停分别为2s和4s
  • @SamirChahine 我编辑了我的代码。您现在应该可以执行 "Hey... {2} test" 来暂停 2 秒。告诉我这是否适合你。
  • 它适用于“运行代码 sn-p”,但是当我将它添加到小提琴时它没有显示? jsfiddle.net/0puzwygf/5
  • 看起来 jsfiddle 遇到了一些麻烦......它在 Codepen 上运行良好
  • @SamirChahine 很高兴。请注意,结束拥抱后的第一个字符被删除(我不知道为什么......我不是正则表达式之神,所以这可能是一个线索)。一定要在结束拥抱后留出一个空格,这样你就可以保留你的文字。
【解决方案2】:

试试这个,jsFiddle

$(document).ready(function() {
    var $p = $('p');
    $p.text('');
    waitFun($p);  
});
var timer;
var wait_time=2000;
var wait_point=7;
var count=0;
function waitFun($p){
  clearTimeout(timer);
    timer = window.setTimeout(function(){
  var text = "Hey... This is just a test";
    $p.append(text.charAt(count));
    count++;
  if(text.length == count) {return false} //avoid of infinte loop

  if(count == wait_point){
    window.setTimeout(function(){
        waitFun($p);
    },wait_time);
  }else{
  waitFun($p);
  }

  },100);

}

【讨论】:

  • 我想如果我有多个等待点,我会创建一个数组,但我不想每次我想暂停时都索引,无论如何我可以通过检查一个特殊的来做到这一点字符串中的字符串,例如“Hey.. [pause:2s] this is a test”,当它读取 '[' 时,它可以看到我告诉它等待多少秒?
猜你喜欢
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多