【问题标题】:Animating a show/hide script动画显示/隐藏脚本
【发布时间】:2013-01-20 16:26:59
【问题描述】:

我正在尝试向显示/隐藏脚本添加动画/淡入淡出。

当用户单击“.show”锚点时,我想将“.buttons” div 向下滑动“.targetDiv” div 的高度,之后我希望“.targetDiv” div淡入。

然后(如果可能的话),我希望在单击“.hide”锚点时发生相反的动作 - 导致“.targetDiv”淡出,“.buttons” div 向上滑动(回到原来的位置)。

感谢您的帮助!

jsFiddle:

http://jsfiddle.net/XwN2L/1296/

HTML:

    <div id="content" class="targetDiv">Content</div>
    <div class="buttons">
        <a  class="show" target="content">Show</a>
        <a  class="hide" target="content" style="float: right;">Hide</a>
    </div>

JavaScript:

    $('.targetDiv').hide();
    $('.show').click(function () {
        $('.targetDiv').hide();
        $('#' + $(this).attr('target')).show();
    });

    $('.hide').click(function () {
        $('#' + $(this).attr('target')).hide();
    });

【问题讨论】:

标签: javascript jquery animation


【解决方案1】:

我会简单地使用 jquery 的 slideUp/slideDown 方法。

$('.targetDiv').hide();
$('.show').click(function () {
    $('.targetDiv').hide();
    $('#' + $(this).attr('target')).slideDown('slow');
});

$('.hide').click(function () {
    $('#' + $(this).attr('target')).slideUp('slow');
});

如果您迫切希望滑动淡出,请查看以下内容:

fadeOut() and slideUp() at the same time?

【讨论】:

    【解决方案2】:

    当目标元素嵌套在另一个元素中时,更容易实现。这样您就可以将幻灯片动画分别应用到包含的父元素和淡入淡出动画到目标子元素。

    例如:

    HTML

    <div id="content_container">
        <div id="content" class="targetDiv">Content</div>
    </div>
    
    <div class="buttons">
        <a  class="show" target="content">Show</a>
        <a  class="hide" target="content" style="float: right;">Hide</a>
    </div>
    

    Javascript

    $('.show').click(function () {
        var target        = $('#' + $(this).attr('target'));
        var target_parent = target.parent().height(target.outerHeight());
        target_parent.slideDown(250, function() { target.fadeIn(500); });
    });
    
    $('.hide').click(function () {
        var target        = $('#' + $(this).attr('target'));
        var target_parent = target.parent();
        target.fadeOut(500, function() {target_parent.slideUp(500);} );
    });
    

    注意在“显示”处理程序中,父元素如何从当前隐藏的子元素继承其高度。

    查看可能的jsFiddle demo

    【讨论】:

      【解决方案3】:

      一个选项:

      给你的元素绝对定位:

      position: absolute;
      top:0px;
      

      然后像这样对其进行动画处理:

      $('.show').click(function () {
              $('.targetDiv').hide();
              $('.buttons').animate({
                  top : '80px' // the height of your content + the padding + the margins
              },'slow',function(){
                  $('#content').fadeIn('slow');
              });
      });
      
      
      $('.hide').click(function () {
          $('#content').fadeOut('slow',function(){
              $('.buttons').animate({
                  top : '0px' // the height of your content + the padding + the margins
              });
          });
      });
      

      工作示例:http://jsfiddle.net/XwN2L/1298/

      【讨论】:

      • 谢谢,这正是我想要的。但是,我的网站使用多个 '.targetDiv' div,而不仅仅是 '#content' - 有没有办法选择显示/隐藏锚点中的目标 div?我尝试修改您的示例,请参阅第 8 行和第 14 行。不知道出了什么问题? jsFiddle:jsfiddle.net/XwN2L/1326 再次感谢!
      • 感谢您的回复 Nick,我已尝试将您的新建议实施到上述网站中。显示/隐藏的元素被包装在一个 div 中,并且包装器具有绝对定位和 0px 的“顶部”值。我遇到的问题是动画期间没有出现“.targetDiv”类的元素。但是,当我从 div 中删除类时,它们会出现!我和一个朋友花了几个小时查看它,但我们没有运气!希望我能借用你的专业知识(再次) - 这是我正在使用的:jsfiddle.net/XwN2L/1414
      • 这就是你的意思:jsfiddle.net/XwN2L/1415
      • 对不起,我会尽快给你的回复打勾,只是我对 SO 还是比较陌生。非常感谢您的帮助和耐心! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多