JQuery দিয়ে অটো উচ্চতায় উপাদান অ্যানিমেট করুন


171

আমি একটি সজীব করতে চান <div>থেকে 200pxথেকে autoউচ্চতা। আমি যদিও এটি কাজ করে মনে হয় না। কেউ জানেন কীভাবে?

কোডটি এখানে:

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

14
আপনার গ্রহণযোগ্য হিসাবে সেরা উত্তর চিহ্নিত করা উচিত।
ক্লিনফ্রেন্ড


@ আইয়ানম্যাকিনন এই প্রশ্নের অবশ্যই আরও ভাল উত্তর আছে। আমি এটির সদৃশ হিসাবে প্রশ্নটি বন্ধ করে দিয়েছি।
মাদারার ঘোস্ট

উত্তর:


254
  1. বর্তমান উচ্চতা সংরক্ষণ করুন:

    var curHeight = $('#first').height();
  2. অস্থায়ীভাবে উচ্চতায় অটোতে স্যুইচ করুন:

    $('#first').css('height', 'auto');
  3. স্বয়ংক্রিয় উচ্চতা পান:

    var autoHeight = $('#first').height();
  4. এটিতে আবার স্যুইচ করুন curHeightএবং এনিমেট করুন autoHeight:

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

এবং একসাথে:

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

@ ড্যানিয়েল, আপনার জেএস কোডটি কোথায়? সেই বিট পোস্ট করুন এবং এইচটিএমএলের কিছু অংশ যা আপনার উল্লেখ করা উপাদানগুলি দেখায়।
ডেভিড টাং

21
এটি কাজ করে, তবে আমি একটি কলব্যাক যুক্ত করেছি যা উপাদানটিতে স্ব-বৃদ্ধি আচরণ পুনরুদ্ধার করে .animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
rg89

প্রতিক্রিয়াশীল ডিজাইনগুলিতে স্থির উচ্চতা নির্ধারণ সম্পর্কে সচেতন। যদি ব্যবহারকারী স্ক্রিনটির আকার পরিবর্তন করে তবে এটি একটি গোলযোগে পরিণত হয়। অ্যানিমেশনটি শেষ হয়ে গেলে 'অটো' তে উচ্চতা নির্ধারণ করা সেরা।
জোনাথন টঙ্গে

4
এটিতে এফওউসি হওয়ার সম্ভাবনা রয়েছে। ব্যবহারকারী অ্যানিমেট করার আগে দ্বিতীয় বিভাজনের জন্য উপাদানটিকে উচ্চতাতে পুরো লাফটি দেখতে পাবে।
ডিজ্রেডিয়েন্ট

1
প্রাথমিকভাবে উপাদানটি opacity: 0; position: absolute;পরিমাপ করার সময় এটি দেওয়ার পরে এবং আপনার কাজ শেষ হয়ে গেলে আপনি এফওউসি ("আনস্টাইলযুক্ত সামগ্রীর ফ্ল্যাশ") প্রতিরোধ করতে পারেন ।
জ্যাকবভেলিন

194

আইএমও এটিই সবচেয়ে পরিষ্কার এবং সহজ সমাধান:

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

ব্যাখ্যা: ডিওএম ইতিমধ্যে তার প্রারম্ভিক রেন্ডারিং থেকে জেনে গেছে যে অটো উচ্চতায় সেট করার সময় বর্ধিত ডিভের আকারটি কী হবে। এই সম্পত্তিটি ডোম নোড হিসাবে সংরক্ষণ করা হয় scrollHeight। আমাদের কেবল কল করে jQuery এলিমেন্ট থেকে DOM এলিমেন্টটি আনতে হবে get(0)এবং তারপরে আমরা সম্পত্তিটি অ্যাক্সেস করতে পারি।

অ্যানিমেশনটি সম্পূর্ণ হওয়ার পরে (ক্রেডিট ক্রিস-উইলিয়ামস ) অটোতে উচ্চতা নির্ধারণের জন্য একটি কলব্যাক ফাংশন যুক্ত করা আরও বেশি প্রতিক্রিয়াশীলতার অনুমতি দেয় :

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

2
অ্যামেজিং! বিকাশকারী.মোজিলা.অর্গ.এইন- ইউএস / ডকস / clientHeightওয়েবে / এপিআই / এলিમેન્ટ.স্ক্রোলহাইট অনুসারে এটি আইই 8 তে সমর্থিত, তুলনা করা হয়েছে , যা অসমর্থিত বলে মনে হচ্ছে: বিকাশকারী.মোজিলা.অর্গ /
সেভেন

