Yếu tố sinh động để tăng chiều cao tự động với jQuery


171

Tôi muốn làm động <div> từ 200pxđể autochiều cao. Tôi dường như không thể làm cho nó hoạt động mặc dù. Có ai biết làm thế nào không?

Đây là mã:

$("div:first").click(function(){
  $("#first").animate({
    height: "auto"
  }, 1000 );
});

14
Bạn nên đánh dấu câu trả lời tốt nhất là được chấp nhận.
kleinfreund


@IanMackinnon câu hỏi này chắc chắn có câu trả lời tốt hơn. Tôi đã đóng câu hỏi đó như một bản sao của câu hỏi này.
Madara's Ghost

Câu trả lời:


254
  1. Lưu chiều cao hiện tại:

    var curHeight = $('#first').height();
  2. Tạm thời chuyển chiều cao sang tự động:

    $('#first').css('height', 'auto');
  3. Lấy chiều cao tự động:

    var autoHeight = $('#first').height();
  4. Chuyển về curHeightvà hoạt hình thành autoHeight:

    $('#first').height(curHeight).animate({height: autoHeight}, 1000);

Và cùng nhau:

var el = $('#first'),
    curHeight = el.height(),
    autoHeight = el.css('height', 'auto').height();
el.height(curHeight).animate({height: autoHeight}, 1000);

@Daniel, mã JS của bạn ở đâu? Đăng bit đó và cũng là một phần của HTML hiển thị các yếu tố bạn tham khảo.
David Tang

21
Điều này hoạt động, nhưng tôi đã thêm một cuộc gọi lại khôi phục hành vi tự động phát triển thành phần tử .animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
rg89

Trở nên thiết lập chiều cao cố định trên các thiết kế đáp ứng. Nó biến thành một mớ hỗn độn nếu người dùng thay đổi kích thước màn hình. Tốt nhất để đặt chiều cao thành 'tự động' khi hoạt ảnh hoàn tất.
Jonathan Tonge

4
Điều này có khả năng gây ra FOUC. Người dùng có thể thấy phần tử nhảy lên hết chiều cao trong một giây trước khi hoạt hình.
Đinh lăng

1
Bạn có thể ngăn FOUC ("flash nội dung chưa được lọc") bằng cách ban đầu đưa ra phần tử opacity: 0; position: absolute;trong khi đo và loại bỏ phần tử đó sau khi bạn hoàn thành.
JacobEvelyn

194

IMO đây là giải pháp sạch nhất và dễ nhất:

$("#first").animate({height: $("#first").get(0).scrollHeight}, 1000 );

Giải thích: DOM đã biết từ kết xuất ban đầu của nó, kích thước mà div mở rộng sẽ có khi được đặt thành chiều cao tự động. Thuộc tính này được lưu trữ trong nút DOM là scrollHeight. Chúng ta chỉ cần tìm nạp Phần tử DOM từ Phần tử jQuery bằng cách gọi get(0)và sau đó chúng ta có thể truy cập thuộc tính.

Thêm chức năng gọi lại để đặt chiều cao thành tự động cho phép phản hồi nhanh hơn sau khi hoạt ảnh hoàn tất (credit chris-williams ):

$('#first').animate({
    height: $('#first').get(0).scrollHeight
}, 1000, function(){
    $(this).height('auto');
});

2
Kinh ngạc! Theo developer.mozilla.org/en-US/docs/Web/API/Euity.scrollHeight, nó thậm chí còn được hỗ trợ trong IE8, so với clientHeight, dường như không được hỗ trợ: developer.mozilla.org/en-US/docs/Web/ API / Element.clientHeight
Sven

1
Margin là theo định nghĩa của mô hình hộp không phải là một phần chiều cao của một đối tượng. Bạn luôn có thể thêm lề cho mình.
Liquinaut

22
Đây phải là câu trả lời được chấp nhận vì nó hoạt động tốt nhất mà không bị nhấp nháy và thực sự làm tốt công việc
Einius

