【问题标题】:How to change div height on slideToggle function with more/less如何使用更多/更少更改 slideToggle 功能上的 div 高度
【发布时间】:2014-02-20 14:35:26
【问题描述】:

如何更新我的代码,这样我就可以用slideToggle() 更改<div> 的高度,现在它几乎是正确的,但是当我单击一个"read_more" 并单击另一个时它不是正确的。我需要slideDown 何时显示隐藏p 并将主要<div> 更改为特定高度,slideUp 何时隐藏此p 并更改<div> 以前的特定高度("... Read More" 基础@ 987654332@高度,"... Read Less".main高度)。

请参阅demo 或下面的代码。

HTML

<div class="main">
    <!-- === h1 === -->
    <h1>Lorem ipsum dolor sit amet</h1>
        <p>Ut enim ad minim veniam, quis nostrud exercitation.</p>
        <p class="more">Duis aute irure dolor in reprehenderit in voluptate.</p>
        <a class="read_more">... Read More</a>
    <!-- === h2 === -->             
    <h2>Consectetur adipisicing elit</h2>
        <p>On the other hand, we denounce with righteous.</p>
        <p class="more">Gemoralized by the charms of pleasure of the moment.</p>
        <a class="read_more">... Read More</a> 
    <!-- === h3 === -->                  
    <h3>Sed do eiusmod tempor incididunt</h3>
        <p>The wise man therefore always holds.</p>
        <p class="more">Et harum quidem rerum facilis est et expedita distinctio.</p>
        <a class="read_more">... Read More</a>
</div>

CSS

.main {
    border:1px solid blue;
    height: 260px;
    padding: 5px;
}
h1,h2,h3 {
    font-size: 18px;
    color: #96bc33;
}
p {
    margin: 0;
    font-size: 13px;
}
.more {
    display:none;
}
.read_more {
    cursor: pointer;
    color: red;
}

JavaScript

var rm = $(".read_more"),
    moreText = "... Read More",
    lessText = "... Read Less",
    i = 0 ;

rm.click(function () {
    var $this = $(this);
    rm.not($this).text(moreText).prev(".more").slideUp();
    $this.text($this.text() == moreText ? lessText : moreText).prev(".more").slideToggle("normal");
    $(".main").animate({height:(++i % 2) ? 280 : 260}, "normal");   
});

【问题讨论】:

  • 你必须设置一个特定的高度吗?如果没有,只需更改您的 css .main { height:auto; ... } 并删除第二个 click 函数。
  • 感谢@Matt,但是我需要一个特定的高度
  • 我知道你会想要一个特定的高度 :-) 现在所有现有答案都不正确。
  • @onlinepch 特定的min-height 可以吗?
  • @andyb 非常感谢您的帮助,乍一看没问题,但是当slideUp 我需要以前的高度时。这个想法是当slideToggle
    height 改变它。

标签: javascript jquery show-hide slidetoggle


【解决方案1】:

我已经升级了你的 jsFiddle:

http://jsfiddle.net/GwkQN/

所做的更改是:

  • 从您的 main 容器中移除了 height 属性

  • rm.click

  • 重构了您的脚本

我不确定您的代码是否除了 slideToggle 之外还有其他功能,但这个单行代码可能满足您的所有需求。

$(this).prev('.more').slideToggle();

更改的 jQuery 代码:

var rm = $(".read_more"),
moreText = "... Read More",
lessText = "... Read Less";

rm.click(function () {

    $(this).prev('.more').slideToggle();

    if($(this).text()==moreText){
        $(this).text(lessText);
    }else{
        $(this).text(moreText);
    }

});

更改的 CSS:

.main {
    border:1px solid blue;
    padding: 5px;
}

【讨论】:

  • 请不要只链接到演示。所有相关的代码更改都应添加到答案中。 StackOverflow 可能会比 jsFiddle 更持久。
  • 您需要更新您的演示链接,但+1 我知道您很快就会修复它。
  • 完成。再次感谢!
【解决方案2】:

如果你需要特定的高度,你可以使用 css 属性:min-height: 260px;

.main {
    border:1px solid blue;
    padding: 5px;
     min-height: 260px;
}

JS

var rm = $(".read_more"),
    moreText = "... Read More",
    lessText = "... Read Less";

rm.click(function () {
    var $this = $(this);
    rm.not($this).text(moreText).prev(".more").slideUp();
   $this.text($this.text() == moreText ? lessText : moreText).prev(".more").slideToggle("normal");
});

FIDDLE

【讨论】:

  • 但这一个特定的起始高度。对我来说似乎是一个不错的解决方案,但也许@onlinepch 如果您有特定要求,您可以与他们一起编辑问题吗?
  • 非常感谢@andyb,但是在我的页面上有些不对劲,演示看起来很不错,这是一个很好的练习,希望对遇到同样问题的人有所帮助.
  • 大家好,我想我明白了,如果有人和我有同样的问题,请查看更新Demo。再次感谢您的帮助!
  • 我一定遗漏了一些东西,但你的演示产生的结果和我的一样,我不需要animate
【解决方案3】:

试试这个,

jsfiddle.net/4MfLw/8/

我已经更新了你的代码

我已从“主”类的 CSS 中删除“高度”属性 此外,我还评论了您的动画代码,并且我已经编写了代码以向上滑动所有其他“更多”div(如果它们是打开的)

【讨论】:

  • 演示链接无法回答问题。
  • @andyb 我已经更新了代码,它在那里工作正常
  • @SnehalS 有一个专门针对此类答案的标志。它被称为“仅链接答案”。 Andy 有一个观点 - 至少为您的更改提供解释。
  • 如果 jsFiddle 出现故障(或永远消失),这仍然是一个好的答案吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2014-11-29
  • 2018-05-13
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多