1
মার্জিনটি বাক্সের মডেলের সংজ্ঞা অনুসারে কোনও বস্তুর উচ্চতার অংশ নয়। যদিও আপনি সর্বদা নিজেকে মার্জিন যুক্ত করতে পারেন।
লিকুইনট

22
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি কোনও
ঝাঁকুনি

7
আমিও মনে করি এটিই সেরা সমাধান। আরও সাড়া পাওয়ার জন্য অটোতে উচ্চতা নির্ধারণ করতে আমি এটিতে একটি কলব্যাক ফাংশন যুক্ত করব। $('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
ক্রিস উইলিয়ামস

1
বাহ, এটি সুপার মার্জিত। এটি scrollWidthপ্রস্থ অ্যানিমেশনগুলির জন্যও কাজ করে ।
শনিবার

24

এটি মুলত Box9 দ্বারা উত্তর হিসাবে একই পন্থা কিন্তু আমি একটা চমৎকার সেটিকে মোড়ে jQuery প্লাগিন যে একটি নিয়মিত সজীব হিসাবে একই আর্গুমেন্ট লাগে যখন আপনি আরো প্রাণবন্ত পরামিতি আছে এবং বহুবার একই কোড পুনরায় ক্লান্ত পেতে প্রয়োজন জন্য, :

;(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);

সম্পাদনা করুন: শৃঙ্খলাবদ্ধ এবং এখন ক্লিনার


23

আপনার উপাদানটির উচ্চতা নির্ধারণ করার জন্য আরও ভাল সমাধান জেএসের উপর নির্ভর করবে না। নিম্নলিখিতটি একটি সমাধান যা স্থির উচ্চতার উপাদানটিকে পূর্ণ ("অটো") উচ্চতায় অ্যানিমেট করে:

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
এই অনলাইনারটি বোঝা সহজ নয়, বেশ কয়েকটি লাইন লেখার ফলে অন্যদের আরও কিছুটা ভাল হতে পারে।
জাপ

এটি সেরা সমাধান কারণ যদি ব্যবহারকারী উইন্ডোর আকার সামঞ্জস্য করে তবে স্বয়ংক্রিয় উচ্চতা পরিবর্তন হতে পারে। নিম্নলিখিতটি দেখুন: // ফিল্টার ফাংশন টগলস্লাইডার () {যদি ($ ('# ফিল্টার')। উচ্চতা ()! = 0) {$ ('# ফিল্টার') এর উচ্চতা অ্যানিমেট করে an '}); } অন্য {var $ নির্বাচক = $ ('# ফিল্টার'); $ নির্বাচক .ডাটা ('ওহাইট', $ নির্বাচক.হাইট ()) .সিএসএস ('উচ্চতা', 'স্বয়ং') .ডাটা ('এনহাইট', $ নির্বাচক.হাইট ()) উচ্চতা ($ নির্বাচক.ডেটা (' ওহাইট ')) অ্যানিম্যাট ({উচ্চতা: $ নির্বাচক.ডাটা (' এনহাইট ')}, 400); }; console.log ( 'agg'); }
রিকি

ডিভিটি উন্মুক্ত করার জন্য কাজ করে, তবে 400 মিমি ধরে অ্যানিমেট করে না। হয়তো আমার কাছে অন্য কিছু সেট করা আছে, তবে এটি কেবল এক ঝলক খোলে।
ntgCleaner

কাজ করে তবে এটি heightএকটি নির্দিষ্ট মান (যেমন 122px) এ সেট করে। আমার উপাদানটি কিছুক্ষণ পরে উচ্চতা পরিবর্তন করেছে, সুতরাং আমাকে বিকল্পগুলির সাথে সময়কাল যুক্তি (400) প্রতিস্থাপন করতে হবে{duration: 400, complete: function() {$selector.css('height', 'auto');}}
jsruok

12

এটি কাজ করছে এবং এটি আগে সহজ সমাধানগুলির আগে:

সিএসএস:

#container{
  height:143px;  
}

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

জাতীয়:

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

    })
});

দ্রষ্টব্য: এই সমাধানটির জন্য jQuery UI প্রয়োজন