7
Tôi cũng nghĩ rằng đây là giải pháp tốt nhất. Tôi sẽ thêm vào nó một chức năng gọi lại để đặt chiều cao thành tự động để có nhiều phản hồi hơn. $('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
Chris Williams

1
Wow, đây là siêu thanh lịch. Nó cũng hoạt động với scrollWidthhình ảnh động chiều rộng.
nils

24

Đây là về cơ bản phương pháp tương tự như câu trả lời bằng cách Box9 nhưng tôi bọc nó trong một đẹp plugin jquerymất những lập luận tương tự như một Animate thường , khi bạn cần phải có các thông số hoạt hình hơn và cảm thấy mệt mỏi lặp lại cùng mã hơn và hơn :

;(function($)
{
  $.fn.animateToAutoHeight = function(){
  var curHeight = this.css('height'),
      height = this.css('height','auto').height(),
      duration = 200,
      easing = 'swing',
      callback = $.noop,
      parameters = { height: height };
  this.css('height', curHeight);
  for (var i in arguments) {
    switch (typeof arguments[i]) {
      case 'object':
        parameters = arguments[i];
        parameters.height = height;
        break;
      case 'string':
        if (arguments[i] == 'slow' || arguments[i] == 'fast') duration = arguments[i];
        else easing = arguments[i];
        break;
      case 'number': duration = arguments[i]; break;
      case 'function': callback = arguments[i]; break;
    }
  }
  this.animate(parameters, duration, easing, function() {
    $(this).css('height', 'auto');
    callback.call(this, arguments);
  });
  return this;
  }
})(jQuery);

chỉnh sửa: chainable và sạch hơn bây giờ


23

Một giải pháp tốt hơn sẽ không dựa vào JS để đặt chiều cao cho phần tử của bạn. Sau đây là giải pháp tạo hiệu ứng cho phần tử chiều cao cố định thành chiều cao đầy đủ ("tự động"):

var $selector = $('div');
    $selector
        .data('oHeight',$selector.height())
        .css('height','auto')
        .data('nHeight',$selector.height())
        .height($selector.data('oHeight'))
        .animate({height: $selector.data('nHeight')},400);

https://gist.github.com/2023150


2
Oneliner này không dễ hiểu, có thể viết vài dòng sẽ giúp người khác tốt hơn một chút.
Jaap

Đây là giải pháp tốt nhất vì chiều cao tự động có thể thay đổi nếu người dùng điều chỉnh kích thước cửa sổ. Xem phần sau: // kích hoạt chiều cao của hàm bộ lọc toggleSlider () {if ($ ('# bộ lọc'). Height ()! = 0) {$ ('# bộ lọc'). Animate ({height: '0 '}); } other {var $ selector = $ ('# bộ lọc'); $ selector .data ('oHeight', $ selector.height ()) .css ('height', 'auto') .data ('nHeight', $ selector.height ()) .height ($ selector.data (' oHeight ')) .animate ({height: $ selector.data (' nHeight ')}, 400); }; console.log ('agg'); }
Ricky

Hoạt động để làm cho div mở ra, nhưng không hoạt hình hơn 400ms. Có thể tôi có một cái gì đó khác được thiết lập khác, nhưng nó chỉ mở ra trong nháy mắt.
ntgCleaner

Hoạt động nhưng điều này đặt heightthành một giá trị cố định (ví dụ 122px). Phần tử của tôi đã thay đổi chiều cao sau một thời gian, vì vậy tôi phải thay thế đối số thời lượng (400) bằng các tùy chọn{duration: 400, complete: function() {$selector.css('height', 'auto');}}
jsruok

12

Điều này đang hoạt động và nó đơn giản hơn các giải pháp trước:

CSS:

#container{
  height:143px;  
}

.max{
  height: auto;
  min-height: 143px;
}

JS:

