আপনি কোনও উপাদানটির রেন্ডারড উচ্চতা কীভাবে পাবেন?


405

আপনি কোনও উপাদানটির রেন্ডারড উচ্চতা কীভাবে পাবেন?

ধরা যাক আপনার <div>ভিতরে কিছু সামগ্রী সহ একটি উপাদান রয়েছে। এই লিখিত সামগ্রীটির উচ্চতা প্রসারিত করতে চলেছে <div>। আপনি স্পষ্টভাবে উচ্চতা সেট না করে আপনি কীভাবে "রেন্ডার" উচ্চতা পাবেন। স্পষ্টতই, আমি চেষ্টা করেছি:

var h = document.getElementById('someDiv').style.height;

এটি করার কোনও কৌশল আছে? আমি jQuery ব্যবহার করছি যদি এটি সাহায্য করে।


এই উত্তরটি দেখুন stackoverflow.com/questions/19581307/...
KarSho

উত্তর:


183

এটা ঠিক হওয়া উচিত

$('#someDiv').height();

jQuery সহ। এটি একটি সংখ্যা হিসাবে মোড়ানো সেটটিতে প্রথম আইটেমের উচ্চতা পুনরুদ্ধার করে।

ব্যবহার করার চেষ্টা করছি

.style.height

আপনি যদি সম্পত্তিটি প্রথম স্থানে সেট করেন তবে কেবলমাত্র কাজ করে। খুব দরকারী না!


1
একটি শব্দ - দুর্দান্ত! সবার অংশগ্রহণের জন্য ধন্যবাদ। এই থ্রেডে প্রচুর ভাল তথ্য। এটি আমাকে সিএসএস ব্যবহার করে পৃষ্ঠাগুলি কেন্দ্রের অনুমতি দেবে তবে সিএসএস হ্যাকভিলিতে ভেন্টরিচার না করে "কনটেইনার" ডিভের সামগ্রিক উচ্চতা সঠিক করতে jQuery ব্যবহার করবে। আবার ধন্যবাদ.
বুডিজো

3
এমনকি আপনি jQuery বা ক্যান্ট না ব্যবহার করছেন বা না চাইলে আমি দৃ off়ভাবে পরামর্শ দিচ্ছি যে কেবলমাত্র অফসেটহাইট ব্যবহার করে এটি প্রয়োগ করা কাউকেই এগিয়ে যায় এবং jQuery উত্সটি ডাউনলোড করে এবং তারা যে কোডটি ব্যবহার করে তা সন্ধানের জন্য "উচ্চতা" অনুসন্ধান করে। সেখানে প্রচুর ক্রেজি জিনিস চলছে!
সাইমন_উইভার

1
@ ম্যাটজক্রামনি - এই প্রশ্নোত্তরটি 5 বছর আগে শেষ হয়েছিল । ওপি ইতিমধ্যে তাদের সাইটে একই / অনুরূপ যুক্তি পুনঃ-প্রয়োগের পরিবর্তে তাদের সাইটে jQuery ব্যবহার করছিল, কেন এটি ইতিমধ্যে একটি লাইন jQuery ফাংশনটি ব্যবহার করবে না? আমি সম্মত হই যে jQuery অনেক কিছুর জন্য ওভারকিল এবং আমি ভ্যানিলা জেএসকে ভয় পাই না, তবে যখন কোনও লাইব্রেরিতে কোনও ফাংশন থাকে যা আপনার প্রয়োজন মতো করে, তখন এটি বিশেষত কারণে বিশেষত কারণে এটি ব্যবহার না করা নির্বোধ বলে মনে হয় "এখানে আবিষ্কার করা হয়নি"
রাশ ক্যাম

