用jquery切换div的高度

时间:2017-03-06 16:35:52

标签: javascript jquery html css jquery-animate

我想要一个“显示更多”的链接,当点击时会展开另一个div的高度以显示所有内容。一旦div显示所有内容,我希望链接更改为“显示更少”,点击后再反过来。

这是我到目前为止所得到的但由于某些原因它无效,请有人帮忙吗?

这是我到目前为止所做的:

$(document).ready(function() {
  $('.entry-content').css('height', '400px');
  $('.entry-content').css('overflow', 'hidden');
 $('.show-more').click(function() {
  $('.entry-content').animate({
    'height': 'auto'
  }, 500);
  $('.show_more').html('Show Less');
  $('.show_more').addClass('show_less');
  $('.show_more').removeClass('show_more');
});
$('.show-less').click(function() {
  $('.entry-content').animate({
    'height': '400px'
  }, 500);
  $('.show_less').html('Show More');
  $('.show_less').addClass('show_more');
  $('.show_less').removeClass('show_less');
});
});

   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="entry-content">
  Curabitur sed enim sit amet nibh vulputate efficitur nec eget nulla. Vestibulum vel pulvinar magna. Etiam viverra vulputate lectus. Etiam dictum maximus ligula sed efficitur. Donec in dictum purus. Sed consequat quam eu eleifend convallis. Donec sapien
  augue, volutpat ac nibh ac, molestie vulputate neque. Morbi eu fermentum est, eget vulputate quam. Phasellus et ante ipsum. Nullam tempus neque augue, nec accumsan erat hendrerit vel. Proin dolor sapien, pulvinar at rutrum quis, scelerisque vel ipsum.
  Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
</div>

<div class="another-div-elsewhere">
  <a href="#" class="show-more">Show More</a>
</div>

4 个答案:

答案 0 :(得分:0)

主要问题似乎是您在$.click()#show-more上附加了#show-less事件,但您从未创建#show-less ...您切换了课程.show_more.show_less。我只是单独留下了$.click()选择器,并且正在切换类.open以确定链接/文本的状态,并根据该更新链接文本和文本高度。

你可以链接/组合很多这些命令,并使用变量来保存jquery,而不必重新运行选择器。

我还将静态400px高度更改为.entry-content区域高度的一半,因为400px在此演示中不起作用。如果staticHeight适用于您,可以将400px更改回var $content = $('.entry-content'), contentHeight = $content.outerHeight(), $showMore = $('#show-more'), staticHeight = contentHeight / 2; $content.attr('data-height',contentHeight).css({ 'height': staticHeight, 'overflow':'hidden' }); $showMore.on('click',function() { var height, text; if ($showMore.hasClass('open')) { $showMore.removeClass('open'); height = staticHeight; text = 'Show More'; } else { $showMore.addClass('open'); height = contentHeight; text = 'Show Less'; } $content.animate({ 'height': height }, 500); $showMore.html(text); });,或者修改我用来满足您需求的内容。

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="entry-content">
Curabitur sed enim sit amet nibh vulputate efficitur nec eget nulla. Vestibulum vel pulvinar magna. Etiam viverra vulputate lectus. Etiam dictum maximus ligula sed efficitur. Donec in dictum purus. Sed consequat quam eu eleifend convallis. Donec sapien augue, volutpat ac nibh ac, molestie vulputate neque. Morbi eu fermentum est, eget vulputate quam. Phasellus et ante ipsum. Nullam tempus neque augue, nec accumsan erat hendrerit vel. Proin dolor sapien, pulvinar at rutrum quis, scelerisque vel ipsum. Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
</div>

<div class="another-div-elsewhere">
<a href="#" id="show-more">Show More</a>
</div>
&#13;
Stocks.Row
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可以这样做。