$(document).ready(function() {
    $("#container").click(function() {      
        if($(this).hasClass("max")) {
            $(this).removeClass("max");
        } else {
            $(this).addClass("max");
        }

    })
});

Lưu ý: Giải pháp này yêu cầu UI UI


1
Cần phải đề cập rằng điều này đòi hỏi plugin Jquery UI, trong khi câu hỏi ban đầu chỉ là về jquery. Nhưng nếu bạn đang sử dụng Jquery UI, nó sẽ hoạt động.
user56reinstatemonica8

4
bạn cũng có thể sử dụng $ (this) .toggleClass ('max', 250); thay vì sử dụng câu lệnh if
Antoine Hedgecock

1
Tại sao bạn bao gồm một giá trị thứ hai với .addClass.removeClass?
tô0stu

9
var h = document.getElementById('First').scrollHeight;
$('#First').animate({ height : h+'px' },300);

7

Bạn luôn có thể bọc các phần tử con của #first và lưu chiều cao chiều cao của trình bao bọc làm biến. Đây có thể không phải là câu trả lời đẹp nhất hoặc hiệu quả nhất, nhưng nó thực hiện các mẹo.

Đây là một câu đố trong đó tôi bao gồm một thiết lập lại.

nhưng với mục đích của bạn, đây là thịt & khoai tây:

$(function(){
//wrap everything inside #first
$('#first').children().wrapAll('<div class="wrapper"></div>');
//get the height of the wrapper 
var expandedHeight = $('.wrapper').height();
//get the height of first (set to 200px however you choose)
var collapsedHeight = $('#first').height();
//when you click the element of your choice (a button in my case) #first will animate to height auto
$('button').click(function(){
    $("#first").animate({
        height: expandedHeight            
    })
});
});​


5

Tôi quản lý để sửa nó: D đây là mã.

var divh = document.getElementById('first').offsetHeight;
$("#first").css('height', '100px');
$("div:first").click(function() {
  $("#first").animate({
    height: divh
  }, 1000);
});

4

Bạn có thể làm cho câu trả lời của Liquinaut phản ứng nhanh với thay đổi kích thước cửa sổ bằng cách thêm một cuộc gọi lại đặt chiều cao trở lại tự động.

$("#first").animate({height: $("#first").get(0).scrollHeight}, 1000, function() {$("#first").css({height: "auto"});});

4

Về cơ bản, chiều cao tự động chỉ có sẵn cho bạn sau khi phần tử được hiển thị. Nếu bạn đặt chiều cao cố định hoặc nếu phần tử của bạn không được hiển thị, bạn không thể truy cập nó mà không có bất kỳ thủ thuật nào.

May mắn thay, có một số thủ thuật bạn có thể sử dụng.

Sao chép phần tử, hiển thị nó bên ngoài khung nhìn cho nó độ cao tự động và bạn có thể lấy nó từ bản sao và sử dụng nó sau cho phần tử chính. Tôi sử dụng chức năng này và dường như hoạt động tốt.

jQuery.fn.animateAuto = function(prop, speed, callback){
    var elem, height, width;

    return this.each(function(i, el){
        el = jQuery(el), elem =    el.clone().css({"height":"auto","width":"auto"}).appendTo("body");
        height = elem.css("height"),
        width = elem.css("width"),
        elem.remove();

        if(prop === "height")
            el.animate({"height":height}, speed, callback);
        else if(prop === "width")
            el.animate({"width":width}, speed, callback);  
        else if(prop === "both")
            el.animate({"width":width,"height":height}, speed, callback);
    });   
}

SỬ DỤNG:

$(".animateHeight").bind("click", function(e){
    $(".test").animateAuto("height", 1000); 
});

$(".animateWidth").bind("click", function(e){
    $(".test").animateAuto("width", 1000);  
});

$(".animateBoth").bind("click", function(e){
    $(".test").animateAuto("both", 1000); 
});