3
@matejkramny প্রশ্ন জিজ্ঞাসা করার সময় ওপিদের উদ্দেশ্যটি ছিল ডিওমে এবং পর্দার আড়ালে কী ঘটছে তা বুঝতে না পেরে উপাদানটির রেন্ডারড উচ্চতা পাওয়া; যদি তাদের উদ্দেশ্য ছিল, তারা ভুল প্রশ্ন জিজ্ঞাসা করেছিল। আমি সম্মত হই যে লোকেরা তাদের ব্যবহৃত গ্রন্থাগারগুলি এবং ফ্রেমওয়ার্কগুলি বোঝার দিকে ঝোঁক হওয়া উচিত, জ্ঞান শক্তি এবং এগুলি সমস্ত কিছু, তবে কখনও কখনও কেবল একটি নির্দিষ্ট প্রশ্নের উত্তর চায়। প্রকৃতপক্ষে, উপরের মন্তব্যগুলি পর্দার আড়ালে কী ঘটছে তা বোঝার জন্য ইতিমধ্যে jQuery কোডটি অনুসন্ধান করার পরামর্শ দেয়।
রাশ ক্যাম

21
ওপি-র জন্য, jQuery ব্যবহার করা একটি বৈধ উত্তর। তখন থেকে বিশ্বের অন্যান্য অংশগুলিতে এটি দেখার জন্য, অ-জিকিউরি উত্তরটি সবচেয়ে ভাল। সম্ভবত এসওকে সেই বাস্তবতার সাথে খাপ খাইয়ে নিতে হবে, সম্ভবত সর্বাধিক ভোট দেওয়া উত্তরগুলি কোনওভাবে গ্রহণযোগ্য উত্তরগুলির চেয়ে বেশি হাইলাইট করা উচিত।
দিমিত্রিস

1219

এর মধ্যে একটি ব্যবহার করে দেখুন:

var h = document.getElementById('someDiv').clientHeight;
var h = document.getElementById('someDiv').offsetHeight;
var h = document.getElementById('someDiv').scrollHeight;

clientHeight উচ্চতা এবং উল্লম্ব প্যাডিং অন্তর্ভুক্ত।

offsetHeight উচ্চতা, উল্লম্ব প্যাডিং এবং উল্লম্ব সীমানা অন্তর্ভুক্ত।

scrollHeight অন্তর্ভুক্ত নথির উচ্চতা (স্ক্রোলিংয়ের ক্ষেত্রে কেবল উচ্চতার চেয়ে বেশি হবে), উল্লম্ব প্যাডিং এবং উল্লম্ব সীমানাগুলি অন্তর্ভুক্ত।


3
ধন্যবাদ, আমি এই সম্পত্তি সম্পর্কে জানতাম না। এটি আইই 8 + সামঞ্জস্যপূর্ণ।
লুয়েবেটো

ক্লায়েন্টহাইটের অর্থ নিয়ে আমি হতবাক হয়েছি। আমার একটি ডিভ উপাদান রয়েছে যাতে এতে পি উপাদানগুলির একগুচ্ছ রয়েছে এবং সামগ্রীটি ব্রাউজারের দৃশ্যমান অঞ্চল থেকে অনেক নিচে চলে গেছে। এবং আমি ক্লায়েন্টহাইটটি রেন্ডার্ড উচ্চতা দেওয়ার জন্য এবং পুরো দৈর্ঘ্য দেওয়ার জন্য স্ক্রোলহাইটটি প্রত্যাশা করেছি। তবে তারা প্রায় সমান (কেবলমাত্র মার্জিন, প্যাডিং ইত্যাদির দ্বারা পৃথক)।
বাহটি

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

4
দুর্দান্ত উত্তর, কিন্তু যৌক্তিকভাবে, কোনও উপাদানের উচ্চতাকে প্রভাবিত করে এমন সীমানা হ'ল শীর্ষ এবং নীচের সীমানা, যা অনুভূমিক। এই উত্তরটি তাদের "উল্লম্ব সীমানা" হিসাবে উল্লেখ করে। ভেবেছিলাম আমি আমার 2 সেন্ট ড্রপ করব
কেহলান ক্রুমমে

