<div>
බ්රව්සරයේ සංදර්ශකය (දර්ශන පුවරුව) කේන්ද්රගත කිරීමට මා සතුව ඇතැයි සිතමු . එසේ කිරීමට, මට <div>
මූලද්රව්යයේ පළල සහ උස ගණනය කළ යුතුය .
මා භාවිතා කළ යුත්තේ කුමක්ද? කරුණාකර බ්රව්සර් අනුකූලතාව පිළිබඳ තොරතුරු ඇතුළත් කරන්න.
<div>
බ්රව්සරයේ සංදර්ශකය (දර්ශන පුවරුව) කේන්ද්රගත කිරීමට මා සතුව ඇතැයි සිතමු . එසේ කිරීමට, මට <div>
මූලද්රව්යයේ පළල සහ උස ගණනය කළ යුතුය .
මා භාවිතා කළ යුත්තේ කුමක්ද? කරුණාකර බ්රව්සර් අනුකූලතාව පිළිබඳ තොරතුරු ඇතුළත් කරන්න.
Answers:
ඔබ .offsetWidth
සහ .offsetHeight
ගුණාංග භාවිතා කළ යුතුය . ඒවා මූලද්රව්යයට අයත් බව සලකන්න .style
.
var width = document.getElementById('foo').offsetWidth;
.getBoundingClientRect()
CSS පරිණාමනයන් සිදු කිරීමෙන් පසු ශ්රිතය මානයන් සහ මූලද්රව්යයේ පිහිටීම පාවෙන ලක්ෂ්ය සංඛ්යා ලෙස ලබා දෙයි.
> console.log(document.getElementById('id').getBoundingClientRect())
DOMRect {
bottom: 177,
height: 54.7,
left: 278.5,
right: 909.5,
top: 122.3,
width: 631,
x: 278.5,
y: 122.3,
}
.offsetWidth
හා .offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elements
offsetWidth
මූලද්රව්යය නම් 0 වනු ඇත display:none
, නමුත් ගණනය width
කළ විට මෙම අවස්ථාවේදී ධනාත්මක අගයක් තිබිය හැකිය. visibility:hidden
බලපාන්නේ නැත offsetWidth
.
offsetWidth
අන්තර්ගතය, පෑඩින් කිරීම සහ මායිම් ඇතුළුව “සම්පූර්ණ” කොටුව නැවත ලබා දෙයි; අතර clientWidth
ප්රතිලාභ අන්තර්ගතය කොටුව පමණක් ප්රමාණය (එම මූලද්රව්යය ඕනෑම ශූන්ය නොවන පුරවන සහ / හෝ දේශ සීමා කර විට එය කුඩා වටිනාකමක් ඇත එසේ). (මෝඩ් සංස්කරණය සඳහා පැහැදිලි කර ඇත)
බලන්න Element.getBoundingClientRect()
.
මෙම ක්රමය නිසා අඩංගු වස්තුවක් ආපසු width
, height
සහ ෙවනත් ඇතැම් ප්රයෝජනවත් වටිනාකම්:
{
width: 960,
height: 71,
top: 603,
bottom: 674,
left: 360,
right: 1320
}
උදාහරණයක් වශයෙන්:
var element = document.getElementById('foo');
var positionInfo = element.getBoundingClientRect();
var height = positionInfo.height;
var width = positionInfo.width;
මම මේ බව ප්රශ්න නැති බවයි .offsetWidth
හා .offsetHeight
ඔවුන් සමහර විට නැවත කොහෙද 0
(දී සාකච්ඡා ලෙස මෙහි අදහස් )
තවත් වෙනසක් වන්නේ getBoundingClientRect()
භාගික පික්සල ආපසු හැක, එහිදී .offsetWidth
හා .offsetHeight
ළඟම ඇති පූර්ණ සංඛ්යාමය කිරීමට අවට ඇත.
IE8 සටහන : IE8 සහ ඊට පහළින් getBoundingClientRect
උස සහ පළල ලබා නොදේ . *
ඔබ නම් කළ යුතුය , 8 යනු සහාය භාවිතා .offsetWidth
හා .offsetHeight
:
var height = element.offsetHeight;
var width = element.offsetWidth;
මෙම ක්රමය මඟින් ආපසු ලබා දුන් වස්තුව ඇත්ත වශයෙන්ම සාමාන්ය වස්තුවක් නොවන බව සඳහන් කිරීම වටී . එහි ගුණාංග ගණන් කළ නොහැකි ය (එබැවින්, උදාහරණයක් ලෙස, Object.keys
පිටත සිට ක්රියා නොකරයි.)
මේ පිළිබඳ වැඩි විස්තර මෙතැනින්: ClientRect / DomRect සරල වස්තුවක් බවට පරිවර්තනය කරන්නේ කෙසේද?
යොමුව:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectoffsetHeight
හා offsetWidth
නෑ.
සටහන : මෙම පිළිතුර 2008 දී ලියා ඇත. එකල බොහෝ දෙනා සඳහා හොඳම හරස් බ්රව්සර විසඳුම වූයේ jQuery භාවිතා කිරීමයි. මම පරම්පරාව සඳහා පිළිතුර මෙහි තබන අතර, ඔබ jQuery භාවිතා කරන්නේ නම්, මෙය කිරීමට හොඳ ක්රමයකි. ඔබ වෙනත් රාමුවක් හෝ පිරිසිදු ජාවාස්ක්රිප්ට් භාවිතා කරන්නේ නම් පිළිගත් පිළිතුර බොහෝ විට යා යුතු මාර්ගයයි.
JQuery 1.2.6 වන විට ඔබ හරය භාවිතා කළ හැකි CSS කාර්යයන් , height
සහ width
(හෝ outerHeight
සහ outerWidth
, සුදුසු පරිදි).
var height = $("#myDiv").height();
var width = $("#myDiv").width();
var docHeight = $(document).height();
var docWidth = $(document).width();
එය ඕනෑම කෙනෙකුට ප්රයෝජනවත් වේ නම්, මම පෙළ කොටුවක්, බොත්තමක් සහ div සියල්ලම එකම css සමඟ තබමි:
width:200px;
height:20px;
border:solid 1px #000;
padding:2px;
<input id="t" type="text" />
<input id="b" type="button" />
<div id="d"></div>
මම එය ක්රෝම්, ෆයර්ෆොක්ස් සහ එජ් එජ් වලින් අත්හදා බැලුවෙමි, මම jquery සමඟ සහ නැතිව උත්සාහ කළෙමි box-sizing:border-box
. සැමවිටම සමඟ<!DOCTYPE html>
ප්රතිඵල:
Firefox Chrome IE-Edge
with w/o with w/o with w/o box-sizing
$("#t").width() 194 200 194 200 194 200
$("#b").width() 194 194 194 194 194 194
$("#d").width() 194 200 194 200 194 200
$("#t").outerWidth() 200 206 200 206 200 206
$("#b").outerWidth() 200 200 200 200 200 200
$("#d").outerWidth() 200 206 200 206 200 206
$("#t").innerWidth() 198 204 198 204 198 204
$("#b").innerWidth() 198 198 198 198 198 198
$("#d").innerWidth() 198 204 198 204 198 204
$("#t").css('width') 200px 200px 200px 200px 200px 200px
$("#b").css('width') 200px 200px 200px 200px 200px 200px
$("#d").css('width') 200px 200px 200px 200px 200px 200px
$("#t").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#b").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#d").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#t").css('padding-left') 2px 2px 2px 2px 2px 2px
$("#b").css('padding-left') 2px 2px 2px 2px 2px 2px
$("#d").css('padding-left') 2px 2px 2px 2px 2px 2px
document.getElementById("t").getBoundingClientRect().width 200 206 200 206 200 206
document.getElementById("b").getBoundingClientRect().width 200 200 200 200 200 200
document.getElementById("d").getBoundingClientRect().width 200 206 200 206 200 206
document.getElementById("t").offsetWidth 200 206 200 206 200 206
document.getElementById("b").offsetWidth 200 200 200 200 200 200
document.getElementById("d").offsetWidth 200 206 200 206 200 206
MDN ට අනුව : මූලද්රව්යවල මානයන් තීරණය කිරීම
offsetWidth
සහ offsetHeight
"දෘශ්යමාන අන්තර්ගතයේ පළල, අනුචලන තීරු (ඇත්නම්), පෑඩින් කිරීම සහ මායිම ඇතුළුව මූලද්රව්යයක් සතු මුළු ඉඩ ප්රමාණය ආපසු ලබා දෙන්න"
clientWidth
සහ clientHeight
"පැඩින් කිරීම ඇතුළුව මායිම, ආන්තිකයන් හෝ අනුචලන තීරු ඇතුළුව සත්ය ලෙස දර්ශනය වූ අන්තර්ගතයට කොපමණ ඉඩ ප්රමාණයක් ගත යුතුද" යන්න ආපසු එවන්න.
scrollWidth
සහ scrollHeight
"අන්තර්ගතයේ සත්ය ප්රමාණය කොපමණ දැයි නොතකා එය ආපසු ලබා දෙන්න"
එබැවින් එය මනින ලද අන්තර්ගතය වර්තමාන නැරඹිය හැකි ප්රදේශයෙන් පිටත පවතිනු ඇතැයි අපේක්ෂා කරන්නේද යන්න මත රඳා පවතී.
ඔබට එය ගණනය කළ යුත්තේ IE7 සහ ඊට වැඩි අය සඳහා පමණි (ඔබේ අන්තර්ගතයට ස්ථාවර ප්රමාණයක් නොමැති නම් පමණි). CSS2 සඳහා සහය නොදක්වන පැරණි IE වලට අනවසරයෙන් ඇතුළුවීම සීමා කිරීමට HTML කොන්දේසි සහිත අදහස් භාවිතා කිරීමට මම යෝජනා කරමි. අනෙක් සියලුම බ්රව්සර් සඳහා මෙය භාවිතා කරන්න:
<style type="text/css">
html,body {display:table; height:100%;width:100%;margin:0;padding:0;}
body {display:table-cell; vertical-align:middle;}
div {display:table; margin:0 auto; background:red;}
</style>
<body><div>test<br>test</div></body>
මෙය පරිපූර්ණ විසඳුමයි. එය <div>
ඕනෑම ප්රමාණයක කේන්ද්රගත වන අතර එය එහි අන්තර්ගතයේ ප්රමාණයට හැකිලී යයි.
මූලද්රව්ය මෝස්තර වෙනස් කිරීම පහසුය, නමුත් අගය කියවීමට ටිකක් උපක්රමශීලී ය.
ඔබ ජාවාස්ක්රිප්ට් හි getComputedStyle බිල්ට් ඉන් කෝල් භාවිතා නොකරන්නේ නම්, ජාවාස්ක්රිප්ට් හට CSS (අභ්යන්තර / බාහිර) වෙතින් එන මූලද්රව්ය ශෛලීය දේපල (elem.style) කියවිය නොහැක.
getComputedStyle (මූලද්රව්යය [, ව්යාජ])
මූලද්රව්යය: සඳහා අගය කියවිය යුතු අංගය.
ව්යාජ: අවශ්ය නම් ව්යාජ මූලද්රව්යයක්, උදාහරණයක් ලෙස :: පෙර. හිස් නූලක් හෝ තර්කයක් නැත යන්නෙන් අදහස් කරන්නේ මූලද්රව්යයයි.
ප්රති result ලය වන්නේ elem.style වැනි ශෛලීය ගුණාංග සහිත වස්තුවකි, නමුත් දැන් සියලු css පන්ති වලට සාපේක්ෂව.
උදාහරණයක් ලෙස, මෙහි ශෛලිය ආන්තිකය නොපෙනේ:
<head>
<style> body { color: red; margin: 5px } </style>
</head>
<body>
<script>
let computedStyle = getComputedStyle(document.body);
// now we can read the margin and the color from it
alert( computedStyle.marginTop ); // 5px
alert( computedStyle.color ); // rgb(255, 0, 0)
</script>
</body>
එබැවින් ඔබේ ජාවාස්ක්රිප්ට් කේතය වෙනස් කර එහි පළල / උස හෝ වෙනත් ගුණාංගයක් ලබා ගැනීමට ඔබ කැමති මූලද්රව්යයේ getComputedStyle ඇතුළත් කරන්න.
window.onload = function() {
var test = document.getElementById("test");
test.addEventListener("click", select);
function select(e) {
var elementID = e.target.id;
var element = document.getElementById(elementID);
let computedStyle = getComputedStyle(element);
var width = computedStyle.width;
console.log(element);
console.log(width);
}
}
ගණනය කළ සහ විසඳූ අගයන්
CSS හි සංකල්ප දෙකක් තිබේ:
CSS කඳුරැල්ලේ ප්රති result ලයක් ලෙස ගණනය කරන ලද ශෛලීය අගයක් යනු සියලු CSS රීති සහ CSS උරුමය යෙදීමෙන් පසුව ඇති අගයයි. එය උස මෙන් පෙනේ: 1em හෝ අකුරු ප්රමාණය: 125%.
නිරාකරණය කරන ලද ශෛලීය අගයක් යනු මූලද්රව්යයට අවසාන වශයෙන් යොදන අගයයි. 1em හෝ 125% වැනි අගයන් සාපේක්ෂ වේ. බ්රව්සරය ගණනය කළ අගය ගෙන සියලු ඒකක ස්ථාවර හා නිරපේක්ෂ කරයි, උදාහරණයක් ලෙස: උස: 20px හෝ අකුරු ප්රමාණය: 16px. ජ්යාමිතික ගුණාංග සඳහා නිරාකරණය කළ අගයන්ට පළල: 50.5px වැනි පාවෙන ලක්ෂ්යයක් තිබිය හැකිය.
බොහෝ කලකට පෙර getComputedStyle නිර්මාණය කරන ලද්දේ ගණනය කළ අගයන් ලබා ගැනීම සඳහා වන නමුත් එය විසඳා ඇති අගයන් වඩා පහසු බව පෙනී ගිය අතර ප්රමිතිය වෙනස් විය.
එබැවින් වර්තමානයේ getComputedStyle ඇත්ත වශයෙන්ම දේපලෙහි නිරාකරණය කළ වටිනාකම ලබා දෙයි.
කරුණාකර සටහන් කර ගන්න:
getComputedStyle සඳහා සම්පූර්ණ දේපල නම අවශ්ය වේ
පැඩින් ලෙෆ්ට් හෝ උස හෝ පළල වැනි ඔබට අවශ්ය දේපළ සැමවිටම ඉල්ලා සිටිය යුතුය. එසේ නොමැතිනම් නිවැරදි ප්රති result ලය සහතික නොවේ.
උදාහරණයක් ලෙස, paddingLeft / paddingTop යන ගුණාංග තිබේ නම්, getComputedStyle (elem) සඳහා අප ලබා ගත යුත්තේ කුමක්ද .පෑඩින් කිරීම? කිසිවක් නැත, නැතහොත් දන්නා පෑඩින් වලින් “ජනනය කළ” වටිනාකමක් තිබේද? මෙහි සම්මත රීතියක් නොමැත.
වෙනත් නොගැලපීම් තිබේ. උදාහරණයක් ලෙස, සමහර බ්රව්සර් (ක්රෝම්) පහත ලේඛනයේ 10px පෙන්වන අතර සමහර ඒවා (ෆයර්ෆොක්ස්) - එසේ නොකරයි:
<style>
body {
margin: 30px;
height: 900px;
}
</style>
<script>
let style = getComputedStyle(document.body);
alert(style.margin); // empty string in Firefox
</script>
වැඩි විස්තර සඳහා https://javascript.info/styles-and-classes
element.offsetWidth සහ element.offsetHeight කළ යුත්තේ පෙර ලිපියේ යෝජනා කළ පරිදි ය.
කෙසේ වෙතත්, ඔබට අන්තර්ගතය කේන්ද්රගත කිරීමට අවශ්ය නම්, එසේ කිරීමට වඩා හොඳ ක්රමයක් තිබේ. ඔබ xhtml දැඩි DOCTYPE භාවිතා කරයි යැයි උපකල්පනය කරමු. ආන්තිකය සකසන්න: 0, ස්වයංක්රීය දේපල සහ අවශ්ය පළල px හි ශරීර ටැගයට. අන්තර්ගතය පිටුවට කේන්ද්රගත වේ.
... කේන්ද්රය මත බෙදීමට CSS උදව් කරන බව පෙනේ ...
<style>
.monitor {
position:fixed;/* ... absolute possible if on :root */
top:0;bottom:0;right:0;left:0;
visibility:hidden;
}
.wrapper {
width:200px;/* this is size range */
height:100px;
position:absolute;
left:50%;top:50%;
visibility:hidden;
}
.content {
position:absolute;
width: 100%;height:100%;
left:-50%;top:-50%;
visibility:visible;
}
</style>
<div class="monitor">
<div class="wrapper">
<div class="content">
... so you hav div 200px*100px on center ...
</div>
</div>
</div>
ඔබට මෙම කේතය භාවිතා කළ හැකිය:
var divID = document.getElementById("divid");
var h = divID.style.pixelHeight;
නඩුවේ ඔබ ඔබේ ප්රදර්ශනය කිරීමට අවශ්ය බව <div>
තිරය මධ්යස්ථානයක් උත්පතන පණිවුඩය යම් ආකාරයක - ඔබ ප්රමාණය කියවීමට අවශ්ය නැහැ <div>
නමුත් ඔබට භාවිතා කළ හැකි අයින්
නිශ්චිත ඩොම් මූලද්රව්යයේ උස තීරණය කරන WKWebView සඳහා කේතය මෙන්න (සම්පූර්ණ පිටුවට නිසි ලෙස ක්රියා නොකරයි)
let html = "<body><span id=\"spanEl\" style=\"font-family: '\(taskFont.fontName)'; font-size: \(taskFont.pointSize - 4.0)pt; color: rgb(\(red), \(blue), \(green))\">\(textValue)</span></body>"
webView.navigationDelegate = self
webView.loadHTMLString(taskHTML, baseURL: nil)
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementById(\"spanEl\").getBoundingClientRect().height;") { [weak self] (response, error) in
if let nValue = response as? NSNumber {
}
}
}
swift
කේතය නේද? ජාවාස්ක්රිප්ට් නොවේ. මම downvote (ආ / මෙම ඇ සෑහෙන්න ප්රයෝජනවත් විය හැක) නමුත් මේ බව කරුණාකර මතක තබා witholding කරනවා නොවේ ප්රශ්නයට පිළිතුරු, සහ ඉඩ තවත් මත වඩා යෝග්ය වනු ඇත, iOS විශේෂිත, ප්රශ්නය. මේ වන විටත් කිසිවක් නොපවතී නම්, එකක් ඉල්ලීම සහ ස්වයං පිළිතුරු දීම ගැන සලකා බලන්න.