在 Seed Rust 应用程序中为 SVG 文本元素调用 getBBox

Posted

技术标签:

【中文标题】在 Seed Rust 应用程序中为 SVG 文本元素调用 getBBox【英文标题】:Calling getBBox for a SVG text element in a Seed Rust application 【发布时间】:2021-03-11 20:26:54 【问题描述】:

我刚刚使用 WASM 和 Seed 迈出了第一步,到目前为止,这是一次非常顺利的体验。我能够使用svg!circle!text!、...和类似的宏来创建 SVG。为了以正确的方式生成我的 SVG,我必须测量文本。我的想法是生成SVG文本节点并在节点上调用getBBox。我发现 Seed 正在使用 web_sys 和 getBBox is implemented there。

我的问题是如何从text! 创建的Node 到SvgTextElement。我试图访问node_ws 字段,但它似乎是“空的”。它可能尚未创建,但我现在对 Seed 的内部结构还不够了解。

那么如何创建一个 SVG 文本节点,以便在生成“主”SVG 节点之前对其调用 getBBox?

【问题讨论】:

【参考方案1】:

您可以使用el_ref 来获取对DOM 元素的引用。像这样的东西应该可以工作:

struct Model 
    element: ElRef<web_sys::SvgTextElement>,


fn view(model: &Model) -> Node<Msg> 
    svg!![
        text![
            el_ref(&model.element),
            // ...
        ],
        // ...
    ]


fn init(orders: &mut impl Orders<Msg>) -> Model 
    orders.after_next_render(|_| Msg::Rendered);
    // ...


fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) 
    match msg 
        Msg::Rendered => 
            let element = model.element.get().expect("no svg text element");
            let b_box = element.get_b_box();
            // ...
        
        // ...
    

【讨论】:

以上是关于在 Seed Rust 应用程序中为 SVG 文本元素调用 getBBox的主要内容,如果未能解决你的问题,请参考以下文章

如何在React Native中为SVG坐标设置动画?

在 chartist.js 中为 SVG 数据点添加轮廓

在 SVG 路径动画中为 SVG 设置动画

如何在浏览器中为 SVG 动画添加硬件加速?

如何在 CSS 中为 SVG 元素添加边框/轮廓/描边?

如何在 svg 中为贝塞尔曲线的笔划添加纹理?