1
আমি যা জানি তা থেকে, যদি স্ক্রোল দেখানো হয় তবে স্ক্রোল .clientWidth/.clientHeight প্রস্থকে অন্তর্ভুক্ত করবেন না । আপনি যদি স্ক্রোল প্রস্থ অন্তর্ভুক্ত করতে চান তবে element.getBoundingClientRect().width পরিবর্তে ব্যবহার করতে পারেন
দিমিত্রি গনচর

151

কোনও উত্তর নেই, যেহেতু elem.style.heightএই উত্তরের উপরে ব্যবহার করে বেশ কয়েকটি লিঙ্ক রয়েছে ...

অনন্য উচ্চতা:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHight

document.getElementById(id_attribute_value).clientHeight;

বাইরের উচ্চতা:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight

document.getElementById(id_attribute_value).offsetHeight; 

বা আমার প্রিয় উল্লেখগুলির মধ্যে একটি: http://youmightnotneedjquery.com/


49

আপনি .outerHeight()এই উদ্দেশ্যে ব্যবহার করতে পারেন ।

এটি আপনাকে উপাদানটির পুরো রেন্ডারড উচ্চতা দেবে। এছাড়াও, আপনাকে কোনও css-heightউপাদান সেট করার দরকার নেই । সতর্কতার জন্য আপনি এর উচ্চতা অটো রাখতে পারেন যাতে এটি সামগ্রীর উচ্চতা অনুযায়ী রেন্ডার করা যায়।

//if you need height of div excluding margin/padding/border
$('#someDiv').height();

//if you need height of div with padding but without border + margin
$('#someDiv').innerHeight();

// if you need height of div including padding and border
$('#someDiv').outerHeight();

//and at last for including border + margin + padding, can use
$('#someDiv').outerHeight(true);

এই ফাংশনটির স্পষ্ট দেখার জন্য আপনি এখানে jQuery এর সাইট বা একটি বিস্তারিত পোস্টের জন্য যেতে পারেন ।

এটি / / এর মধ্যে পার্থক্য পরিষ্কার করবে.height()innerHeight()outerHeight()


1
ধন্যবাদ। ফ্লোটের সাথে কাজ করতে গিয়ে আমি উচ্চতা অটো নিয়ে অনেক সমস্যায় পড়েছিলাম তবে তখন অনভিজ্ঞ। আমি সাধারণত কিছু জটিল লেআউট স্ক্রিপ্ট ব্যতীত উচ্চতা নির্ধারণ করি না যেখানে আমি প্রাথমিকভাবে ক্ষেত্রটি সাফ করে দিয়েছি তবে এটি প্রতিটি ব্লকের (ডিভ) সমান হবে যা একই শীর্ষে শেষ হয়। এমনকি উইন্ডোজগুলির আকার পরিবর্তন করার সময় ব্লকগুলির মধ্যে একটি পিক্সেল পার্থক্য লেআউটটিকে স্ক্রু করতে পারে।
ডিহর্স

1
বিটিডাব্লু, আমি মনে করি অফসেটের মার্জিনগুলি সম্পর্কিত যা কিছুগুলি ব্রাউজার সংস্করণ নির্ভর নির্ভর করে এটি মুছে ফেলে।
ডিহর্স

2
প্রশ্ন jQuery জন্য কল না। বিতৃষ্ণা।
dthree

1
@ ডিথ্রি আমি মনে করি তিনি স্পষ্টভাবে উল্লেখ করেছেন যে তিনি jQuery ব্যবহার করছেন। (এছাড়াও ট্যাগগুলিতে অন্তর্ভুক্ত রয়েছে) :)
খোলা এবং

44

আমি এটি একটি উপাদানের উচ্চতা পেতে (ফ্লোট ফেরত দেয়) পেতে ব্যবহার করি :

document.getElementById('someDiv').getBoundingClientRect().height

আপনি ভার্চুয়াল ডিওএম ব্যবহার করার সময় এটিও কাজ করে । আমি ভ্যুতে এটি ব্যবহার করি:

this.$refs['some-ref'].getBoundingClientRect().height