1
Nếu bạn không muốn sử dụng chức năng đó, chỉ cần làm một cái gì đó như: var clone = Element.clone () clone.appendTo ('body') clone.css ('height', 'auto') var itemHeight = clone.outerHeight ( ); clone.remove () bây giờ bạn có chiều cao của mục trong biến itemHeight, vì vậy bạn có thể sử dụng nó cho nhiều mục đích hơn là chỉ hoạt hình.
Stan George

3

bạn luôn có thể làm điều này:

jQuery.fn.animateAuto = function(prop, speed, callback){
var elem, height, width;
return this.each(function(i, el){
    el = jQuery(el), elem = el.clone().css({"height":"auto","width":"auto"}).appendTo("body");
    height = elem.css("height"),
    width = elem.css("width"),
    elem.remove();

    if(prop === "height")
        el.animate({"height":height}, speed, callback);
    else if(prop === "width")
        el.animate({"width":width}, speed, callback);  
    else if(prop === "both")
        el.animate({"width":width,"height":height}, speed, callback);
});  
}

đây là một câu đố: http://jsfiddle.net/Zuriel/faE9w/2/


1
bạn có thể thay thế: .appendTo("body")bởi.appendTo(el.parent())
Steffi

2

Bộ chọn của bạn dường như không khớp. Phần tử của bạn có ID là 'đầu tiên' hay nó là phần tử đầu tiên trong mỗi div?

Một giải pháp an toàn hơn là sử dụng 'cái này':

// assuming the div you want to animate has an ID of first
$('#first').click(function() {
  $(this).animate({ height : 'auto' }, 1000);
});

1
Ah. Chà, có vẻ như bạn đã khám phá ra giải pháp. Để an toàn, tôi vẫn sẽ sử dụng $(this)bên trong trình xử lý nhấp chuột của bạn.
EMmerICH

10
animate({height: 'auto'})không có tác dụng gì. Ít nhất, không phải với jQuery 1.6.4.
Jāni Elmeris

2

Hãy thử cái này

var height;
$(document).ready(function(){
    $('#first').css('height','auto');
    height = $('#first').height();
    $('#first').css('height','200px');
})

 $("div:first").click(function(){
  $("#first").animate({
    height: height
  }, 1000 );
});

điều này sẽ không hoạt động chiều cao var của bạn chỉ có thể truy cập bên trong chức năng sẵn sàng.
meo

xác định chiều cao trước hàm sẵn sàng và chỉ sử dụng chiều cao hơn chiều cao var .. bằng cách này, nó có thể hoạt động được
Prakash

2

Đây là một hoạt động với BORDER-BOX ...

Chào các cậu. Đây là một plugin jQuery tôi đã viết để làm tương tự, nhưng cũng tính đến sự khác biệt về chiều cao sẽ xảy ra khi bạn đã box-sizingđặt border-box.

Tôi cũng bao gồm một plugin "yShrinkOut" để che giấu phần tử bằng cách thu nhỏ nó dọc theo trục y.


