gpt4 book ai didi

jquery - 将溢出从一个 div 转移到另一个

转载 作者:技术小花猫 更新时间:2023-10-29 12:32:26 25 4
gpt4 key购买 nike

情况:我有两个固定高度的 div,溢出都设置为隐藏,第一个 div 中有动态文本内容。如果该内容超出第一个 div 的溢出边界,我希望它自动溢出到第二个 div。

我的问题只是如何做到这一点?我研究过,发现最接近的东西是一个 JQuery 插件,它可以自动为类似报纸的布局创建栏。虽然这不是我真正需要的,但它确实让我希望这可以在更简单的层面上实现。

视觉示例:

  <html>
<head>
<style type="text/css">
div{height:1in;width:4in;overflow:hidden}
</style>
</head>
<body>
<div id="d1">...(enough text to cause overflow exceeding 1in height)...</div>
<div id="d2">...(the rest of the text that got cut off from the first div)...</div>
</body>
</html>

谢谢大家!基于所有的输入,我把它放在一起。注意:这可能不适合每个人的目的:

  1. 我是用 JQuery 做的
  2. 这是非常概念化的
  3. 每个附加项都有自己的元素,而不仅仅是打开文本
  4. 根据我的需要,我已经知道单个 div 不会超出溢出限制

话虽这么说:

HTML

<html>
<head>
<style type="text/css">
#base{border:1px black solid;height:2in;width:3in;overflow:hidden;}
#overflow{border:1px black solid;width:3in;}
.content{width:2in}
</style>
<script type="text/javascript" src="ref/js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="work.js"></script>
</head>
<body>
<div id="base">
<div id="sub"></div>
</div>
<br />
<div id="overflow">
</div>

JQ

$(document).ready(function(){

// An array of content, loaded however you wish
var items=new Array();
items[0]='<div class="content" id="C0" style="border:1px blue solid;height:.75in">content 1</div>';
items[1]='<div class="content" id="C1" style="border:1px green solid;height:.75in">content 2</div>';
items[2]='<div class="content" id="C2" style="border:1px red solid;height:.75in">content 3</div>';
items[3]='<div class="content" id="C3" style="border:1px yellow solid;height:.75in">content 4</div>';
items[4]='<div class="content" id="C4" style="border:1px orange solid;height:.75in">content 5</div>';

// Variable for the height of the parent div with the fixed width
var baseheight=$("#base").css('height').substring(0,$("#base").css('height').length-2);

// Function to dynamically get the height of the child div within the fixed width div
function subheight(){return $("#sub").css('height').substring(0,$("#sub").css('height').length-2);}

// For each individual piece of content...
for(i=0;i<items.length;i++)
{
// Add it to the child div
$("#sub").append(items[i]);

// Variable for the difference in height between the parent and child divs
var diff=subheight()-baseheight;

// If this piece of content causes overflow...
if(diff>0)
{

// Remove it...
var tooMuch="#C"+i;$(tooMuch).remove();

// And put it in the overflow div instead
$("#overflow").append(items[i]);
}
}

});

最佳答案

这只是一种 JS。

你应该在 JS 中做什么:

  1. 获取cont1的高度
  2. 当内容加载到cont1时, 得到 <p>高度
  3. 如果<p>的高度 > cont1的高度,从 <p> 中的文本末尾开始删除文本(并将其存储到临时变量中)直到它的高度等于或小于 cont1 .
  4. 删除的文本(之前存储的)将被转储到第二个 cont2 .将文本包装在 <p> 中因此,如果您打算再次完成此壮举,您将有 2 个容器需要再次处理。

不是最优雅的代码(当内容很长时循环会滞后),但是 it's worth a try

HTML:

<div id="cont1">
<p>long text here</p>
</div>
<div id="cont2">
<p><!-- future content --></p>
</div>

CSS:

#cont1{
height:100px;
background:red;
margin-bottom:10px;
padding:10px;
}
#cont2{
height:100px;
background:blue;
margin-bottom:10px;
padding:10px;
}

JS:

//existing text must be rendered in the first container so we know how high it is compared to the div

//get references to avoid overhead in jQuery
var cont1 = $('#cont1');
var cont1Height = cont1.height();

var p1 = $('#cont1 p');
var p1Height = p1.height();

var p2 = $('#cont2 p');

//get text and explode it as an array
var p1text = p1.text();
p1text = p1text.split('');

//prepare p2 text
p2text = [];

//if greater height
while (p1Height > cont1Height) {

//remove last character
lastChar = p1text.pop();

//prepend to p2 text
p2text.unshift(lastChar);

//reassemble p1 text
p1temp = p1text.join('');

//place back to p1
p1.text(p1temp);

//re-evaluate height
p1Height = p1.height();

//loop
}

//if less than, assemble p2 text and render to p2 container
p2.text(p2text.join(''));​

关于jquery - 将溢出从一个 div 转移到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9305198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com