1
getBoundingClientRect ()। উচ্চতা একটি ভাসমান-পয়েন্ট নম্বর দেয় (অন্যরা পূর্ণসংখ্যার দিকে ফিরে আসে), দুর্দান্ত :)
এরি

31
style = window.getComputedStyle(your_element);

তারপরে সহজভাবে: style.height


14

অবশ্যই ব্যবহার

$('#someDiv').height()   // to read it

অথবা

$('#someDiv').height(newHeight)  // to set it

আমি এটি একটি অতিরিক্ত উত্তর হিসাবে পোস্ট করছি কারণ আমি সবেমাত্র কয়েকটি গুরুত্বপূর্ণ বিষয় শিখেছি।

আমি এখনই অফসেটহাইট ব্যবহারের ফাঁদে পড়েছি। এটাই হযেছিল :

  • আমার উপাদানটির কী বৈশিষ্ট্য রয়েছে তা 'দেখার' জন্য আমি একটি ডিবাগার ব্যবহার করার ভাল পুরানো কৌশলটি ব্যবহার করেছি
  • আমি যেটির মূল্য আশা করছিলাম তার আশেপাশে কোনটির একটি মূল্য রয়েছে
  • এটি অফসেটহাইট ছিল - তাই আমি এটি ব্যবহার করেছি।
  • তখন আমি বুঝতে পেরেছিলাম এটি কোনও লুকানো ডিআইভির সাথে কাজ করে না
  • আমি ম্যাক্সহাইট গণনা করার পরে লুকানোর চেষ্টা করেছি কিন্তু এটি দেখতে আনাড়ি - একটি জগাখুশিতে পড়ে গেল।
  • আমি একটি অনুসন্ধান করেছি - আবিষ্কার করেছি jQuery.height () - এবং এটি ব্যবহার করেছি
  • উচ্চতা খুঁজে পেয়েছে () এমনকি লুকানো উপাদানগুলিতেও কাজ করে
  • শুধু মজাদার জন্য আমি উচ্চতা / প্রস্থের jQuery প্রয়োগ পরীক্ষা করেছিলাম

এখানে এটির একটি অংশ রয়েছে:

Math.max(
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
Math.max(document.body["offset" + name], document.documentElement["offset" + name])
) 

হ্যাঁ এটি দুটি স্ক্রোল এবং অফসেটের দিকে তাকায়। যদি এটি ব্যর্থ হয় তবে অ্যাকাউন্ট ব্রাউজার এবং সিএসএস সামঞ্জস্যতার সমস্যাগুলি গ্রহণ করে এটি আরও আরও বেশি দেখায়। অন্য কথায় স্টুফ আমি এ সম্পর্কে যত্নবান নই - বা চাই।

তবে আমার দরকার নেই। ধন্যবাদ jQuery!

গল্পটির নৈতিকতা: jQuery এর কোনও কারণের জন্য যদি কোনও পদ্ধতি থাকে তবে এটি সম্ভবত কোনও ভাল কারণে, সম্ভবত তুলনামূলকভাবে সম্পর্কিত।

আপনি যদি সম্প্রতি jQuery পদ্ধতির তালিকার মাধ্যমে না পড়ে থাকেন তবে আমি আপনাকে একবার দেখার পরামর্শ দিই।


প্রশ্ন পর্যায়ে আপনার অন্যান্য মন্তব্য দেখেছি। আমি jQuery এ বিক্রি করছি। কিছুক্ষণ হয়ে গেছে। কিন্তু এই চুক্তি সিল। আমি সত্যিকারের প্রেমে আছি যে এই সহজ জিনিসটি আমার জন্য 100s লেআউট সমস্যা সমাধান করতে চলেছে (বেশিরভাগ ইন্ট্রনেট সাইটগুলিতে যেখানে আমি জানি জাভাস্ক্রিপ্ট চলছে)।
বাডিজে

13
document.querySelector('.project_list_div').offsetHeight;

4
আপনার সমাধানটিতে ব্যাখ্যা যুক্ত করুন
ফ্রিল্যান্সার

