【问题标题】:Get width in percentage from Resizable divs from jQuery UI on load and on resize在加载和调整大小时从 jQuery UI 的 Resizable div 获取宽度百分比
【发布时间】:2016-11-09 01:42:17
【问题描述】:

所以我把这两个 div 放在一起。这两个 div 都可以使用 jQuery UI 调整大小。

在调整 div 的大小时,我将宽度设为百分比并将其输出到相应的输入,但发生了一些奇怪的事情。

HTML:

<div id="parent">
   <div id="div1"> My Data1
     <input type="text" class="div1">
   </div> 
   <div id="div2"> My Data2
     <input type="text" class="div2">
   </div> 
</div>

Javascript:

$("#div1").resizable();
$('#div1').resize(function(){
   $('#div2').width($("#parent").width()-$("#div1").width()); 
});
$(window).resize(function(){

   var div1width = $(".div1").width() / $('.div1').parent().width() * 100;
   // Paste percentage into the inputs
   $('.div1').val(div1width);

   var div2width = $(".div2").width() / $('.div2').parent().width() * 100;
   // Paste percentage into the inputs
   $('.div2').val(div2width);
});

CSS:

#parent{
    position:absolute;
    height:100%;
    margin:0;
    padding:0;
    width:100%;
}
#div1{
    position:relative;
    float:left;
    height:100%;
    width:50%;
    background-color:#A2A;
}
#div2{
    position:relative;
    float:left;
    height:100%;
    width:50%;
    background-color:#BBB;
}
.ui-resizable-e {
    cursor: e-resize;
    width: 7px;
    right: -5px;
    top: 0;
    height: 100%;
    background: black;
}

小提琴:https://jsfiddle.net/uvcxfmfy/1/

发生的情况是,例如,当我将 div1 缩小时,宽度百分比甚至会上升到 800% 以上。当我把它变宽时,宽度百分比停止在 20%。所以出了点问题,但我找不到它在哪里。

我想要达到的目标。

在页面加载时,两个 div 的宽度都应为 50%。当我把 div1 变小时,它应该一直到 0%,当我把它变大时,它应该到 100%。

这意味着如果 div1 设置为 25%,则 div2 将有 75% 当 div1 设置为 58% 时,div2 为 42%。

感谢大家的帮助。

【问题讨论】:

  • 好的,再次,正如我在这个问题的上一个迭代中所指出的,$(".div1").width() 正在为您提供具有类“div1”的&lt;input&gt; 元素的宽度。 &lt;input&gt; 的父级是 ID 为“div1”的&lt;div&gt;。我不确定我是否理解计算输入元素宽度与 div 宽度之比的意义。
  • 哦,这很容易解释。最终用户在应用程序的后端看到的基本上是我们在小提琴中看到的,没有那些将被隐藏的输入。然后用户拖放columns (#div1 &amp; 2),直到用户满意为止。因此,假设一个是 25%,另一个是 75%。然后这些值也会进入隐藏输入。在保存应用程序时,输入被存储。然后在前端,这些保存的值用于生成列宽。希望这可以清除它。我认为在最初的问题中添加所有这些没有意义?
  • @Pointy 输入实际上与问题无关,它们只是显示值。出于这个问题的目的,它也可能是一个 console.log 或警报。我只想使 div 可调整大小并返回从 0 到 100 的百分比宽度。
  • 嗯,输入肯定与小提琴的工作方式有关,因为$(".div1") 指的是 id 为“div1”的 div 内的&lt;input&gt; 元素。

标签: javascript jquery html css


【解决方案1】:

希望对您有所帮助。 你应该使用这个数学来获得百分比:

Math.round(( docWidth - elemWidth ) / docWidth * 100)

我只是订购您的代码并更改计算行,看看这个示例

$("#div1").resizable();

$('#div1').resize(function(){
   $('#div2').width($("#parent").width()-$("#div1").width()); 
});

$(window).resize(function(){
    elementResize()
});

$(document).ready(function(){
    elementResize()
});

function elementResize(){
   $('#div2').width($("#parent").width()-$("#div1").width()); 
   $('#div1').height($("#parent").height()); 

   var parentwidth = $("#parent").width(),
       div1width = $("#div1").width(),
       div2width = $("#div2").width(),
       div1percentage = Math.round((div1width / parentwidth) * 100),
       div2percentage = Math.round((div2width / parentwidth) * 100);

   $('.div1').val(div1percentage);
   $('.div2').val(div2percentage);
}

Fiddle demo

【讨论】:

  • 感谢@Zeev Katz,是的,我觉得它很有帮助。我刚刚检查了小提琴,但并没有真正明白这一点;-) 当您将其大小调整为一个像素时,您可以明白我的意思。左边的输入应该是80%,右边的输入应该是20%,但左边的输入是24.9%,右边是99.41%,所以我想我在计算时搞砸了宽度。
  • 嘿,谢谢,没想到会这样,但真的很喜欢。喜欢你把它放到一个函数中而不是像我一样复制/粘贴它的事实。您选择 .floor() 而不是 .round() 是否有特定原因?
  • 对不起,我刚刚注意到这些值是错误的。嗯如何解释...当我使宽度变小时,百分比上升而不是下降。因此,与其说 10%,不如说是 90%。在我自己的小提琴中,我完全重做了计算,它正在工作,但更喜欢你的函数方式。你能用这个功能更新这个小提琴吗? jsfiddle.net/uvcxfmfy/11
  • 您能否编辑您的答案以反映这个最新的小提琴并更改您答案中的小提琴链接。我正在删除我的答案,因为这个更好。能不能给它戴个帽子。所以它永远不会超过 100% 或低于 0%。当我将第一个 div 一直向右移动时,输入显示 101%,这将破坏目的。
  • 接受了答案并删除了我自己的答案,因为这是我要使用的答案。你能帮忙实施这个上限吗?如果你愿意,我想去聊天解释一下!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多