跳转到内容

文本省略 ellipsis

布局组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

一行放不下就收成省略号;有没有被裁如实报出来

订单 2024-0731-8842 已由杭州仓发出,预计明日 18:00 前送达,签收前请当面核对包装。

此刻 整段都放得下

行数

lines 为 1 走单行省略,大于 1 按行数裁,末行收省略号

这条商品说明写得很长:材质为 100% 长绒棉,机洗需用中性洗涤剂,不可漂白,低温熨烫,深浅色分开洗涤,首次下水建议单独清洗以免染色。

点击展开

expandable 让整块文字变成一颗按钮,Enter / Space 也按得动

溢出才提示

上面套 Tooltip 按 overflow-change 开关,下面用 tooltip 交给平台的原生提示

配送地址:浙江省杭州市余杭区文一西路 969 号 3 号楼 12 层 1203 室

产物

自定义元素<xh-ellipsis>
Vue 组件XhEllipsis
组合式函数useEllipsis
状态机ellipsisMachine
皮肤@xihan-ui/styles/ellipsis.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="ellipsis"root

Props

属性类型必填说明
linesnumber夹几行,1 为单行,默认 1。
expandableboolean点一下铺开全文。
expandedboolean受控展开;缺省即非受控。
defaultExpandedboolean非受控时的初始展开态。
tooltipboolean真被裁掉了才把整段文字交给平台的原生提示。
onExpandedChange(details: EllipsisExpandedChangeDetails) => voidexpanded 变化意图回调;受控时是唯一出口,非受控随内部转移一并通知。
onOverflowChange(details: EllipsisOverflowChangeDetails) => void量出来的溢出结论翻面时回调。

状态机

状态collapsed · expanded

事件MEASURE · TOGGLE · CONTROLLED.EXPAND · CONTROLLED.COLLAPSE

判据isExpandedControlled

connect API

useEllipsis 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
expandedboolean此刻是不是铺开了全文。
overflowingboolean夹住的那一版有没有被裁掉内容。作者据此决定要不要套一层提示。
setExpanded(next: boolean) => void程序化展开 / 收回,与点一下走同一条路。
measure() => void手动重量一次:字体到位、外层换了布局这类观察器看不见的变化,由作者补一枪。
getRootProps() => T['element']

键盘

规格出处:W3C APG

按键生效条件行为
Enter / Spaceexpandable,焦点在 root 上铺开全文 / 收回夹住的那一版;Space 拦掉翻页的默认动作
Tab / Shift+Tabexpandable停到这块文字上;不可展开时它不带 tabindex,不在 Tab 序列里

Released under The MIT License