তারপর offsetHeight
ঋত্বিক

6
এই সম্পত্তিটি একটি পূর্ণসংখ্যার মানটি গোল করে । আপনার যদি একটি ভাসমান মান প্রয়োজন হয়, ব্যবহার করুনelem.getBoundingClientRect().height
পেনি লিউ

12

আমি একটি সাধারণ কোড তৈরি করেছিলাম যার এমনকি জিকুয়ের প্রয়োজন নেই এবং সম্ভবত কিছু লোককে সহায়তা করবে। এটি লোড হওয়ার পরে 'ID1' এর মোট উচ্চতা পায় এবং এটি 'ID2' এ ব্যবহার করুন

function anyName(){
    var varname=document.getElementById('ID1').offsetHeight;
    document.getElementById('ID2').style.height=varname+'px';
}

তারপরে এটি লোড করার জন্য কেবল শরীর সেট করুন

<body onload='anyName()'>

এটি দরকারী এবং আমি আরও জটিল কোডে অনুরূপ কিছু নিয়োগ করি।
ডিহর্স

10

এইচএম আমরা এলিমেন্ট জ্যামিতিটি পেতে পারি ...

var geometry;
geometry={};
var element=document.getElementById(#ibims);
var rect = element.getBoundingClientRect();
this.geometry.top=rect.top;
this.geometry.right=rect.right;
this.geometry.bottom=rect.bottom;
this.geometry.left=rect.left;
this.geometry.height=this.geometry.bottom-this.geometry.top;
this.geometry.width=this.geometry.right-this.geometry.left;
console.log(this.geometry);

কীভাবে এই সমতল জেএস সম্পর্কে?


1
var geometry; geometry={};সহজভাবে হতে পারেvar geometry={};
মার্ক সুলথিস

10

আমি মনে করি 2020 এ করার সর্বোত্তম উপায় হ'ল প্লেইন জেএস এবং use getBoundingClientRect().height;

এখানে একটি উদাহরণ

let div = document.querySelector('div');
let divHeight = div.getBoundingClientRect().height;

console.log(`Div Height: ${divHeight}`);
<div>
  How high am I? 🥴
</div>

heightএই উপায়ে পাওয়ার শীর্ষে , আমাদের সম্পর্কেও অন্যান্য সামগ্রীর একগুচ্ছ অ্যাক্সেস রয়েছে div

let div = document.querySelector('div');
let divInfo = div.getBoundingClientRect();

console.log(divInfo);
<div>What else am I? 🥴</div>


8

তাহলে কি এই উত্তর?

"আপনার যদি কিছু গণনা করার প্রয়োজন হয় তবে এটি না দেখানো হয় তবে এটিকে উপাদানটি সেট করুন visibility:hiddenএবং position:absoluteএটি ডিওএম গাছের সাথে যুক্ত করুন, অফসেটহাইটটি পাবেন এবং এটিকে সরিয়ে দিন ((প্রোটোটাইপ লাইব্রেরি শেষবার যখন আমি পরীক্ষা করেছিলাম লাইনের পিছনে এটি করে)"

বেশ কয়েকটি উপাদান নিয়ে আমার একই সমস্যা। সাইটে কোনও jQuery বা প্রোটোটাইপ ব্যবহার করার দরকার নেই তবে আমি যদি প্রযুক্তিটি কাজ করে তবে তা ধার করার পক্ষে all কাজ করতে ব্যর্থ কিছু জিনিসগুলির উদাহরণ হিসাবে, যা করেছিল তা অনুসরণ করে আমার কাছে নিম্নলিখিত কোড রয়েছে:

// Layout Height Get
function fnElementHeightMaxGet(DoScroll, DoBase, elementPassed, elementHeightDefault)
{
    var DoOffset = true;
    if (!elementPassed) { return 0; }
    if (!elementPassed.style) { return 0; }
    var thisHeight = 0;
    var heightBase = parseInt(elementPassed.style.height);
    var heightOffset = parseInt(elementPassed.offsetHeight);
    var heightScroll = parseInt(elementPassed.scrollHeight);
    var heightClient = parseInt(elementPassed.clientHeight);
    var heightNode = 0;
    var heightRects = 0;
    //
    if (DoBase) {
        if (heightBase > thisHeight) { thisHeight = heightBase; }
    }
    if (DoOffset) {
        if (heightOffset > thisHeight) { thisHeight = heightOffset; }
    }
    if (DoScroll) {
        if (heightScroll > thisHeight) { thisHeight = heightScroll; }
    }
    //
    if (thisHeight == 0) { thisHeight = heightClient; }
    //
    if (thisHeight == 0) { 
        // Dom Add:
        // all else failed so use the protype approach...
        var elBodyTempContainer = document.getElementById('BodyTempContainer');
        elBodyTempContainer.appendChild(elementPassed);
        heightNode = elBodyTempContainer.childNodes[0].offsetHeight;
        elBodyTempContainer.removeChild(elementPassed);
        if (heightNode > thisHeight) { thisHeight = heightNode; }
        //
        // Bounding Rect:
        // Or this approach...
        var clientRects = elementPassed.getClientRects();
        heightRects = clientRects.height;
        if (heightRects > thisHeight) { thisHeight = heightRects; }
    }
    //
    // Default height not appropriate here
    // if (thisHeight == 0) { thisHeight = elementHeightDefault; }
    if (thisHeight > 3000) {
        // ERROR
        thisHeight = 3000;
    }
    return thisHeight;
}

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

২৯ শে জুন ২০১১, আমি প্রত্যাশার চেয়ে ভাল ফলাফলের সাথে ডম এবং ক্লায়েন্টহাইট উভয়কেই যুক্ত করার চেষ্টা করে কোডটি আপডেট করেছি।

1) ক্লায়েন্টহাইটও ছিল 0

