繁体   English   中英

用jquery切换div的高度

[英]Toggle the height of a div with jquery

我想要一个“显示更多”的链接,当点击时,展开另一个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> 

主要问题似乎是你在id #show-more#show-less上附加了$.click()事件,但是你永远不会创建#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); }); 
 <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> 

你可以做这样的事情。

 $(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(); }); }); 
 .details { display: none; } 
 <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> 

请尝试以下代码段。

 $(document).ready(function() { $('.entry-content').css({'height':'40px','overflow': 'hidden'}); $('.show-more').on('click',function() { if($(this).hasClass('less')){ $('.entry-content').animate({ 'height': '40px' }, 500); $(this).html("Show More") } else{ $('.entry-content').animate({ 'height': $(".entry-content").get(0).scrollHeight }, 500); $(this).html("Show Less") } $(this).toggleClass('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> 

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

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

 $(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'); }); 
 <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> 

暂无
暂无

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

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