html 在Qooxdoo窗口中创建一个可增长和收缩的SVG画布,必要时可以使用自动滚动条

yhxst69z  于 2023-01-11  发布在  其他
关注(0)|答案(1)|浏览(113)

使用Qooxdoo我想有一个窗口,只包含一个HTML SVG元素。这个SVG将使用在可调整大小的窗口中的全部可用大小。当窗口变得太小时,自动滚动条将出现,以便SVG内容仍然完全可见(当用户相应地滚动)
我怎样才能做到呢?

avwztpqn

avwztpqn1#

我的解决方案的一些关键时刻是:

  • 使用qx.ui.embed.Html作为svg标记的 Package 器
  • 使用qx.ui.container.Scroll使容器或微件可滚动
  • 使用微件的属性minWidthminHeight停止减小其大小
  • markup中的根SVG元素具有可缩放的宽度和高度(在本例中为100%)
  • 通过属性allowShrinkX: falseallowShrinkY: false关闭SVG容器(qx.ui.embed.Html)的收缩

下面的代码包含了上面提到的所有内容:

const win = new qx.ui.window.Window();
win.setLayout(new qx.ui.layout.Grow());

const svg = '<svg width="100%" height="100%"><circle cx="50%" cy="50%" r="50%" stroke="black" stroke-width="3" fill="red" /></svg>';
const svgWidget = new qx.ui.embed.Html(svg);
svgWidget.set({allowShrinkX: false, allowShrinkY: false, minWidth: 200, minHeight: 200});

const scroller = new qx.ui.container.Scroll().set({width: 300, height: 300, decorator: "main", padding: 5});
scroller.add(svgWidget, {width: "100%", height: "100%"});
win.add(scroller);

win.open();

const doc = this.getRoot();
doc.add(win,
{
  left : 100,
  top  : 50
});

相关问题