javascript - jQuery 动画被覆盖

标签 javascript jquery animation

我定义了一个 jQuery 函数“countTo”,它应该采用整数值并将 jQuery 对象的 html 动画设置为指定值。

jQuery.fn.extend({
    countTo:function(x){
        $this = $(this);
        var start = parseInt($this.html()) || 0;
        $({count:start}).animate({count:x},{
            step:function(val) {
                $this.html(Math.floor(val));
            }
        });
    }
});

如果我一次只在一个元素上使用它,它会起作用,但如果我尝试为 2 个元素设置动画,则第一个元素上的动画会在第二次调用后立即停止,例如:

$("#div1").countTo(100);
$("#div2").countTo(100);
//only div2 is changed, div1 remains unchanged

我在这里做错了什么?我该如何修复它?

最佳答案

您正在创建一个全局变量 $this,该变量在第二次调用中被覆盖,您需要使用 var 将其设为本地变量。

此外,如果您想在一次调用中支持多个变量,则需要迭代当前 jQuery 对象中的每个项目并执行类似的动画

jQuery.fn.extend({
  countTo: function(x) {
    return this.each(function() {
      var $this = $(this);
      var start = parseInt($this.html()) || 0;
      $({
        count: start
      }).animate({
        count: x
      }, {
        step: function(val) {
          $this.html(Math.floor(val));
        }
      });
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="div1"></div>
<div id="div2"></div>

关于javascript - jQuery 动画被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31422107/

相关文章:

javascript - Totaljs websocket 模块与 socket.io

javascript - polymer 火母元

javascript - 变量没有被正确分配,可能的范围问题(在 getJSON() 中的 each() 中有一个开关的函数)

javascript - 关闭下拉菜单时将 div 移回原始位置

ios - 我可以使用 PNG 序列作为 SceneKit 对象上的动画 Material 吗?

javascript - 模态框无法正常工作

javascript - 如何从 Angular 中的动态 key 对值获取数据

Javascript:如果单击则播放/暂停并更改 src

javascript - 添加新的 DOM 子元素时显示动画

python - Matplotlib 动画 : vertical cursor line through subplots