【问题标题】:how can i dynamically calculate and draw canvas border from user input如何根据用户输入动态计算和绘制画布边框
【发布时间】:2021-03-01 11:12:00
【问题描述】:

我是画布的新手。我的要求是在 SVG 中绘制矩形,而我已经通过 d3 库实现了这一点。

             this.borderWidth = 300 //(dynamic value);
               this.maxWidth = 600;
             this.borderHeight = 400; //(dynamic value);
            this.maxHeight = 600;
             var svg = d3.select(this.child.canvas.current).append('svg')
                .attr('id','Preview')
                .attr('width', this.borderWidth)
                .attr('height', this.borderHeight)
                .style('border', '1px solid black')

但我必须从输入字段中动态绘制边框,该边框不应跨越
this.maxWidth 值和 this.maxHeight

但随后输入的字段值以厘米(厘米单位)为单位;

问题是当用户输入一个大的输入值时,边框将跨越最大宽度和最大高度

如何从输入字段中动态绘制边界,该边界应该在最大宽度和最大高度之间? 请帮我通过计算相对维度找到解决方案

【问题讨论】:

    标签: javascript html svg d3.js canvas


    【解决方案1】:

    如果用户输入的是一个厘米的值,你必须找出哪个是最大的,例如,如果他输入 20 厘米宽和 5 厘米高:

    width = maxwidth
    height = 5/20 * maxheight
    

    那么你的矩形应该是正确的比例,并且永远不会超过 maxwidth 或 maxheight(请注意,某些特定的矩形,如正方形可能是一个问题)。

    【讨论】:

    • ` 让 maxWidth = 600,让 maxHeight = 600;让边界宽度 = 3;让边界高度 = 11;让borderAspectRatio = 边界宽度/边界高度; if (borderAspectRatio > 1) { maxHeight = maxWidth / borderAspectRatio; } else { maxWidth = maxHeight * borderAspectRatio; `我已经实现了这样是正确的吗? '
    • 我会做这样的事情,但是我不确定,试着找出最有效的方法:` let maxWidth = 600, let maxHeight = 600;让边界宽度 = 3;让边界高度 = 11;让borderAspectRatio = 边界宽度/边界高度; if (borderAspectRatio > 1) {borderWidth = maxWidth;边界高度 = 边界纵横比 * 最大高度 } 否则 { 边界高度 = 最大高度;边界宽度 = 最大宽度 / 边界纵横比; } ` 然后你可以根据borderWidth和borderHeight绘制你的矩形。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2017-08-10
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多