在 jquery 中每次点击都会启动新动画

Launch new animation with every click in jquery

我正在尝试使用 JS 创建简单的唱首歌游戏,我想为我的游戏添加一些动画。 每次单击按钮时,一点“$+1”应该动画到顶部并淡出。它可以工作,但只能单击一次。

$("#clicker").click(function(){
 $("#fading_dolar").css("display","block");
 $("#fading_dolar").animate({
  bottom: "120px",
  opacity: 0
 }, {duration:1000, queue: false});

 $("#fading_dolar").css({
  "opacity": "1",
  "bottom:": "60px"
 });


});
<button id="clicker" onclick="click_f()">Click!</button>
 <center><span id="fading_dolar">+</span></center>

您想要的效果不是很清楚,但是您的代码片段中有几个错误:

  1. 您没有包含 jQuery。
  2. 您从不存在的标记中附加了点击事件的处理程序(并且不需要,因为您是从代码中附加事件)。
  3. 您的代码首先将动画设置为 0 部分,然后设置初始状态(不透明度 1)。
  4. 你真的不需要每次都设置显示属性。

试试这个修复 fiddle

$("#clicker").click(function(){
 $("#fading_dolar").css({
  bottom: "0px",
  opacity: 1
 }); $("#fading_dolar").animate({
  bottom: "120px",
  opacity: 0
 }, {duration:1000, queue: false});
});
#fading_dolar {
  display: block;
  position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="clicker">Click!</button>
<center><span id="fading_dolar">+</span></center>

编辑: 还有一些其他错误/错误。 "bottom:": 是错误的,你应该从 0px 开始 "start again",而不是 60px。还将基本样式移动到 CSS(无需代码),并添加了所需的 "position: relative" 属性。

您需要输入:

$("#fading_dolar").css({
    "opacity": "1",
    "bottom:": "60px"
});

complete 选项中,因为这是动画完成后要调用的函数。请参阅 jQuery 关于 animate 的文档。

您的代码应该是:

$("#clicker").click(function(){
    $("#fading_dolar").css("display","block");
    $("#fading_dolar").animate({
        bottom: "120px",
        opacity: 0
    }, {duration:1000, queue: false, complete: function(){
        $("#fading_dolar").css({
            "opacity": "1",
            "bottom:": "60px"
        });
    }});
});

DEMO

您应该使用回调函数和 .stop() 而不是 queue: false:

$("#clicker").click(function(){
    $("#fading_dolar").css("display","block");
    $("#fading_dolar").stop().animate({
        bottom: "120px",
        opacity: 0
    }, 1000, function() {
      $("#fading_dolar").css({
          "opacity": "1",
          "bottom:": "60px"
      });
    });   
});

尝试将 #fading_dolarcss bottom 重置为 complete .animate()

0px

$("#clicker").click(function() {
  var el = $("#fading_dolar");
  el.finish().css("opacity", 1).animate({
    bottom: "120px",
    opacity: 0
  }, {
    duration: 1000,
    queue: false,
    complete:function() {
      $(this).css("bottom", "0px")
    }
  });


});
#fading_dolar {
  display: block;
  position: relative;
  bottom: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="clicker">Click!</button>
<center><span id="fading_dolar">+</span>
</center>