// -------------------------------------------------------------------
// Function to show an object by allowing it to grow to the given height value.
// -------------------------------------------------------------------
$.fn.yGrowIn = function (growTo, duration, whenComplete) {

    var f = whenComplete || function () { }, // default function is empty
        obj = this,
        h = growTo || 'calc', // default is to calculate height
        bbox = (obj.css('box-sizing') == 'border-box'), // check box-sizing
        d = duration || 200; // default duration is 200 ms

    obj.css('height', '0px').removeClass('hidden invisible');
    var padTop = 0 + parseInt(getComputedStyle(obj[0], null).paddingTop), // get the starting padding-top
        padBottom = 0 + parseInt(getComputedStyle(obj[0], null).paddingBottom), // get the starting padding-bottom
        padLeft = 0 + parseInt(getComputedStyle(obj[0], null).paddingLeft), // get the starting padding-left
        padRight = 0 + parseInt(getComputedStyle(obj[0], null).paddingRight); // get the starting padding-right
    obj.css('padding-top', '0px').css('padding-bottom', '0px'); // Set the padding to 0;

    // If no height was given, then calculate what the height should be.
    if(h=='calc'){ 
        var p = obj.css('position'); // get the starting object "position" style. 
        obj.css('opacity', '0'); // Set the opacity to 0 so the next actions aren't seen.
        var cssW = obj.css('width') || 'auto'; // get the CSS width if it exists.
        var w = parseInt(getComputedStyle(obj[0], null).width || 0) // calculate the computed inner-width with regard to box-sizing.
            + (!bbox ? parseInt((getComputedStyle(obj[0], null).borderRightWidth || 0)) : 0) // remove these values if using border-box.
            + (!bbox ? parseInt((getComputedStyle(obj[0], null).borderLeftWidth || 0)) : 0) // remove these values if using border-box.
            + (!bbox ? (padLeft + padRight) : 0); // remove these values if using border-box.
        obj.css('position', 'fixed'); // remove the object from the flow of the document.
        obj.css('width', w); // make sure the width remains the same. This prevents content from throwing off the height.
        obj.css('height', 'auto'); // set the height to auto for calculation.
        h = parseInt(0); // calculate the auto-height
        h += obj[0].clientHeight // calculate the computed height with regard to box-sizing.
            + (bbox ? parseInt((getComputedStyle(obj[0], null).borderTopWidth || 0)) : 0) // add these values if using border-box.
            + (bbox ? parseInt((getComputedStyle(obj[0], null).borderBottomWidth || 0)) : 0) // add these values if using border-box.
            + (bbox ? (padTop + padBottom) : 0); // add these values if using border-box.
        obj.css('height', '0px').css('position', p).css('opacity','1'); // reset the height, position, and opacity.
    };

    // animate the box. 
    //  Note: the actual duration of the animation will change depending on the box-sizing.
    //      e.g., the duration will be shorter when using padding and borders in box-sizing because
    //      the animation thread is growing (or shrinking) all three components simultaneously.
    //      This can be avoided by retrieving the calculated "duration per pixel" based on the box-sizing type,
    //      but it really isn't worth the effort.
    obj.animate({ 'height': h, 'padding-top': padTop, 'padding-bottom': padBottom }, d, 'linear', (f)());
};

// -------------------------------------------------------------------
// Function to hide an object by shrinking its height to zero.
// -------------------------------------------------------------------
$.fn.yShrinkOut = function (d,whenComplete) {
    var f = whenComplete || function () { },
        obj = this,
        padTop = 0 + parseInt(getComputedStyle(obj[0], null).paddingTop),
        padBottom = 0 + parseInt(getComputedStyle(obj[0], null).paddingBottom),
        begHeight = 0 + parseInt(obj.css('height'));

    obj.animate({ 'height': '0px', 'padding-top': 0, 'padding-bottom': 0 }, d, 'linear', function () {
            obj.addClass('hidden')
                .css('height', 0)
                .css('padding-top', padTop)
                .css('padding-bottom', padBottom);
            (f)();
        });
};

Bất kỳ tham số nào tôi sử dụng có thể được bỏ qua hoặc đặt thành null để chấp nhận giá trị mặc định. Các tham số tôi đã sử dụng:

  • growTo: Nếu bạn muốn ghi đè tất cả các tính toán và đặt chiều cao CSS mà đối tượng sẽ phát triển, hãy sử dụng tham số này.
  • thời lượng: Thời lượng của hình ảnh động ( rõ ràng ).
  • whenComplete: Một chức năng để chạy khi hoạt ảnh hoàn tất.

2

Chuyển đổi slide ( câu trả lời của Box9 được mở rộng)

