代码之家  ›  专栏  ›  技术社区  ›  herondale

setTimeout在mobile safari上不间断工作?

  •  0
  • herondale  · 技术社区  · 7 年前
    $('.btn-activate').on('click touchstart', function() {
            $('.discount').each(function() {
                var $this = $(this);
                $({ countNum: parseInt($this.html())}).animate({
                        countNum: couponPercentage
                    },
                    {
                        duration: 1000,
                        easing:'linear',
                        step: function() {
                            $this.html(Math.floor(this.countNum) + '% OFF');
                        },
                        complete: function() {
                            $this.html(Math.floor(this.countNum) + '% OFF');
                            refreshIntervalId = setInterval(function() {
                                if ($this.css('visibility') == 'hidden') {
                                    $this.css('visibility', 'visible');
                                } else {
                                    $this.css('visibility', 'hidden');
                                }
                            }, 200);
    
                            setTimeout(function(){
                                clearInterval(refreshIntervalId);
                                if ($this.css('visibility') == 'hidden') {
                                    $this.css('visibility', 'visible');
                                }
                            }, 2000);
                        }
                    });
            });
        })
    

    complete 块,尝试实现闪烁动画。这很有效,但在Safari Mobile上有时 setTimeout 似乎不起作用,因为闪烁的动画不会停止。

    1 回复  |  直到 7 年前
        1
  •  0
  •   herondale    7 年前

    显然这和使用 .on('click touchstart',...)

    当用户点击按钮时,会发生某种双重触发。删除多余的 touchstart ,我再也不能复制了。