【问题标题】:Having trouble toggling an animation when clicked on单击时无法切换动画
【发布时间】:2016-08-24 08:18:01
【问题描述】:

我正在尝试制作一个在单击时会扩展高度的 div,然后在再次单击时恢复其原始大小。我曾尝试使用 .toggle ,但每当我执行每个 div(带有相关类)时,都会完全消失。我在下面贴了一个代码笔,您可以轻松查看代码效果。 http://codepen.io/JoshuaHurlburt/pen/JKqAPr

<div>
  <div class='box' id='emailVer'>
    <h2 id='payText'>PAYMENT</h2>
  </div>

  <div class='box' id='accCust'>
    <h2 id='acText'>ACCOUNT CUSTOMIZATION</h2>
  </div>

    <div class='box' id='pay'>
    <h2 id='evText'>EMAIL VERIFICATION</h2>

  </div>
</div>

JS:

var main = function(){
  $('.box').click(function() {
    $(this).animate({
      height: "300px"
    },200 );
  }
)}
$(document).ready(main);

我决定省略 CSS,但如果有人认为它对解决方案很重要,我会编辑它

【问题讨论】:

    标签: javascript jquery html animation


    【解决方案1】:

    可能有比这更好的解决方案,但这里有一个-

    用这个替换你的脚本文件

    var main = function(){
      $('.box').click(function() {
        var el = $(this); 
        if (!el.hasClass('selected')) {
          el.animate({
          "height": "300px"
        }, 200)
          el.addClass("selected");
        } else {
          el.animate({
          "height": "75px"
        }, 200);
          el.removeClass("selected");
        }
      }
    )}
    $(document).ready(main);
    

    您需要一种方法来跟踪已选择(和动画)和未选择的内容。我选择添加一个类(已选择)并检查元素是否具有该类。如果它还没有被选中,动画到 300px 并添加类,否则动画回到 75px 并删除它。

    【讨论】:

    • 对于一个简单的切换动画来说似乎有点复杂,但如果我无法得到 jamtjg 的建议,我一定会尝试。
    • 我可能应该澄清我是这篇文章的所有者,但我切换了帐户,当我使用正确的帐户进入工作计算机时,我会确认这是解决方案。非常感谢!
    【解决方案2】:

    试试.slideToggle

    $( "#clickme" ).click(function() {
      $( "#book" ).slideToggle( "slow", function() {
        // Animation complete.
      });
    });
    

    【讨论】:

    • 现在当我第二次单击它时,它会像预期的那样向上滑动,但它会使 div 完全消失,因此无法再次单击它。
    【解决方案3】:

    jQuery 中的切换函数会切换元素的可见性,这就是它们消失的原因。

    我相信您正在寻找的是.toggleClass。见http://api.jquery.com/toggleclass/。然后,您可以使用扩展的高度属性创建另一个类。哪个会在点击时打开和关闭。

    向框上现有的过渡属性添加高度将处理动画。

    CSS

    .box {
      width:300px;
      height:75px;
      margin:0 auto;
      -webkit-transition:box-shadow 1s, height 1s;
      transition: box-shadow 1s, height 1s;
    }
    
    .expanded {
      height: 300px;
    }
    

    JS

    var main = function(){
      $('.box').click(function() {
        $(this).toggleClass('expanded');
      }
    )};
    $(document).ready(main);
    

    【讨论】:

    • 这绝对看起来应该可以工作,但是当我点击它时 div 不会展开。我不需要一个特殊的图书馆,对吧​​?我已经添加了 JQuery 和 JQuery UI 库。
    • 糟糕,确保 .expanded.box 之后定义。自上次声明以来,.box 上的 height 属性具有优先权。
    猜你喜欢
    • 2021-06-30
    • 2012-11-28
    • 2015-09-15
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多