1
এটি উল্লেখ করা উচিত যে এর জন্য জ্যাকারি ইউআই প্লাগইন প্রয়োজন, যখন মূল প্রশ্নটি একা জ্যাকারি সম্পর্কিত। তবে আপনি যদি জ্যাকুরি ইউআই ব্যবহার করছেন তবে এটি কার্যকর হয়।
user56reinstatemonica8

4
আপনি $ (এটি)। টগলক্লাস ('সর্বোচ্চ', 250) ব্যবহার করতে পারেন; ইফ স্টেটমেন্টটি ব্যবহার করার পরিবর্তে
এন্টোইন হেজকক

1
আপনি কেন .addClassএবং এর সাথে একটি দ্বিতীয় মান অন্তর্ভুক্ত করছেন .removeClass?
বাউল0stu


7

আপনি সর্বদা # ফার্স্টের শিশু উপাদানগুলিকে মোড়তে পারেন এবং একটি পরিবর্তনক হিসাবে মোড়কের উচ্চতার উচ্চতা সংরক্ষণ করতে পারেন। এটি সবচেয়ে সুন্দর বা সবচেয়ে কার্যকর উত্তর নাও হতে পারে, তবে এটি কৌশলটি করে।

এখানে একটি ঝাঁকুনিআমি একটি রিসেট অন্তর্ভুক্ত যেখানে ।

তবে আপনার উদ্দেশ্যে, আমিষ এবং আলু এখানে:

$(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

ব্যবহারের slideDown এবং slideUp

$("div:first").click(function(){ $("#first").slideDown(1000); });

1
এটি উচ্চতা সমাধান করে না: স্লাইডআপের ফলে স্বয়ংক্রিয় ক্রিয়াটি ডিভটি সম্পূর্ণরূপে ভেঙে যাবে।
জাপ

5

আমি এটিকে ঠিক করতে পেরেছি: ডি কোডটি হের করে।

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

4

আপনি লিকুইনউটের উত্তরটি উইন্ডো আকারের পরিবর্তনের জন্য প্রতিক্রিয়াশীল করতে পারেন যাতে একটি কলব্যাক যোগ করে উচ্চতাটিকে অটোতে ফিরিয়ে দেয়।

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

4

মূলত এলিমেন্টটি রেন্ডার করার পরে উচ্চতার অটো কেবল আপনার জন্য উপলব্ধ। আপনি যদি একটি নির্দিষ্ট উচ্চতা সেট করেন, বা যদি আপনার উপাদান প্রদর্শিত না হয় তবে আপনি কোনও কৌশল ছাড়া এটিকে অ্যাক্সেস করতে পারবেন না।

ভাগ্যক্রমে কিছু কৌশল আপনি ব্যবহার করতে পারেন।

উপাদানটি ক্লোন করুন, এটিকে উচ্চতার স্বতঃপ্রকাশের দৃশ্যের বাইরে প্রদর্শন করুন এবং আপনি এটি ক্লোন থেকে নিতে পারেন এবং পরে এটি মূল উপাদানটির জন্য ব্যবহার করতে পারেন। আমি এই ফাংশনটি ব্যবহার করি এবং ভালভাবে কাজ করছে বলে মনে হচ্ছে।

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);
    });   
}

ব্যবহার:

$(".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
আপনি যদি সেই ফাংশনটি ব্যবহার করতে না চান তবে ঠিক তেমন কিছু করুন: var ক্লোন = এলিমেন্ট.ক্লোন () ক্লোন.অ্যাপেন্ডটো ('বডি') ক্লোনকএসএস ('উচ্চতা', 'অটো') ভার আইটেম হাইট = ক্লোন.উটারহাইট ( ); clone.remove () এখন আপনার আইটেমের উচ্চতা ভেরিয়েবলে আপনার আইটেমের উচ্চতা রয়েছে, তাই আপনি এটিকে কেবল অ্যানিমেশনের চেয়ে বেশি ব্যবহার করতে পারেন।
স্ট্যান জর্জে

3

আপনি সর্বদা এটি করতে পারেন:

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);
});  
}

এখানে একটি বেহালতা: http://jsfiddle.net/Zuriel/faE9w/2/


1
আপনি প্রতিস্থাপন করতে পারেন: .appendTo("body")দ্বারা.appendTo(el.parent())
স্টেফি

2