2) ডম আসলে আমাকে একটি উচ্চতা দিয়েছে যা দুর্দান্ত ছিল।

3) ক্লায়েন্টরেক্টস একটি ফলাফলটি ডিওএম কৌশলের সাথে প্রায় সমান।

কারণ যুক্ত উপাদানগুলি প্রকৃতিতে তরল হয়, যখন সেগুলি অন্যথায় ফাঁকা DOM টেম্প উপাদানগুলিতে যুক্ত করা হয় তখন সেগুলি ধারকটির প্রস্থ অনুসারে রেন্ডার করা হয়। এটি অদ্ভুত আকার ধারণ করে, কারণ এটি শেষের চেয়ে 30px খাটো।

উচ্চতা কীভাবে আলাদাভাবে গণনা করা হয় তা চিত্রিত করার জন্য আমি কয়েকটি স্ন্যাপশট যুক্ত করেছি। মেনু ব্লকটি সাধারণত রেন্ডার হয় মেনু ব্লকটি ডিওএম টেম্প উপাদানটিতে যুক্ত হয়েছে

উচ্চতা পার্থক্য সুস্পষ্ট। আমি অবশ্যই নিখুঁত অবস্থান এবং লুকানো যুক্ত করতে পারি তবে আমি নিশ্চিত যে এর কোনও প্রভাব থাকবে না। আমি দৃ be় বিশ্বাস অবিরত এই কাজ করবে না!

(আমি আরও খনন করি) সত্য রেন্ডার করা উচ্চতার চেয়ে উচ্চতা কম হয় (রেন্ডার করে)। এটি বিদ্যমান পিতামাতার সাথে মেলে ডিওএম টেম্প উপাদানটির প্রস্থ নির্ধারণ করে সম্বোধন করা যেতে পারে এবং তত্ত্বের ক্ষেত্রে নিখুঁতভাবে সঠিকভাবে সম্পন্ন করা যেতে পারে। এগুলি সরিয়ে এবং তাদের বিদ্যমান অবস্থানে পুনরায় যুক্ত করে কী হবে তা আমি জানি না। যখন তারা একটি অভ্যন্তরীণ এইচটিএমএল কৌশলটি পেয়েছে তখন আমি এই ভিন্ন পদ্ধতির ব্যবহারটি দেখব।

