【问题标题】:How to use the toggle function with click function?如何使用带有点击功能的切换功能?
【发布时间】:2015-12-27 06:16:16
【问题描述】:

我想在用户单击按钮时创建动画。我想在点击时执行两个动画功能,所以我想我会使用切换功能在这两个功能之间切换。

现在的问题是,如果我使用切换功能,它会在没有点击的情况下执行两个动画功能,并且按钮也会消失。

$('#button').toggle(
    function() {
        $('#slider').stop().animate({"margin-right": '0'});
    },
    function() {
        $('#slider').stop().animate({"margin-right": '50'});
    }
);

当用户每次点击按钮时,我如何交替执行动画功能?

【问题讨论】:

  • .toggle(fn1, fn2) 函数已弃用。
  • @Alnitak 我用 slideToggle() 换了另一个,但它仍然有效!

标签: jquery


【解决方案1】:

.toggle(fn1, fn2) 函数已被弃用。

最好的替代方法是使用一个维护状态变量的函数来指示它是“偶数”点击还是“奇数”点击。

在下面的示例中,我使用“立即调用的函数表达式”将该状态变量包装在一个闭包中(因此它不是全局的)。我实际上不是使用奇数/偶数标志,而是使用表达式 target = 50 - target 在每次点击时在 0 和 50 之间交替翻转目标坐标。

轮询元素的当前位置将无法正常工作,因为它会错过在动画中间发生的按钮点击。

(function() {   // closure to hold state variable
    var target = 0;
    $('#button').on('click', function() {
        $('#slider').stop().animate({'margin-right': target});
        target = 50 - target;
     });
})();

http://jsfiddle.net/alnitak/5daYu/

【讨论】:

  • @raj .slideToggle 没有被弃用,但它只会执行“显示”或“隐藏”动画。
  • 抱歉,我无法在此处添加您的姓名
  • @raj 是的,它们是不同的。 .slideToggle 执行显示/隐藏动画,每次调用时状态交替。 .toggle(fn1, fn2) 注册两个“点击处理程序”,每个交替点击一个。
【解决方案2】:

试试这个,

$('#button').on('click',function(){
   var mr=parseInt($('#slider').css('margin-right').replace('px',''))==0 ? 50 : 0;
   $('#slider').stop().animate({"margin-right": mr});
});

Alernatively,

var mr=0;
$('#button').on('click',function(){
    $('#slider').stop().animate({"margin-right": mr});
    mr=(mr==0) ? 50 : 0;
});

【讨论】:

  • 它来到 margin-right=50 但是当我再次点击它时不会返回
  • @raj 可能是因为.css() 的输出是“Npx”格式,而不是数字。
  • 无论如何,测试当前位置并不是测试它的好方法。最好有一个单独的变量来跟踪预期的移动方向。
  • @RohanKumar 为什么不只测试== "0px" 而不是.replace 调用?也就是说,我仍然认为这是错误的方法。如果在动画中间点击按钮,它会做错事,因为它不会翻转动画方向。
  • @RohanKumar 你介意我问一下replace的解释吗? B'coz我想知道:)
猜你喜欢
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2023-03-16
  • 2019-12-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多