5 个版本
| 0.2.1 | 2024年2月5日 |
|---|---|
| 0.2.0 | 2023年10月27日 |
| 0.1.2 | 2023年9月18日 |
| 0.1.1 | 2023年8月3日 |
| 0.1.0 | 2023年7月26日 |
#170 in GUI
每月下载量 22
31KB
417 行
split-yew
此库为 Split.js 库 添加了 Yew 组件包装器。类似于 react-split 组件。
此库不包括 split-grid 组件。
split-yew 已与 split.js 版本 1.6.5 进行过测试
用法
首先,将 split.js 模块包含在您的 index.html 文件的头标签中,如下所示
<script type="importmap">
{
"imports": {
"split.js": "https://unpkg.com/split.js@1.6.5/dist/split.es.js"
}
}
</script>
确保其类型为 importmap,并且导入名为 split.js。同时,确保您选择 ES 模块版本,而不是 CommonJS 版本。值得注意的是,split.js 不包含 ES 模块脚本的压缩版本,因此如果您需要,您将不得不自己打包它。之后,该库应无问题地工作。
与它的 React 对应物类似,您只需要将您想要在可调整大小的分割视图中显示的组件包围起来。
html! {
<Split>
<Component />
// ...
<Component />
</Split>
}
CSS
split.js 不包含任何样式,并且此组件也不会改变这一点。为了使分割可见,您应该使用显示布局样式来编辑分割根元素的样式。我个人推荐使用 flex 布局。要使边框可见,您应使用 .gutter、.gutter-horizontal 和 .gutter-vertical CSS 类来编辑其样式。
split-yew 的实际使用示例是 yew-playground 的前端。分割样式在 应用程序的源代码 中设置,并且它的 CSS 样式表 展示了如何样式化边框。
有关样式更多信息,请查看split.js的文档。
文档
您可以使用props自定义split。为了保持与react-split组件的兼容性,因此您还可以参考它的参考以及Split.js的文档,API有一些细微的变化。
所有props
| 属性 | 类型 | 描述 | 文档 |
|---|---|---|---|
class |
类 |
应用于split容器元素的类 | N/A |
大小 |
Vec<f64> |
每个元素的大小 | 文档 |
min_size |
f64 |
所有元素的最小大小(如果指定了min_sizes,则此值将被忽略) | 文档 |
min_sizes |
Vec<f64> |
每个元素的最小大小 | 文档 |
max_size |
f64 |
所有元素的最大大小(如果指定了max_sizes,则此值将被忽略) | 文档 |
max_sizes |
Vec<f64> |
每个元素的最大大小 | 文档 |
expand_to_min |
bool |
将初始大小扩展到min_size(默认:false) | 文档 |
gutter_size |
f64 |
像素单位 Gutters大小(默认:10) | 文档 |
gutter_align |
GutterAlign |
元素之间的Gutter对齐(默认:GutterAlign::Center) | 文档 |
snap_offset |
f64 |
以像素为单位的Snap到最小大小偏移量(默认:30) | 文档 |
drag_interval |
f64 |
拖动像素数(默认:1) | 文档 |
direction |
方向 |
分割方向:水平或垂直(默认:Direction::Horizontal) | 文档 |
cursor |
光标 |
拖动时显示的光标(默认:Cursor::ColResize) | 文档 |
gutter |
js_sys::函数 |
用于创建每个gutter元素 | 文档 |
element_style |
js_sys::函数 |
用于设置每个元素的风格 | 文档 |
gutter_style |
js_sys::函数 |
用于设置gutter的风格 | 文档 |
on_drag |
js_sys::函数 |
拖动时调用 | 文档 |
on_drag_start |
js_sys::函数 |
拖动开始时调用 | 文档 |
on_drag_end |
js_sys::函数 |
拖动结束时调用 | 文档 |
collapsed |
usize |
此prop替代了对collapse(index)的方法调用 |
文档 |
附加详情
class prop
Split组件包括一个class prop,您可以用来指定包裹所有内部组件的div的类。这有助于设置split的样式,尤其是在使用像TailwindCSS这样的工具时。
min_size和max_size prop
这两个prop最初接受两种不同类型的值,可以是单个数字,指定所有组件的最小/最大大小,或者是一个数字数组,指定每个组件的单独的最小/最大大小。
在Rust中,split-yew有四个不同的props来模拟这种行为
min_size/max_size:其中您可以指定一个值应用于所有组件。min_sizes/max_sizes:其中您可以指定一个值数组,每个值对应一个组件。
虽然您可以同时指定一个min_size和一个min_sizes,但向量变体会始终具有优先级,如下面的示例所示
html! {
<Split min_size={500.0} min_sizes={vec![100.0, 200.0]}>
<ComponentA />
<ComponentB />
</Split>
}
在这个例子中,两个组件将具有100和200的最小大小,而min_size={500.0}将被忽略。
函数props
属性 gutter、element_style、gutter_style、on_drag、on_drag_start 和 on_drag_end 应该接受一个函数或闭包。不幸的是,我无法用 yew::Callback 或 wasm_bindgen::Closure 类型来表示它们。目前我能做的最好的事是使用 js_sys::Function 类型,这仍然可以作为属性传递,也可以传递给 split.js 库本身。
这使得传递这些属性有些不方便,因为 js_sys::Function 类型不包含任何有关函数参数或返回类型的类型信息,然而所有这些信息已经在 split.js 的官方文档中提供,因此如果你需要实现这些函数之一,请参考该文档。
对于实现本身,你可以简单地实现一个 wasm_bindgen::Closure 并将其转换为 js_sys::Function。以下示例展示了如何为 gutter 属性创建这样的函数。
let my_gutter: js_sys::Function = Closure::<dyn Fn(js_sys::BigInt, String, web_sys::Element) -> web_sys::Element>::new(
|index, direction, pair_element| {
// Do something with the arugments and return a value of type web_sys::Element
},
)
.into_js_value()
.into()
如示例所示,my_gutter 的最终类型将是 js_sys::Function。虽然我没有太多将函数从 Rust 传递到 JavaScript 的经验,但我发现的一个问题是,在数字方面,我无法使用普通的 Rust 原始类型,而应使用 js_sys::BigInt。
许可协议
本项目遵循 MIT 许可协议。
依赖关系
~12–17MB
~307K SLoC