【问题标题】:How to add a scrollable area in a Konva stage?如何在 Konva 阶段添加可滚动区域?
【发布时间】:2019-10-31 20:45:03
【问题描述】:

我正在尝试创建一个 Web 应用程序,我正在为此使用 Konva,因为它可以更轻松地对对象进行分组和拖放。现在我想创建一个(或多个)可单独滚动的区域,就像将overflow: scroll 属性添加到div 的样式时发生的那样。

我尝试创建两个Konva.Stage 对象并设置overflow: scroll 属性,但我无法使其工作,只会出现第一阶段。

<div id="container"></div>
<div id="block"></div>

<style>
    div.container {
        margin: 0;
        padding: 0;
        overflow: hidden;
        background-color: #f0f0f0;
    }

    div.block {
        margin: 0;
        padding: 0;
        overflow: scroll;
        background-color: #0000ff;
    }

</style>
var stage = new Konva.Stage({
    container: 'container',
    width: width,
    height: height/2
});

var stage2 = new Konva.Stage({
    container: 'block',
    width: width,
    height: height/2
});

创建可滚动区域的解决方案是什么?

【问题讨论】:

  • 您到底想让什么可滚动?两个大阶段,但在较小的容器内,每个阶段都是可拖动的?还是一个内部有两个阶段的小型可滚动容器?
  • 我想要一个带有可滚动元素的舞台。例如,具有可滚动 Konva.Rect 元素的舞台。我创建 2 个阶段的原因是我不知道如何使元素可滚动,但我不想使用多个阶段。
  • 你看这里了吗? konvajs.org/docs/sandbox/…
  • 是的,但它并没有真正的帮助

标签: html scroll stage konvajs


【解决方案1】:

要创建一个可滚动的区域,您可以创建一个大舞台,但将其放在一个带有overflow: auto的较小容器中

// create large stage
const stage = new Konva.Stage({
  container: 'container',
  width: window.innerWidth * 2,
  height: window.innerHeight * 2
});

const layer = new Konva.Layer();
stage.add(layer);

const circle = new Konva.Circle({
  x: stage.width() / 2,
  y: stage.height() / 2,
  radius: 150,
  fill: 'green'
});
layer.add(circle);

layer.draw();
body {
  padding: 0;
  margin: 0;
}

#container {
  width: 100vw;
  height: 100vh;
  overflow: auto;
}
<script src="https://unpkg.com/konva@^2/konva.min.js"></script>
<div id="container">
  <div id="stage"></div>
</div>

【讨论】:

  • 我想我没有正确解释,很抱歉造成混乱。我想要的是对象(例如,一个圆圈)位于这个可滚动的大 Konva 舞台区域内的可滚动区域内。就像这里的第一个示例:overflow CSS,一个更大的可滚动区域内的一个小的可滚动区域。
  • 这是一项复杂的任务。您必须创建一个剪辑组并手动实现所有滚动(绘制滚动条、然后移动等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2022-01-13
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多