【问题标题】:Jquery animation on click点击时的 Jquery 动画
【发布时间】:2015-11-07 20:48:41
【问题描述】:

单击按钮时,我调用了几个动画。我想切换这些动画,以便元素在第二次单击时返回到它们的起始位置。

这是我的脚本:

$("span.click").click(function() {
  $(".map").animate(
    {"opacity": "1"}, 200);
});

$("span.click").click(function() {
  $(".navigation").animate(
    {"bottom": "-100px"}, 200);
});

$("span.click").click(function() {
  $(".click").animate(
    {"bottom": "150px"}, 200);
});

如您所见,正在发生三个动画。需要使用哪种 if/else 语句才能创建可逆动画?

这是一个 jsfiddle:http://jsfiddle.net/6arjhkzc/2/

【问题讨论】:

  • 你不觉得这个例子更简单(开始)jsfiddle.net/6arjhkzc/3
  • 持有代表当前状态的布尔值,并检查它是否每次都被动画化。如果是,请执行相反的操作。 :)
  • @RokoC.Buljan 我只是将每个功能分开以清楚地布局。
  • @A.Abramov 我对查询很陌生,所以我完全不知道该怎么做
  • @AustinBranham Roko 的回答正是我所说的。从中学习。 :)

标签: jquery click jquery-animate


【解决方案1】:

jsfiddle demo

$(document).ready(function() {
    $("span.click").click(function() {

        var io = this.io ^= 1; // Simple I/O toggler

      $(".map").animate({"opacity": io ? 1 : 0}, 200);
      $(".navigation").animate({"bottom": io ? -100 : -150}, 200);
      $(".click").animate({"bottom": io ? 150 : 100}, 200);
    });
});

10 存储在单击按钮io 属性内(用作布尔值,因为0 计算为false)。
与使用某些条件运算符 ?: 相比,您可以切换所需的值。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
https://stackoverflow.com/a/22061240/383904

如果您不习惯使用按位异或运算符 ^ 作为切换器,您始终可以使用标准的 flip-flap 否定(demo):

var io = this.io = !this.io;

【讨论】:

  • 如何使用这个 IO 切换器进行 css 转换?假设我想在点击时放大某些东西,我已经尝试过这段代码,但它不起作用: $(this).animate({"transform","scale": io ? 1 : 1.5}, 100);
  • @AustinBranham 几乎就是这样,你只是一个错字(缺少: 而不是,),另外,动画不适用于 CSS 转换。改用 CSS !!! 在 CSS 中它也像 scale(1.5) 所以在 jQuery 中是一样的:$(this).css({transform : "scale("+ (io ? 1 : 1.5) +")" }, 100); >> 请注意 : 以及我如何使用字符串连接将 io 内容包含到 () 中 + .另请注意,100 是一个非常快速的动画,我建议使用 min 230 以获得更好的用户体验
  • 非常感谢。我还尝试了几种与 CSS 而不是动画的组合,但无法让它工作。这是有道理的,如何将 io 包含在括号中。不介意回答的话,io外的+号有什么作用?字符串连接?
  • @AustinBranham 是的。将字符串与 JS 代码连接时,如果您是初学者,请先编写预期的字符串:"scale()",而不是如果您需要在 () 中添加一个变量,请编写:"scale("+ someThing +")" 现在您已将 someThing 变量与字符串连接起来.如果您需要而不是 someThing 来做更高级的事情,以避免混淆 + 作为 cncatenator 和 + 作为加法,只需将您的逻辑包装在 () 中,如 "scale("+ (a+b-c) +")" 或我们需要:"scale("+ ( io ? 1 : 1.5 ) +")" 使用条件运算符(?:)
  • @AustinBranham 是的,只需使用引号:io ? "0%" : "100%"
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多