繁体   English   中英

使用Jquery UI动画功能显示/隐藏子元素时,父div在没有动画的情况下变得更宽

[英]Parent div become wider without animation when child element show/hide with Jquery UI animate function

我有一个问题,当我尝试使用jquery动画显示/隐藏div元素时,它平滑打开,但是其父对象却不平滑地打开。 隐藏也会发生同样的情况。

因此,我的整个页面内容都是一个混蛋。

演示: http//jsfiddle.net/neDZP/7/

HTML:

<div id="A_to_Z_top">     
    <div class="section clearfix">
        <div class="region region-a-to-z-top">
            <div class="block block-block contextual-links-region" id="block-block-48">
                <h2>INDEX A-Z</h2>
                <div class="content" style="display: block;">
                    <div id="atozSlide">
                        <ul>
                            <li><a href="#">A</a></li>
                            <li><a href="#">B</a></li>
                            <li><a href="#">C</a></li>
                            <li><a href="#">D</a></li>
                            <li><a href="#">E</a></li>
                            <li><a href="#">E</a></li>
                            <li><a href="#">F</a></li>
                            <li><a href="#">G</a></li>
                            <li><a href="#">H</a></li>
                            <li><a href="#">I</a></li>
                            <li><a href="#">J</a></li>
                            <li><a href="#">K</a></li>
                            <li><a href="#">L</a></li>
                            <li><a href="#">M</a></li>
                            <li><a href="#">O</a></li>
                            <li><a href="#">P</a></li>
                            <li><a href="#">Q</a></li>
                            <li><a href="#">R</a></li>
                            <li><a href="#">S</a></li>
                            <li><a href="#">T</a></li>
                            <li><a href="#">U</a></li>
                            <li><a href="#">V</a></li>
                            <li><a href="#">W</a></li>
                            <li><a href="#">X</a></li>
                            <li><a href="#">Y</a></li>
                            <li><a href="#">Z</a></li>
                        </ul>
                    </div>  
                </div>
            </div>
        </div>
    </div>
</div>
<P> This paragraph should be slide down smothly <p>

使用Javascript:

$(function() {
  // slide effect for showing and hiding A-Z header block    
  $('#block-block-48 > .content').hide();
  $('#block-block-48 h2').click(function(){ 
      var effect = 'slide';
      var options = { direction: 'up' };
      var duration = 300;
      $("#block-block-48 > .content").stop().toggle(effect, options, duration);
  });
});

CSS:

#block-block-48 {
  background: none repeat scroll 0 0 #ff0000;
}

#block-block-48 h2 {
   background:  #035d8e;
   color: #ffffff;
   cursor: pointer;
   font-family: sans-serif;
   font-size: 16px;
   margin: 0;
   padding: 6px 15px 6px 0;
   text-align: right;
   text-decoration: none;
}

#block-block-48 .content {
    margin: 0;
    text-align: right;
}

#block-block-48 ul li {
    display: inline-block;
    float: left;
    list-style: none outside none;
    margin: 0 0 0 2px;
}

#block-block-48 ul li a {
    background: none repeat scroll 0 0 #035d8e;
    color: #ffffff;
    display: block;
    float: left;
    font-family: sans-serif;
    font-size: 16px;
    margin: 0;
    padding: 0 8px;
}

#block-block-48 ul {
    display: inline-block;
    margin: 5px 0 0;
    padding: 0;
}

首先,使用display:block离开div.content

然后将以下内容添加到CSS:

 #block-block-48 > .content {
     display:none;
 }

之后,将JS更改为以下内容:

$(function() {
    // slide effect for showing and hiding A-Z header block  
     $('#block-block-48 h2').click(function(){ 
         $(this).next().slideToggle();
     });
});

那应该解决它!

让我知道这是否是您想要的动画。 如果没有,我可以建议其他事情。

小提琴供参考

更改jQuery函数的最简单方法。 而不是浪费时间在CSS上。

将此行更改为

 $("#block-block-48 > .content").stop().toggle(effect, options, duration);

这条线

$("#block-block-48 > .content").slideToggle();

的jsfiddle

使用slideToggle http://jsfiddle.net/akash4pj/neDZP/14/

JS

$(function() {
    // slide effect for showing and hiding A-Z header block    
    $('#block-block-48 > .content').hide();
    $('#block-block-48 h2').click(function(){ 
        var options = { direction: 'up' };
        var duration = 300;
        $("#block-block-48 > .content").stop().slideToggle( options, duration);
    });
  });

这是正常工作的jsfiddle ,如下修改css:

#block-block-48 {
}
#block-block-48 .content {
    margin: 0;
    text-align: right;
    background: none repeat scroll 0 0 #ff0000;
}

由于您的幻灯片元素是#block-block-48 .content ,但是背景颜色设置为#block-block-48

请在您的函数中使用它。

 $(function() {
    // slide effect for showing and hiding A-Z header block    
    $('#block-block-48 > .content').hide();
    $('#block-block-48 h2').click(function(){ 

   $("#abovediv").toggle("slow");
    });

  });

ID“ abovediv”用于以下标记。

<h2>INDEX A-Z</h2>
<div id = "abovediv" class="content" style="display: block;">
<div id="atozSlide">

试试这个代码:

<script>
$(function() {
  $('#block-block-48 > .content').hide();
  $('#block-block-48 h2').click(function(){ 
    var _header = $(this);
    var _content = _header.next();
    if(_content.is(':visible'))
    {
      _content.slideUp();
    }
    else
    {
      _content.slideDown();
     }
   });
 });
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM