npm.io
2.2.1 • Published 2d ago

vuepg

Licence
MIT
Version
2.2.1
Deps
0
Size
127 kB
Vulns
0
Weekly
0
Stars
7

vuEPG

vuEPG

Vue 2.7 / Vue 3 焦点管理与空间导航,适用于现代浏览器及 TV、IPTV、机顶盒,兼顾 Android 4.x 等运营商存量盒子

已在各大运营商机顶盒项目中实际落地

简体中文 · English

npm version npm downloads CI bundle size Vue 2.7 | 3 Target: Chromium 30+ with ES5 build and polyfills Android 4.x integration license

文档 · 完整示例 · Android 4.x 接入 · 迁移指南 · 更新日志


vuEPG 致力于让 Vue 页面更容易接入焦点管理与空间导航,减少现代浏览器和运营商存量盒子开发中的适配与调试工作。

在现有页面元素上添加指令即可管理焦点和方向导航,支持键盘、遥控器输入,也可通过 API 接入手柄、虚拟遥控器和原生回调。页面保留自己的业务组件和设计。运营商存量盒子的应用维护,常需要兼顾 Android 4.x 设备与旧 WebView。对应工程使用 Vue 2.7 + ES5 应用构建 + 必要 polyfill,接入步骤见旧设备指南。

仓库附带一个可独立复制的完整示例工程,配好 Vue 2.7、Vite / webpack 双开发入口、ES5 构建、必要 polyfill 和真实 Chromium 30 回归测试。复制后替换页面与数据,就能开始自己的 TV / IPTV 应用开发,也能更快上手 Android 4.x 等运营商存量盒子开发。详见完整示例。

特性

  • 多种输入接入:内置键盘与遥控器映射,通过逻辑 API 接入手柄、虚拟控制器或原生按键回调
  • 空间导航:按元素的真实位置计算方向键的下一个焦点,不需要手写跳转关系
  • 分组与默认焦点:组内优先、逐层向外查找,进入分组时落在指定的默认元素上
  • 可靠的失效处理:导航跳过卸载、隐藏(v-show、KeepAlive)、禁用的目标;焦点失效后优先在原分组内恢复
  • 可选自动滚动:用 v-epg-scroll 标记实际滚动容器,保持焦点元素可见
  • 原生 DOM 事件:epg-focus、epg-blur、epg-enter、epg-leave 与方向事件,用 .prevent 拦截默认移动
  • 按键可定制:内置方向、确定、返回映射,兼容只提供 keyCode 的老旧机顶盒
  • Vue 2.7 / Vue 3:同一套 API,两个版本在 CI 中分别运行完整测试
  • 零依赖:无运行时依赖,产物为 ES2015,兼容 webpack 4,完整 TypeScript 类型

安装

pnpm add vuepg

使用

// main.ts
import { createApp } from "vue";
import VuEPG from "vuepg";
import App from "./App.vue";

createApp(App)
  .use(VuEPG, { backHandler: () => history.back() })
  .mount("#app");

// Vue 2.7:Vue.use(VuEPG, { backHandler: () => history.back() })
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { useVuEPG } from "vuepg";

const epg = useVuEPG();
const first = ref<HTMLElement>();
onMounted(() => {
  epg.move(first.value);
});
const open = (id: number): void => {
  alert(`选择了内容 ${id}`);
};
</script>

<template>
  <main v-epg-group>
    <button ref="first" v-epg-item="{ default: true }" @click="open(1)">内容 1</button>
    <button v-epg-item @click="open(2)">内容 2</button>
  </main>
</template>

<style>
.vuepg-focus {
  outline: 3px solid #d81b60;
}
</style>
  • 方向键按位置移动焦点,组内找不到目标时跳到相邻的组
  • 确定键触发当前元素的 click
  • 返回键调用本页的 onBack,没有时调用全局的 backHandler

完整用法请查看 文档,也可以先玩一下 在线演示。

已有焦点库项目可按迁移指南接入:vuEPG 1.x、vue-epg 或 vue-tv-focusable / tv-focusable。

附带完整示例工程

遥控学习中心可直接作为新工程的起点,开发、构建与兼容验证配置都已包含。它展示循环导航、滚动、页面位置恢复、动态列表、弹窗复焦和原生按键接入。学习主题只是演示内容,交互代码可以用于自己的菜单、列表和卡片。

vuEPG 完整遥控交互示例

复制 examples/tv-training 目录后,在该目录运行:

pnpm install
pnpm dev       # Vite,现代浏览器快速开发
pnpm dev:tv    # webpack + Babel,旧机顶盒开发
pnpm build     # ES5 兼容应用
pnpm preview   # 查看生产产物

开发 vuEPG 仓库时,也可从根目录运行:

pnpm install
pnpm example:dev       # 现代浏览器,Vite
pnpm example:dev:tv    # 旧盒子真机开发,webpack + Babel
pnpm example:build    # ES5 应用产物
pnpm example:preview  # 静态产物预览

完整说明见 examples/tv-training。

开发与兼容验证

pnpm legacy:install  # Docker 安装并核验真实浏览器与驱动
pnpm test:chrome30  # 构建当前包,测试生产与 webpack 开发入口
pnpm legacy:clean   # 清理项目旧浏览器缓存、镜像与结果

真实 Chromium 30 自动回归覆盖生产、webpack 开发及热更新;同时检查导航、滚动、弹窗和焦点恢复。安装、日志与截图说明见自动回归指南。

参与贡献

欢迎提交 Issue 与 Pull Request,开发流程见 CONTRIBUTING.md。

支持项目

我的蓝色大肥鱼为爱发电没饭吃了!!!如果本项目有帮到你,可以给她喂一点白饭!

吃白饭的蓝色大肥鱼

点个 Star、提个建议、分享给朋友,也都是支持。

投喂入口 · 微信 / 支付宝

点击图片可查看原图。

微信支付支付宝
微信支付支持项目收款码 支付宝支持项目收款码

致谢

License

MIT 2022 – Present UzkiS

Keywords