* যাইহোক * এর কোনওটিই প্রয়োজনীয় ছিল না। আসলে এটি বিজ্ঞাপন হিসাবে কাজ করেছিল এবং সঠিক উচ্চতা ফিরিয়ে দিয়েছে !!!

আমি যখন মেনুগুলিকে আবার দৃশ্যমান করতে সক্ষম হয়েছি তখন আশ্চর্যরূপে ডিওএম পৃষ্ঠার শীর্ষে (279px) তরল বিন্যাসে সঠিক উচ্চতাটি ফিরিয়ে দিয়েছিল। উপরের কোডটি getClientRects ব্যবহার করে যা 280px ফেরত দেয়।

এটি নিম্নলিখিত স্ন্যাপশটে চিত্রিত হয়েছে (একবার কাজ করার পরে ক্রোম থেকে নেওয়া taken)
এখানে চিত্র বর্ণনা লিখুন

সেই প্রোটোটাইপ ট্রিকটি কেন কাজ করে তা এখন আমার কাছে নুওউ ধারণা আছে তবে মনে হচ্ছে। বিকল্পভাবে, getClientRects এছাড়াও কাজ করে।

আমি সন্দেহ করি যে এই নির্দিষ্ট উপাদানগুলির সাথে এই সমস্ত সমস্যার কারণটি ছিল অ্যাপেন্ডচিল্ডের পরিবর্তে অভ্যন্তরীণ এইচটিএমএল ব্যবহার করা, তবে এটি এই মুহূর্তে খাঁটি জল্পনা।


6

offsetHeightসাধারণত

আপনার যদি কোনও কিছু গণনা করার প্রয়োজন হয় তবে এটি না দেখানো হয় তবে এলুমেন্টটি সেট করুন visibility:hiddenএবং position:absoluteএটি ডিওএম ট্রিতে যুক্ত করুন, পেয়ে যাবেন offsetHeightএবং সরিয়ে ফেলুন। (প্রোটোটাইপ লাইব্রেরিটি শেষ বার আমি যাচাই করেছিলাম এর আড়ালে পিছনে কাজ করে)।


মজাদার. আমি কখনও প্রোটোটাইপ চেক করি নি। কোন ধারণা কেন jQuery পর্দার আড়ালে এটি না করে?
সাইমন_উইভার

আমি দেখেছি যখন অসুবিধা হচ্ছে এবং সেই কৌশলটি পরীক্ষা করে দেখানো হয়েছিল এবং এটি সরল জাভাস্ক্রিপ্টে বেশ ভাল কাজ করেছে
DHorse

5

কখনও কখনও অফসেটহাইট শূন্য ফিরে আসবে কারণ আপনি যে উপাদানটি তৈরি করেছেন তা ডোমে এখনও রেন্ডার হয়নি। আমি এই পরিস্থিতিতে এই ফাংশনটি লিখেছি:

function getHeight(element)
{
    var e = element.cloneNode(true);
    e.style.visibility = "hidden";
    document.body.appendChild(e);
    var height = e.offsetHeight + 0;
    document.body.removeChild(e);
    e.style.visibility = "visible";
    return height;
}

আপনার উপাদানটি ক্লোন করতে হবে অন্যথায় এটি ডোম থেকে পুরোপুরি সরিয়ে ফেলা হবে এটি আপনার কোড থেকেই মনে হবে যা ঘটবে।
পাঙ্কবিট

এই কোডটি ডিওমে উপাদান রাখার উদ্দেশ্যে নয়। এটি কেবলমাত্র সংক্ষেপে DOM এ রাখার উদ্দেশ্যে করা হয়েছে (এটি রেন্ডার করতে এবং এর উচ্চতা পেতে যথেষ্ট দীর্ঘ), তারপরে এটি তা বাইরে নিয়ে যায়। আপনি পরে উপাদানটি অন্য জায়গায় ডোমে স্থাপন করতে পারেন (এটি করার আগে এর উচ্চতা কী হবে তা জেনে)। "GetHeight" ফাংশনটির নামটি লক্ষ্য করুন; কোডটি করতে ইচ্ছে করে এটিই।
লনি সেরা