আপনার নির্বাচকদের মিল আছে বলে মনে হচ্ছে না। আপনার উপাদানটির কি 'ফার্স্ট' আইডি রয়েছে, বা এটি প্রতিটি ডিভের মধ্যে প্রথম উপাদান?

একটি নিরাপদ সমাধান 'এটি' ব্যবহার করা হবে:

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

1
আহ। ঠিক আছে, মনে হয় আপনি সমাধানটি আবিষ্কার করেছেন। সুরক্ষার জন্য, আমি এখনও $(this)আপনার ক্লিক হ্যান্ডলারের ভিতরে ব্যবহার করব ।
এমিরিক

10
animate({height: 'auto'})কোন প্রভাব আছে। কমপক্ষে, jQuery 1.6.4 এর সাথে নয়।
জনিস এলমারিস

2

আর একবার চেষ্টা কর ,

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 );
});

এটি কাজ করবে না আপনার ভার উচ্চতা প্রস্তুত ফাংশনটির ভিতরে কেবল অ্যাক্সেসযোগ্য।
মেও

প্রস্তুত কার্যের আগে উচ্চতা সংজ্ঞায়িত করুন এবং বৈ উচ্চতার চেয়ে কেবল উচ্চতা ব্যবহার করুন .. এটি ড্যানিয়েল কাজ করতে পারে
প্রকাশ

2

এখানে একটি যা বর্ডার-বাক্সের সাথে কাজ করে ...

হাই বন্ধুরা এখানে একই কাজ করতে আমি লিখেছি এমন একটি jQuery প্লাগইন, তবে উচ্চতা পার্থক্যের জন্যও অ্যাকাউন্ট যা আপনি box-sizingসেট করার পরে ঘটবে border-box

আমি একটি "yShrinkOut" প্লাগইনও অন্তর্ভুক্ত করেছি যা 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)();
        });
};

আমি ব্যবহৃত প্যারামিটারগুলির মধ্যে কোনওটি ডিফল্ট মানগুলি গ্রহণ করার জন্য বাদ দিতে বা নালায় সেট করা যেতে পারে। আমি ব্যবহৃত প্যারামিটারগুলি:

  • গ্রেটটো: আপনি যদি সমস্ত গণনা ওভাররাইড করতে চান এবং সিএসএসের উচ্চতাটি সেট করতে চান যা অবজেক্টটি বৃদ্ধি পাবে, এই পরামিতিটি ব্যবহার করুন।
  • সময়কাল: অ্যানিমেশনের সময়কাল ( স্পষ্টতই )।
  • কখন কমপ্লিট: অ্যানিমেশন সম্পূর্ণ হয়ে গেলে চালানোর জন্য একটি ফাংশন।

2

টগল স্লাইড ( Box9 এর উত্তর প্রসারিত)

$("#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

এই থ্রেডটি পুরানো হলেও আমি এই উত্তরটি পোস্ট করছি। আমার পক্ষে কাজ করার জন্য আমি গ্রহণযোগ্য উত্তর পেতে পারি না। এই এক ভাল কাজ করে এবং বেশ সহজ।

আমি প্রতিটি ডিভের উচ্চতাটি ডেটাতে লোড করি

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

তারপরে আমি ক্লিক করে অ্যানিমেট করার সময় এটি ব্যবহার করি।

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

আমি সিএসএস ট্রানজিশন ব্যবহার করছি, তাই আমি jQuery অ্যানিমেট ব্যবহার করি না, তবে আপনি ঠিক একইভাবে অ্যানিমেট করতে পারেন।


1

আপনি এটি একটি ডেটা অ্যাট্রিবিউটে সংরক্ষণ করতে পারেন।

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

মূলত হিটলারের ওয়ান লাইনারের সমান, তবে বোঝা সহজ।
তীমথিয় গ্রুটে

1

আমি একই সমস্যায় পড়ে আমি ওয়ার্ডপ্রেস শর্টকোডে এটি প্রয়োগ করে এক পৃষ্ঠায় একাধিক পঠনের আরও একাধিক অঞ্চল পড়ার জন্য আমার এই কার্যকারিতাটির প্রয়োজন।

প্রযুক্তিগতভাবে পৃষ্ঠায় আরও বেশি পড়ার স্প্যানগুলির নকশাটির নির্দিষ্ট উচ্চতা রয়েছে। এবং আমি এগুলি টগল সহ একটি অটো উচ্চতায় আলাদাভাবে প্রসারিত করতে সক্ষম হতে চাই। প্রথম ক্লিক: 'পাঠ্যের স্প্যানের পুরো উচ্চতায় প্রসারিত করুন', দ্বিতীয় ক্লিক: '70px ডিফল্ট উচ্চতায় ফিরে যাওয়া'

এইচটিএমএল

 <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>

সিএসএস

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

সুতরাং উপরে এটি খুব সহজ দেখায় data-baseযে নির্দিষ্ট বৈশিষ্ট্যটি আমাকে প্রয়োজনীয় উচ্চতা সেট করতে হবে। দ্যdata-heightউপাদানটির আসল (গতিশীল) উচ্চতা সঞ্চয় করার জন্য আমি বৈশিষ্ট্যটি ব্যবহার করেছি

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);
    });

});

