Как получить размер панели при изменении размера?

У меня есть многопанельная компоновка jQuery, и я хочу знать размер внутренней центральной панели при ее изменении. Функция document.ready выглядит следующим образом:

$(document).ready(function () { 

    outerLayout = $('body').layout({ 
        spacing_open:           8
    ,   south__spacing_open:    4 
    ,   north__minSize:         40
    ,   north__maxSize:         200
    ,   center__onresize:       resizeInnerLayout
    ,   resizeWhileDragging:    true
    ,   triggerEventsWhileDragging: true
    }); 

Вот функция resizeInnerLayout:

function resizeInnerLayout() {
    var width=$('#content-middle').width();
    var height = $('#content-middle').height();
    console.log("content-middle size = ("+width +"," +height +")");
};

Вот HTML:

<div id="content-middle" class="inner-center">
    <svg></svg>
</div> 

Javascript помещает диаграмму d3 в SVG. Мне нужно знать размер деления, поскольку он изменяет размер, когда пользователь перемещает полосу делителя, чтобы я мог соответствующим образом изменить размер диаграммы. В настоящее время console.log ничего не выводит.

Я также попытался привязать функцию к событию layoutpaneresize следующим образом:

$('.inner-center').bind('layoutpaneresize', function(paneName, $pane, paneState, paneOptions) {
        console.log("content-middle size = ("+paneState.width +"," +paneState.height +")");     
    });

Но это также ничего не выводит. Ни один не сделал это:

$('.inner_center').resize(function() {
    console.log("content-middle is being resized");
});

Это работает, но только если размер окна браузера изменяется, а не если размер разделителя внутри окна изменяется. Даже тогда он сообщает о размере, когда вы начинаете изменять размер, но не обновляется, поскольку размер продолжает изменяться.

window.addEventListener("resize", drawChart);

Есть идеи?

2 ответа

Вы должны использовать jQuery UI .resizable() взаимодействие.

Синтаксис

$(element).resizeable({
    handles: 'n|s|e|w|nw|ne|sw|se',
    minWidth: Int,
    minHeight: Int,
    maxWidth: Int,
    maxHeight: Int,
    resize: function(event, ui) {
        // Statements
    }
});

пример

$("div").resizable({
  handles: 'e, se, s',
  minWidth: 50,
  minHeight: 50,
  maxWidth: 200,
  maxHeight: 200,
  resize: function(event, ui) {
    $("pre").text(ui.size.width + 'x' + ui.size.height);
  }
});
.ui-resizable-e, .ui-resizable-s {
  background-color: black;
}
div {
  width:100px;
  height:100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<div>Resize Me</div>
<br>
Result
<pre></pre>

Я взял приведенный ниже код от Maytha8 и его сообщения выше.
За исключением того, что мой показывает ширину и высоту вместо левого и правого.
Я надеюсь, что это поможет другим.
Спасибо, Maytha8

Уэйн

Другие вопросы по тегам