&#13;
&#13;
$(document).ready(function(){
    $('.read-more').on('click', function(e){
      e.preventDefault();
      $('.details').show();
      $('.summary').hide();
    })
    $('.read-less').on('click', function(e){
      e.preventDefault();
      $('.summary').show();
      $('.details').hide();
    });
});
&#13;
.details {
  display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="summary">
  <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s...</p>
  <span class="read-more">
   <a href="#">Show More....</a>
  </span>
</div>
<div class="details">
  <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
  <span class="read-less">
   <a href="#">Show Less....</a>
  </span>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

尝试以下代码段。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="entry-content">
  Curabitur sed enim sit amet nibh vulputate efficitur nec eget nulla. Vestibulum vel pulvinar magna. Etiam viverra vulputate lectus. Etiam dictum maximus ligula sed efficitur. Donec in dictum purus. Sed consequat quam eu eleifend convallis. Donec sapien
  augue, volutpat ac nibh ac, molestie vulputate neque. Morbi eu fermentum est, eget vulputate quam. Phasellus et ante ipsum. Nullam tempus neque augue, nec accumsan erat hendrerit vel. Proin dolor sapien, pulvinar at rutrum quis, scelerisque vel ipsum.
  Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
</div>

<div class="another-div-elsewhere">
  <a href="#" class="show-more">Show More</a>
</div>
@Component
public class DataServiceController {

    //This is defined within a @Config
    @Autowired
    DataTypesMap dataTypesMap;

    /**
     * Create an item in the data platform
     */
    public ItemCreatedResponse createItem(String data, String dataType)
            throws IOException {
        ProcessStrategy dataStrategy = dataTypesMap.get(dataType);
        return dataStrategy.add(data);
    }

答案 3 :(得分:0)

首先你在课堂/ id使用方面遇到了一些问题

另一件事是将动画高度设为自动不是possible!还有其他(比如CSS)这样做的方法,但这里是你试图做的工作样本。我希望它有所帮助: - )

&#13;
&#13;
$(document).ready(function() {
  $('.entry-content').css('height', '100px');
  $('.entry-content').css('overflow', 'hidden');
});

$('#show_more').click(function() {
  if($(this).hasClass('show_more')){
       $(this).html('Show Less');
       $('.entry-content').animate({
          'height': '200px'
       }, 500);
  }
  else{
      $(this).html('Show More');
      $('.entry-content').animate({
          'height': '100px'
      }, 500);
  }

  $(this).toggleClass('show_less');
  $(this).toggleClass('show_more');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="entry-content">
  Curabitur sed enim sit amet nibh vulputate efficitur nec eget nulla. Vestibulum vel pulvinar magna. Etiam viverra vulputate lectus. Etiam dictum maximus ligula sed efficitur. Donec in dictum purus. Sed consequat quam eu eleifend convallis. Donec sapien
  augue, volutpat ac nibh ac, molestie vulputate neque. Morbi eu fermentum est, eget vulputate quam. Phasellus et ante ipsum. Nullam tempus neque augue, nec accumsan erat hendrerit vel. Proin dolor sapien, pulvinar at rutrum quis, scelerisque vel ipsum.
  Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
  Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
   Cras arcu nulla, placerat ac arcu vitae, iaculis maximus nisi. Nulla tincidunt, nisi id ultrices tempor, diam ipsum sollicitudin neque, ac consequat libero nulla eu diam.
 Curabitur sed enim sit amet nibh vulputate efficitur nec eget nulla. Vestibulum vel pulvinar magna. Etiam viverra vulputate lectus. Etiam dictum maximus ligula sed efficitur. Donec in dictum purus. Sed consequat quam eu eleifend convallis. Donec sapien
  augue, volutpat ac nibh ac, molestie vulputate neque. Morbi eu fermentum est, eget vulputate quam. Phasellus et ante ipsum. Nullam tempus neque augue, nec accumsan erat hendrerit vel. Proin dolor sapien, pulvinar at rutrum quis, scelerisque vel ipsum.
</div>

<div class="another-div-elsewhere">
  <a href="#" id="show_more" class="show_more">Show More</a>
</div>
&#13;
&#13;
&#13;