iPad 上的 Javascript : typewriting effect shuffles chars when idling the tab

标签 javascript ipad settimeout

我制作了一个可以创建打字效果的小插件:

$.fn.typewriter = function(options) {
    var $this = this,
        defaults = {
            text: "",
            animationDelay: 70,
            callback: null,
            callbackData: null
        },
        settings = $.extend(defaults, options);

    $.each(settings.text.split(''), function (i, letter) {
        setTimeout(function() {
            $this.text($this.text() + letter);

            if(i === settings.text.length - 1) {
                settings.callback(settings.callbackData);
            }

        }, settings.animationDelay * i);
    });
};

效果很好,但在 iPad 上,当效果正在进行时,我更改选项卡并稍后返回,在此空闲时间打印的所有字母都随机打乱。这不会发生在桌面上。

我猜想这与我在闲置选项卡时 javascript 执行的闲置有关。而且它似乎与浏览器无关。所以我猜测 iPad 以某种方式同时执行所有空闲的 setTimeouts。?是否有一些解决方法仍能以正确的顺序获取字母?

JSFIDDLE

最佳答案

更改为 setInterval 似乎可以解决问题:

$.fn.typewriter = function(options) {
    var $this = this,
        defaults = {
            text: "",
            animationDelay: 70,
            callback: null,
            callbackData: null
        },
        settings = $.extend(defaults, options),
        timer;

    settings.text= settings.text.split('');
    timer= setInterval(function() {
      $this.append(settings.text[0]);
      settings.text.shift();
      if(!settings.text.length) {
        clearInterval(timer);
        if(settings.callback) {
          settings.callback(settings.callbackData);
        }
      }
    }, settings.animationDelay);
};

Fiddle

关于iPad 上的 Javascript : typewriting effect shuffles chars when idling the tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33691169/

相关文章:

javascript - 当用户访问网站时,是否可以使用 Service Worker 显示通知?

iphone - 从核心数据中获取时, float 变为 0.0000

javascript - 我可以在一个 setInterval 中插入多个 setTimeouts 吗?

javascript - "console.log("var : "+ var)"? 的简写

javascript - 如果在 RxJs WebSocketSubject 中连接则获取事件

javascript - GraphQL:在同一查询中使用输入类型及其字段之一

ios - UIPageViewController 在旋转时不调整其 subview Controller 的大小

iphone - 为什么从 Nib 加载的 View 被放置在状态栏下方 20 像素处?

Javascript:使用 setTimeout 重试的函数

javascript - Handlebars.js:渲染大数据而不阻塞 UI – 使用 setTimeout() 延迟或延迟加载?