美文网首页
可视化拖拽画布布局、标尺(1)

可视化拖拽画布布局、标尺(1)

作者: 大乔是个美少女 | 来源:发表于2021-03-26 16:50 被阅读0次
布局线框图

最近对之前的可视化布局页面进行了优化:
1.对画布编辑条件下,增加边栏,方便用户对拖出画布部分的内容进行查看。
2.优化了标尺的计算逻辑。

需求:给画布元素增加整体边栏

  1. 布局效果:
    画布层+视窗层两层结构。
    当画布层的宽高超过视窗层会出现滚动条。
    滚动条滚动时标尺位置更新。

方案一:给画布模块增加margin
问题:margin-right 在子元素能放进父元素的情况下会不生效
解决:

  1. 方法一:
  • 需要将子元素div更新为absolute才生效。position: absolute;
  • 但是div会有一定概率脱离文档流,同时scale的时候有问题。
  1. 方法二:
  • 使用white-space: nowrap; display: inline-block;
  • 保证margin\ padding right显示。

方案二:增加中间层,形成画布层+中间层+视窗层三层结构,使用flex,使真实画布居中。(采用方法二)

基础效果——全量填充
需求——加个边栏
  1. 标尺实现:
    使用css background渐变,实现标尺效果

水平方向:

           <ul
                className={styles.horizontal}
                style={{paddingLeft: ruler_offset_left}}
            >
                {x_offset.map((x) => {
                    return (
                        <li key={x}>
                            <span className={styles.ruler_value}>
                                {value}
                            </span>
                        </li>
                    );
                })}
            </ul>
.horizontal {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    margin: 0px 0px 0px 15px;
    height: 15px;
    cursor: col-resize;
    background-size: 5px 3px !important;
    background: linear-gradient(to right, #2c2c32 1px, transparent 1px) repeat-x;
    user-select: none;
}

.horizontal > li {
    padding: 0px;
    list-style-type: none;
    width: 51px;
    height: 5px;
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 51px;
    margin: 2px 49px 0 0px;
    border-left: 1px solid #2c2c32;
}

.horizontal > li::before {
    width: 1px;
    height: 4px;
    top: 0;
    left: 0;
    content: '';
    box-sizing: border-box;
    float: right;
    background: #2c2c32;
}

.horizontal .ruler_value {
    font-size: 12px;
    float: left;
    transform: translate(3px, -2px) scale(0.8);
}

垂直方向:

          <ul
                className={styles.vertical}
                style={{paddingTop: ruler_offset_top}}
            >
                {y_offset.map((y) => {
                    return (
                        <li key={y}>
                            <span className={styles.ruler_value}>
                                {value}
                            </span>
                        </li>
                    );
                })}
            </ul>
.vertical {
    margin: 0;
    padding: 0;
    cursor: row-resize;
    width: 15px;
    background-size: 3px 5px !important;
    background: linear-gradient(to bottom, #2c2c32 1px, transparent 1px)
        repeat-y;
    user-select: none;
}

.vertical > li {
    list-style-type: none;
    padding-left: 6px;
    width: 6px;
    height: 51px;
    list-style-type: none;
    margin-bottom: 49px;
    border-top: 1px solid #2c2c32;
    border-bottom: 1px solid #2c2c32;
}

.vertical .ruler_value {
    font-size: 12px;
    transform: rotate(90deg) translate(-3px, -2px) scale(0.8);
    display: block;
}
旧版 新版

相关文章

  • 可视化拖拽画布布局、标尺(1)

    最近对之前的可视化布局页面进行了优化:1.对画布编辑条件下,增加边栏,方便用户对拖出画布部分的内容进行查看。2.优...

  • 可视化拖拽画布布局、标尺(2)

    最近对之前的可视化布局页面进行了优化:1.对画布编辑条件下,增加边栏,方便用户对拖出画布部分的内容进行查看。2.优...

  • 可视化拖拽画布布局、标尺(3)

    需求一:计算完成标尺前后位置,在缩放条件下要保持缩放总长度相同。 解决: 在渲染坐标数组时,{((x / prop...

  • 如何实现一款轻量级的可视化画布引擎

    在很多定制化的可视化场景中,拖拽、缩放、全屏操作必不可少,尤其对于业务复杂的可视化需求,当画布内容足够多,可视区域...

  • Vue-grid-layout实现web拖拽布局功能

    最近在完成web端在线绘图功能时,需要开发一个从左侧拖拽一种图标到画布中。调研了非常多种现在做拖拽布局的组件,调研...

  • ps

    command + r 显示隐藏标尺在标尺上可以拖拽参考线可以通过移动工具拖拽回去,也可以通过在视图菜单中选择清...

  • ConstraintLayout_1:可视化拖拽布局

    前言 ConstraintLayout是安卓后期推出的一个优秀的布局组件,它最主要的一个优点,就是可以有效地解决布...

  • 我的PS学习之路(3)—表盘绘制

    一、新建画布,设好标尺和网格 1.新建画布:设置宽度:800像素,高度:600像素;分辨率72像素/英寸,RGB格...

  • Android开发 - UI

    虽然Android Studio提供了可视化编辑工具来让你通过拖拽的方式进行页面布局,但是这不利于真正了解界面背后...

  • 低代码平台和BPMS

    目前工作环境中涉及到的低代码平台,常规意义上被称之为流程中心,即围绕着可视化拖拽的画布,用户可以通过流程编排的方式...

网友评论

      本文标题:可视化拖拽画布布局、标尺(1)

      本文链接:https://www.haomeiwen.com/subject/jjojhltx.html