$("#click-me").click(function() {
  var el = $('#first'),
  curHeight = el.height(),
  autoHeight = el.css('height', 'auto').height(),
  finHeight = $('#first').data('click') == 1 ? "20px" : autoHeight;
  $('#first').data('click', $(this).data('click') == 1 ? false : true);
  el.height(curHeight).animate({height: finHeight});
});
#first {width: 100%;height: 20px;overflow:hidden;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="first">
  <div id="click-me">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div>
  Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
</div>


1

Tôi đang đăng câu trả lời này mặc dù chủ đề này đã cũ. Tôi không thể có được câu trả lời được chấp nhận để làm việc cho tôi. Cái này hoạt động tốt và khá đơn giản.

Tôi tải chiều cao của mỗi div tôi muốn vào dữ liệu

$('div').each(function(){
    $(this).data('height',$(this).css('height'));
    $(this).css('height','20px');
});

Sau đó, tôi chỉ sử dụng khi hoạt hình trên nhấp chuột.

$('div').click(function(){
    $(this).css('height',$(this).data('height'));
});

Tôi đang sử dụng chuyển đổi CSS, vì vậy tôi không sử dụng hoạt hình jQuery, nhưng bạn có thể thực hiện hoạt động tương tự.


1

bạn có thể lưu trữ nó trong một thuộc tính dữ liệu.

$('.colapsable').each(function(){
    $(this).attr('data-oheight',$(this).height());
    $(this).height(100);
});

$('.colapsable h2:first-child').click(function(){
    $(this).parent('.colapsable').animate({
            height: $(this).parent('.colapsible').data('oheight')
        },500);
    }
});

Về cơ bản giống như một lớp lót của Hettler, nhưng dễ hiểu hơn.
Timothy Groote

1

Tôi cần chức năng này cho nhiều khu vực đọc nhiều hơn trên một trang thực hiện điều này thành một mã ngắn Wordpress mà tôi gặp phải vấn đề tương tự.

Về mặt kỹ thuật, tất cả các nhịp đọc trên trang đều có chiều cao cố định. Và tôi muốn có thể mở rộng chúng một cách riêng biệt lên một chiều cao tự động với một lần chuyển đổi. Nhấp chuột đầu tiên: 'mở rộng đến chiều cao đầy đủ của khoảng văn bản', nhấp chuột thứ hai: 'thu gọn trở lại chiều cao mặc định là 70px'

Html

 <span class="read-more" data-base="70" data-height="null">
     /* Lots of text determining the height of this span */
 </span>
 <button data-target='read-more'>Read more</button>

CSS

span.read-more {
    position:relative;
    display:block;
    overflow:hidden;
}

Vì vậy, ở trên này trông rất đơn giản data-basethuộc tính tôi cần để đặt chiều cao cố định cần thiết. Cácdata-height thuộc tính tôi sử dụng để lưu trữ các (động) thực tế chiều cao của phần tử.

Phần jQuery

jQuery(document).ready(function($){

  $.fn.clickToggle = function(func1, func2) {
      var funcs = [func1, func2];
      this.data('toggleclicked', 0);
      this.click(function() {
          var data = $(this).data();
          var tc = data.toggleclicked;
          $.proxy(funcs[tc], this)();
          data.toggleclicked = (tc + 1) % 2;
      });
      return this;
  };

    function setAttr_height(key) {
        $(key).each(function(){
            var setNormalHeight = $(this).height();
            $(this).attr('data-height', setNormalHeight);
            $(this).css('height', $(this).attr('data-base') + 'px' );
        });
    }
    setAttr_height('.read-more');

    $('[data-target]').clickToggle(function(){
        $(this).prev().animate({height: $(this).prev().attr('data-height')}, 200);
    }, function(){
        $(this).prev().animate({height: $(this).prev().attr('data-base')}, 200);
    });

});

Đầu tiên tôi đã sử dụng chức năng clickToggle cho lần nhấp đầu tiên và lần thứ hai. Hàm thứ hai quan trọng hơn: setAttr_height()Tất cả các .read-moreyếu tố có chiều cao thực tế của chúng được đặt khi tải trang trong base-heightthuộc tính. Sau đó, chiều cao cơ sở được thiết lập thông qua chức năng jquery css.