@ পাঙ্কবিট: আমি আপনাকে বোঝাতে চাইছি আপনার উপাদানটি ইতিমধ্যে ডোমে রয়েছে। আমি যে কোডটি লিখেছি তা এমন একটি উপাদানটির জন্য যা এখনও ডিওমে নেই। ক্লোনিং আরও ভাল হবে, যেমন আপনি বলেছেন, কারণ উপাদানটি ডোমে আছে কি না তা বিবেচ্য নয়।
লনি সেরা

@ পাঙ্কবিট: আমি কোড ব্যবহারের ক্লোনিং পরিবর্তন করেছি, তবে এটি পরীক্ষা করে দেখিনি।
লনি সেরা

হ্যাঁ, এটা আমার বিষয় ছিল। আমার কাছে মনে হয়েছিল যে তিনি ডিওমে বিদ্যমান উপাদানগুলির জন্য "উপাদান" বলেছেন। তবে সব ভাল! ভুল হয়ে যেতে পারে না.
পাঙ্কবিট

4

আপনি যদি ইতিমধ্যে jQuery ব্যবহার করে থাকেন তবে আপনার সেরা বাজি .outerHeight()বা .height()যেমন বলা হয়েছে।

JQuery ব্যতীত আপনি বাক্স-আকারের ব্যবহার পরীক্ষা করতে পারেন এবং বিভিন্ন প্যাডিং + বর্ডার + ক্লায়েন্টহাইট যোগ করতে পারেন , বা আপনি getComputesStyle ব্যবহার করতে পারেন :

var h = getComputesStyle (ডকুমেন্ট.জেটএলমেন্টবিআইআইডি ('কিছুডাইভ')) উচ্চতা;

h এখন "53.825px" এর মতো স্ট্রিং হবে।

এবং আমি রেফারেন্সটি খুঁজে পাচ্ছি না, তবে আমি মনে করি আমি শুনেছি getComputedStyle()ব্যয়বহুল হতে পারে, সুতরাং এটি সম্ভবত প্রতিটি window.onscrollইভেন্টে আপনি কল করতে চান এমন কিছু নয় (তবে তারপরেও কোনওটি জিকুয়ের নয় height())।


আপনার উচ্চতাটি একবার হলে গণনার জন্য পূর্ণসংখ্যা পেতে getComputedStyleব্যবহার করুন parseInt(h, 10)
রোডানভি 500 500


1

আমি যদি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি, তবে সম্ভবত এর মতো কিছু সাহায্য করবে:

function testDistance(node1, node2) {
    /* get top position of node 1 */
    let n1Pos = node1.offsetTop;
    /* get height of node 1 */
    let n1Height = node1.clientHeight;
    /* get top position of node 2 */
    let n2Pos = node2.offsetTop;
    /* get height of node 2 */
    let n2Height = node2.clientHeight;

    /* add height of both nodes */
    let heightTogether = n1Height + n2Height;
    /* calculate distance from top of node 1 to bottom of node 2 */
    let actualDistance = (n2Pos + n2Height) - n1Pos;

    /* if the distance between top of node 1 and bottom of node 2
       is bigger than their heights combined, than there is something between them */
    if (actualDistance > heightTogether) {
        /* do something here if they are not together */
        console.log('they are not together');
    } else {
        /* do something here if they are together */
        console.log('together');
    } 
}

-4

আপনি বিশেষত CSS এ উচ্চতা সেট করেছেন? আপনার যদি না হয় তবে তার offsetHeight;পরিবর্তে ব্যবহার করার দরকার নেইheight

var h = document.getElementById('someDiv').style.offsetHeight;

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