Skip to content

EPGItem ​

EPGItem 是可获得焦点的最小单位,用 v-epg-item 注册。

vue
<div v-epg-item>影片</div>

绑定值 ​

ts
/** `v-epg-item` 的绑定值 */
export interface EPGItemOptions {
  /** 所在层级被进入时,优先获得焦点 */
  default?: boolean;
  /** 禁用:保持注册与可见,但不会获得焦点(已获得焦点时仍可作为移动的起点) */
  disabled?: boolean;
  /** 获得焦点时使用的 class,覆盖全局 `focusClass` */
  focusClass?: string;
}
vue
<div v-epg-item="{ default: true }">默认焦点</div>
<div v-epg-item="{ disabled: isLocked }">会员专享</div>
<div v-epg-item="{ focusClass: 'card-focus' }">自定义焦点样式</div>
字段说明
default焦点进入所在层级(组或页面顶层)时,优先落在这个元素上
disabled禁用:元素保持注册、保持可见,但不会获得焦点;方向键会跳过它
focusClass获得焦点时加上的 class,覆盖全局 focusClass

绑定值是响应式的。更新默认入口或禁用状态不会主动移动当前焦点;修改焦点样式时,已聚焦项的 class 会同步更新。

生命周期 ​

时机行为
元素挂载注册,并在元素上写入 data-epg-item-id(仅用于调试)
绑定值或组件更新更新配置;若元素正是当前焦点,重新补上焦点 class
元素卸载注销;若元素正是当前焦点,焦点被清除(不派发 epg-blur)

元素被隐藏(v-show、祖先 display: none、被 KeepAlive 缓存)时仍保持注册,但不会获得焦点。若当前焦点元素被卸载或隐藏,下一次方向操作会优先在原分组内恢复焦点;原分组不可进入时才回到页面入口。若当前焦点元素后来被禁用,它仍可作为方向移动的起点,但不会再次成为目标。

事件 ​

事件触发时机取消默认导航
epg-focus获得焦点否
epg-blur失去焦点否
epg-up / epg-down / epg-left / epg-right焦点在此元素上时按下方向键是
click焦点在此元素上时按下确定键(原生事件)—
vue
<div v-epg-item @epg-focus="preview(movie)" @epg-blur="stopPreview" @click="play(movie)">
  {{ movie.title }}
</div>

<!-- 在第一行按 ↑ 时回到搜索框,而不是按默认规则移动 -->
<div v-epg-item @epg-up="$epg.move(searchRef)">...</div>

<!-- 阻止向左移动 -->
<div v-epg-item @epg-left.prevent>...</div>

事件的完整说明见 事件。

基于 MIT 许可发布 · 支持项目