Với cả hai thuộc tính của chúng ta, giờ đây chúng ta có thể chuyển đổi giữa chúng một cách trơn tru. Chỉ data-basethay đổi chiều cao (cố định) mong muốn của bạn và chuyển lớp .read-more cho ID của riêng bạn

Tất cả bạn có thể thấy nó hoạt động trong một FIDDLE Fiddle

Không cần giao diện người dùng jQuery


1

Nếu tất cả những gì bạn muốn là hiển thị và ẩn nói div, thì mã này sẽ cho phép bạn sử dụng jQuery animate. Bạn có thể có jQuery làm động phần lớn chiều cao bạn muốn hoặc bạn có thể đánh lừa hoạt hình bằng cách hoạt hình thành 0px. jQuery chỉ cần một chiều cao được thiết lập bởi jQuery để chuyển đổi nó thành tự động. Vì vậy, .animate thêm style = "" vào phần tử mà .css (height: auto) chuyển đổi.

Cách sạch nhất mà tôi đã thấy công việc này là tạo hiệu ứng cho chiều cao xung quanh bạn mong đợi, sau đó để nó tự động và nó có thể trông rất liền mạch khi được thực hiện đúng. Bạn thậm chí có thể làm động quá khứ những gì bạn mong đợi và nó sẽ quay lại. Hoạt ảnh xuống 0px với thời lượng 0 chỉ đơn giản là giảm chiều cao phần tử xuống chiều cao tự động của nó. Đối với mắt người, dù sao trông nó cũng hoạt hình. Thưởng thức..

    jQuery("div").animate({
         height: "0px"/*or height of your choice*/
    }, {
         duration: 0,/*or speed of your choice*/
         queue: false, 
         specialEasing: {
             height: "easeInCirc"
        },
         complete: function() {
             jQuery(this).css({height:"auto"});
        }
    });

Xin lỗi tôi biết đây là một bài viết cũ, nhưng tôi cảm thấy nó có liên quan đến những người dùng đang tìm kiếm chức năng này với jQuery, người đã xem qua bài đăng này.


0

Tôi kết hợp một thứ gì đó làm chính xác những gì tôi đang tìm kiếm và trông thật tuyệt. Sử dụng scrollHeight của một phần tử giúp bạn có chiều cao khi được tải trong DOM.

 var clickers = document.querySelectorAll('.clicker');
    clickers.forEach(clicker => {
        clicker.addEventListener('click', function (e) {
            var node = e.target.parentNode.childNodes[5];
            if (node.style.height == "0px" || node.style.height == "") {
                $(node).animate({ height: node.scrollHeight });
            }
            else {
                $(node).animate({ height: 0 });
            }
        });
    });
.answer{
        font-size:15px;
        color:blue;
        height:0px;
        overflow:hidden;
       
    }
 <div class="row" style="padding-top:20px;">
                <div class="row" style="border-color:black;border-style:solid;border-radius:4px;border-width:4px;">
                    <h1>This is an animation tester?</h1>
                    <span class="clicker">click me</span>
                    <p class="answer">
                        I will be using this to display FAQ's on a website and figure you would like this.  The javascript will allow this to work on all of the FAQ divs made by my razor code.  the Scrollheight is the height of the answer element on the DOM load.  Happy Coding :)
                         Lorem ipsum dolor sit amet, mea an quis vidit autem. No mea vide inani efficiantur, mollis admodum accusata id has, eam dolore nemore eu. Mutat partiendo ea usu, pri duis vulputate eu. Vis mazim noluisse oportere id. Cum porro labore in, est accumsan euripidis scripserit ei. Albucius scaevola elaboraret usu eu. Ad sed vivendo persecuti, harum movet instructior eam ei.
                    </p>
                </div>
            </div>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.