理解jQuery事件背后的逻辑

时间:2017-05-02 17:43:09

标签: javascript jquery

我在StackOverFlow中找不到任何这样的问题(如果我错过了,请原谅我!)。

下面的代码搞砸了我。请注意,这是为了恢复/暂停动画。

$(function() {
    $('.slider').css("animation-play-state", "running");
    var animVar = $('.slider').css("animation-play-state"); //animVar === "running" and on next click, it gets updated to "paused"
    $('.slider').click(function() {
            $(this).css("animation-play-state", function() {
                if (animVar === "running") {
                    return "paused"; //returns "paused" to the function and the css property gets updated, overriding the one at the first line, changing the animVar on the next line.
                    } else {
                    return "running"; //returns "running" to the function and the css property gets updated, overriding the one at the first line, changing the animVar on the next line.
                }   
            }); 
    }); 
});

问题是,如果我不在if / else语句中更新animVar,则代码无法正常工作。相反的是,一旦我点击它,它会暂停,并且在连续点击后,它不会恢复。

但是如果我在{/ 1}}之类的if / else语句中更新animVar,它可以正常工作。

我的问题是,首先我将动画播放状态设置为“正在运行”。

将animVar设置为'running'。

满足if条件且动画按预期“暂停”。

但是这也应该覆盖顶部的animVar = "running"/"paused"并将animVar重置为'paused',以便在下次单击时,不满足if条件并执行else语句,从而切换游戏在点击之间运行和暂停之间的状态。

显然,我的逻辑在某处出错了。有人可以让我明白吗?我的意思是,内部函数是一个闭包,所以它应该能够访问和更新外部函数的变量,对吗?

这是另一回事。如果每次点击,浏览器都会从顶部读取它,因此,每次将播放状态重置为“正在运行”,如果/ else工作,如何更新animVar?每次浏览器重新读取整个函数时,它都会被覆盖。

请帮帮我。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,你试图在"运行"之间切换。和"暂停"作为动画播放状态属性的值?

见下文。



$(function() {
  $(".slider").click(function() {
    var sliderClass = $(".slider").css("animation-play-state");
    if(sliderClass == "running") {
      $('.slider').css("animation-play-state", "paused");
      console.log("running");
    } else {
      $(".slider").css("animation-play-state", "running");
      console.log("paused");
    }
  })
});

.slider {
animation-play-state: running; 
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="slider"> hallo </div>
&#13;
&#13;
&#13;