প্রথম আমি আমার প্রথম এবং দ্বিতীয় ক্লিকের জন্য একটি ক্লিক টগল ফাংশন ব্যবহার করেছি। দ্বিতীয় ফাংশন বেশি গুরুত্বপূর্ণ: setAttr_height()সব .read-moreউপাদান তাদের প্রকৃত উচ্চতা পৃষ্ঠার লোড সেট base-heightঅ্যাট্রিবিউট। এর পরে বেস উচ্চতা jquery CSS ফাংশনের মাধ্যমে সেট করা হয়।

আমাদের উভয় বৈশিষ্ট্য সেট করে আমরা এখন তাদের মধ্যে একটি মসৃণ উপায়ে টগল করতে পারি। কেবলমাত্র data-baseআপনার পছন্দসই (স্থির) উচ্চতায় চ্যাং করুন এবং আপনার নিজের আইডির জন্য আরও বেশি পড়ুন class

আপনি সকলেই এটিকে এক ঝাঁকুনির মতো কাজ করতে দেখতে পারেন ID

কোন jQuery UI প্রয়োজন


1

আপনি যদি যা চান তার সবই যদি একটি ডিআইভি বলতে দেখাতে এবং আড়াল করতে হয় তবে এই কোডটি আপনাকে jQuery অ্যানিমেট ব্যবহার করতে দেবে। আপনি jQuery আপনার সর্বাধিক উচ্চতার অ্যানিমেট করতে পারেন বা আপনি 0 পিএক্স এনিমেট করে অ্যানিমেট ট্রিক করতে পারেন। jQuery এর অটোতে রূপান্তর করতে jQuery দ্বারা একটি উচ্চতা সেট করা দরকার। সুতরাং .animate .css (উচ্চতা: স্বতঃ) রূপান্তর করে এমন উপাদানটিতে শৈলী = "" যোগ করে।

এই কাজটি আমি সবচেয়ে পরিষ্কারভাবে দেখেছি যেটি আপনি প্রত্যাশিত উচ্চতার চারদিকে সঞ্চারিত হ'ল, তারপরে এটি স্বয়ংক্রিয় সেট করুন এবং সঠিক হয়ে গেলে এটি খুব বিজোড় দেখাবে। এমনকি আপনি যা প্রত্যাশা করেছেন তা অতীতকেও প্রাণবন্ত করে তুলতে পারেন এবং এটি ফিরে আসবে। 0 পিএক্স সময়কালে 0 পিএক্স এনিম্যাট করা কেবলমাত্র উপাদানটির উচ্চতাটিকে তার স্বয়ংক্রিয় উচ্চতায় ফেলে দেয়। মানুষের চোখে এটিকে যেভাবেই অ্যানিমেটেড দেখাচ্ছে। উপভোগ করুন ..

    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"});
        }
    });

দুঃখিত, আমি জানি এটি একটি পুরানো পোস্ট, তবে আমি অনুভব করেছি যে এই কার্যকারিতাটি অনুসন্ধানকারী ব্যবহারকারীদের সাথে এই পোস্টটি জুড়ে আসা jQuery এর সাথে প্রাসঙ্গিক হতে পারে।


0

আমি এমন কিছু একসাথে রেখেছি যা হ'ল যা আমি খুঁজছিলাম এবং দুর্দান্ত দেখায় does কোনও উপাদানের স্ক্রোলহাইট ব্যবহার করা আপনাকে ডিওএম-এ লোড করার সময় উচ্চতা দেয় the

 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>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.