【问题标题】:How to dinamically update the child div width after insert other elements in the parent div在父div中插入其他元素后如何动态更新子div宽度
【发布时间】:2015-11-10 04:51:27
【问题描述】:

我有一个主 div(固定高度和 scroll-x 和 scroll-y):

<div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
</div>

还有一堆在js中动态创建的子div,并以绝对位置插入到父div中:

<div style='z-index:3;position:absolute; top: 50px; left: "+pos+"px;border:solid 1px;'>m</div>

这个 div 可以在任何地方创建,也可以超出父 div 的高度和宽度(我不在乎,因为我得到了滚动条)。

我的问题是: 还有其他子 div(在 js 中创建)代表像图表一样的背景。 div 有一个边框和 100% 的宽度。其中之一的示例:

<div style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+yyy+"px;'>0</div>

当 javascript 动态创建 div 时,背景不会将其宽度更新为新的(如果 div 超出父尺寸)。

因此,如果您向右滚动,则看不到背景。 当父宽度动态更改时,如何为背景提供正确的宽度(100%)?

http://jsfiddle.net/4x2KP/157/

谢谢大家!

【问题讨论】:

  • 我建议您尽可能将这些内联样式提取到 CSS 中。从长远来看,它会让您的生活更轻松。
  • @BDawg 是的,我知道,我写了这个问题;)

标签: javascript css scroll width


【解决方案1】:

我不确定这是否是您要求的,但此代码会在编写字母的同时创建这些背景线。

您可以轻松调整它,更改“宽度”变量。

var t = 250;
$(document).ready(function(){
	crea_bg();
    setTimeout(function(){ pippo(); }, t);
});
var pos = 0;
function pippo(){
    pos = pos + 30;
    crea_bg();
    $("#pippo").append("<div style='z-index:3;position:absolute; top: 50px;"
		+" left: "+pos+"px;border:solid 1px;'>m</div>");
	setTimeout(function(){ pippo(); }, t);
}

function crea_bg(){
	var yyy = 0;
    
	var width = pos + 30;
    
	$("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;" 
		+"color:#ccc;position:absolute;width:"+width+"px;bottom:"+yyy+"px;'>0</div>");
    
	for (i = 25; i <= 300; i=i+25) {
		$("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;"
        	+" color:#ccc;position:absolute;width:"+width+"px;bottom:"+(yyy+(-i))+"px;'>"+(-i)+"</div>");
		$("#pippo").append("<div style='z-index:2;border-bottom:solid 1px #ccc;"
        	+ "color:#ccc;position:absolute;width:"+width+"px;bottom:"+(yyy+(i))+"px;'>"+i+"</div>");
	}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
    
</div>

【讨论】:

    【解决方案2】:

    如果您可以将特定类添加到轴 div,我已经解决了这个问题。

    您可以在#pippo 上监听滚动事件并调整轴的偏移量,因为它在#pippo 内水平固定。但是你可能需要将数字部分和轴线部分分开,以使数字部分可以通过滚动条移动。

    var t = 250;
    var $axis;
    var offsets;
    $(document).ready(function(){
        crea_bg();
    	setTimeout(function(){ pippo(); }, t);
    });
    var pos = 0;
    function pippo(){
        pos = pos + 30;
        $("#pippo").append("<div style='z-index:3;position:absolute; top: 50px; left: "+pos+"px;border:solid 1px;'>m</div>");
        setTimeout(function(){ pippo(); }, t);
    }
    
    function crea_bg(){
        var yyy = 0;
        $("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+yyy+"px;'>0</div>");
    	for (i = 25; i <= 300; i=i+25) {
    		$("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+(yyy+(-i))+"px;'>"+(-i)+"</div>");
    		$("#pippo").append("<div class='axis' style='z-index:2;border-bottom:solid 1px #ccc; color:#ccc;position:absolute;width:100%;bottom:"+(yyy+(i))+"px;'>"+i+"</div>");
    	}
      $axis = $('.axis').css('left', 0);
    }
    
    $('#pippo').scroll(function() {
        //var currentLeft = parseFloat($axis.css('left'));
       //console.log($axis.css('left'), currentLeft, $axis.position().left);
        //$axis.css('left', currentLeft - $axis.position().left);
      $axis.css('left',  '-=' + $axis.position().left);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    <div style="position:relative;border:solid 2px #000;overflow-y:scroll;overflow-x:scroll; height:200px; width:100%;" id="pippo">
    </div>

    【讨论】:

    • 检查firefox和chrome的区别。镀铬是完美的。 Firefox 有一个奇怪的行为.... @fuyushimoya
    • 知道了,我看看怎么解决。
    • @StefanoNinoMancini 花费了很多倍..., ff 中的.offset 似乎不仅适用于左值,而且还有其他一些计算,尝试了很多方法,最后得到了一个看起来可以接受的方法两个浏览器,看看。
    【解决方案3】:

    避免典型的文档流程

    如果您必须避免典型的文档流,则需要在 &lt;div id="pippo"&gt; 及其子元素之间插入另一个容器,然后根据需要手动更新新容器的宽度/高度。

    停留在典型的文档流程中

    如果您不需要处理正常的文档流程,而只是在寻找任何可能的方式来扩展父级,请结合使用 display: inline-blockwhite-space: nowrap

    $(document).ready(function() {
    	setInterval(function() {
            $('#pippo').append('<div class="childDiv">m</div>')
        }, 250);
    });
    #pippo {
        border: solid 2px #000;
        height: 200px;
        width: 100%;
        overflow-y: scroll;
        overflow-x: scroll;
        white-space: nowrap;
    }
    
    .childDiv {
        display: inline-block;
        border: solid 1px #000;
        margin: 5px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    
    <div id="pippo"></div>

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多