現在のウィンドウに収まるようにウィンドウを縮小したい。このFiddleは私が達成したいものに非常に近いです。それを使用するには、青い線が途切れるまで出力ウィンドウのサイズを単純に変更します。その後、プロセスを逆にします。しかし、ページにパディングやその他の要素があっても、引き続き作業したいと思っています。ウィンドウ内にdivを垂直に収縮させる
<div id="output"></div>
<div id="sample" class="sampleClass">
<div>hello</div>
<div>hello</div>
<div>hello</div>
<div>hello</div>
<div>hello</div>
<div>hello</div>
</div>
window.addEventListener("resize", updateDimensions);
var originalHeight = document.getElementById('sample').offsetHeight;
var safeBuffer = 15;
function updateDimensions(){
var node = document.getElementById('sample');
var windowDimensions = {width: window.innerWidth, height: window.innerHeight};
var dimensions = node.getBoundingClientRect();
var nodeBottom = dimensions.bottom;
var nodeHeight = node.offsetHeight;
var nodeTop = dimensions.top;
var windowHeight = windowDimensions.height;
var windowIsCutOff = windowHeight <= nodeBottom;
var windowIsShowing = windowHeight >= nodeTop;
console.log('windowHeight: ' + windowHeight + ' safeBuffer: ' + safeBuffer);
console.log('nodeHeight: ' + nodeHeight + ' originalHeight: ' + originalHeight);
var nodeCanGrowBigger = (windowHeight - safeBuffer - 10) > nodeHeight && nodeHeight < originalHeight;
console.log('nodeCanGrowBigger: ' + nodeCanGrowBigger);
if(windowIsShowing && windowIsCutOff) {
console.log('do work');
shrinkWindow(nodeBottom, windowHeight, nodeHeight);
}
if(nodeCanGrowBigger){
growWindow(nodeBottom, windowHeight, nodeHeight);
}
}
function growWindow(nodeBottom, windowHeight, nodeHeight){
var node = document.getElementById('sample');
var originalHeight = nodeHeight;
var offset = nodeHeight - windowHeight;
var newHeight;
if(offset >= -safeBuffer && offset <= safeBuffer){
newHeight = originalHeight;
}
else if(offset >= 0){
newHeight = originalHeight + offset;
console.log('positive calculation originalHeight: ' + originalHeight + ' offset: ' + offset + ' for newHeight: ' + newHeight);
}else{
newHeight = originalHeight - offset;
console.log('negative', newHeight);
}
node.style.height = newHeight + 'px';
console.log('height attmpted changed to', newHeight);
console.log('height offset', node.offsetHeight);
console.log('height style', node.style.height);
}
function shrinkWindow(nodeBottom, windowHeight, nodeHeight) {
var node = document.getElementById('sample');
var originalHeight = nodeHeight;
//console.log('originalHeight', originalHeight);
//console.log('nodeBottom:' + nodeBottom + ' windowHeight: ' + windowHeight);
var offset = nodeHeight - windowHeight;
//console.log('offset', offset);
var newHeight;
if(offset >= -safeBuffer && offset <= safeBuffer){
newHeight = originalHeight - (safeBuffer + 1);
}
else if(offset >= 0){
newHeight = originalHeight - offset;
//console.log('positive calculation originalHeight: ' + originalHeight + ' offset: ' + offset + ' for newHeight: ' + newHeight);
}else{
newHeight = originalHeight + offset;
//console.log('negative', newHeight);
}
node.style.height = newHeight + 'px';
/*
console.log('height attmpted changed to', newHeight);
console.log('height offset', node.offsetHeight);
console.log('height style', node.style.height);
*/
}
.sampleClass {
padding: 0px;
height: 300px;
overflow-y: auto;
border: solid blue;
//margin: 10px 300px 10px 25px;
margin: 0px
position: 'relative'
}
私が思いついたこのJavaScriptソリューションは、過度に複雑に感じます。パディングのようなものや、ページ上のより多くのコンテンツについては解決しません。普通の古いCSSやJS拡張でこの問題を解決できますか?
私はKendo uiが(少なくとも私たちが使用する5歳のバージョンでは)モーダルウィンドウでこの効果があることを知っています。私は剣道を使うのにはオープンしていません。
、それだけで.simpleClassに最大の高さを与えるのに十分ではないでしょうか? – moesphemie
@memphemie十分だったと思う。そうすることで、私は非常に異なる効果をもたらします。空白がなくなり、スクロールバーは決して表示されません。さらに、ページにコンテンツを追加すると、静的なコンテンツが生成されます。 https://jsfiddle.net/smacky311/wd4p0ytm/ –