System 浏览器系统工具
GB.System 是一组相互独立的浏览器单功能方法,可用于移动端 rem 适配、禁用右键菜单、监听页面就绪与加载完成状态,以及获取页面或指定资源的下载进度。它没有实例状态,也不采用链式调用。
安装与引入
浏览器直接引入
<script src="https://cloud.m775.net/js/system.js"></script>
npm 项目
npm i @gentbo/system
import '@gentbo/system';
基本使用
通过 GB.System() 选择需要的功能并直接调用。每个方法只完成一项操作,彼此之间没有依赖关系。
GB.System().ready(() => {
console.log('DOM 已经可以操作');
});
GB.System().menu(() => {
console.log('右键菜单已禁用');
});
API 速查
.resize(width?, size?)根据视口宽度动态设置根元素字号,实现 rem 比例缩放。.menu(callback?)禁用页面右键菜单,并在右键操作发生时执行可选回调。.ready(callback)DOM 解析完成后异步执行回调。.complete(callback)窗口 load 事件触发时执行回调。.progress(callback, url?)通过 XHR 获取当前页面或指定资源的下载进度。响应式 rem 适配
resize(width = 750, size = 16) 以设计稿宽度为基准,根据当前页面宽度调整根元素 font-size。在 750px 宽的设计稿中,调用默认配置后 1rem 对应 100px,设计稿上的 32px 可写成 0.32rem。
GB.System().ready(() => {
GB.System().resize(750, 16);
});
width设计稿基准宽度,默认 750;无法转换为有效数字时也使用 750。size页面默认字号,默认 16;会设置为 body 的基础字体大小。该方法会立即计算一次,并通过独立的 resize 监听器在窗口尺寸变化时重新计算。重复调用会替换 System 自己注册的旧监听器,不会覆盖业务代码的 window.onresize。
禁用右键菜单
menu(callback) 在 document.body 上监听 contextmenu 并阻止浏览器默认菜单,回调会收到原生事件对象。重复调用时会替换 System 之前注册的右键监听器。
GB.System().ready(() => {
GB.System().menu(event => {
console.log('用户触发了右键操作');
});
});
该设置作用于整个 body。只需要局部禁用时,应直接对目标元素使用原生事件监听。
DOM 就绪
ready(callback) 用于在 DOM 可以安全访问后运行代码。如果页面仍在解析,则等待 DOMContentLoaded;如果 DOM 已经就绪,则通过零延迟任务异步执行,保证调用时序一致。
GB.System().ready(() => {
const app = document.querySelector('#app');
app.removeAttribute('hidden');
});
页面加载完成
complete(callback) 监听窗口的 load 事件,适合等待样式、图片和其他页面资源加载完成后再执行操作。
GB.System().complete(() => {
document.body.classList.add('loaded');
});
如果调用时页面已经加载完成,回调会通过零延迟任务异步执行;否则等待下一次 load 事件,并且只执行一次。
资源加载进度
progress(callback, url?) 通过 XMLHttpRequest 重新请求资源。未传入 URL 时请求当前页面地址;传入 URL 时请求指定资源。
const request = GB.System().progress((complete, ratio, error) => {
if (error) {
console.error('加载失败:', error.type, error.status);
return;
}
const percent = Math.round(ratio * 100);
console.log(`${percent}%`);
if (complete) {
console.log('资源加载完成');
}
}, '/assets/package.zip');
// 如有需要,可主动取消
// request.abort();
complete加载过程中为 false;请求以 HTTP 2xx 状态完成时为 true。ratio0 到 1 之间的进度比例;最终完成时为 1。error正常加载时为 null;失败时包含 type、status 和 url。url可选资源地址;空值默认使用 location.href。返回值返回 XMLHttpRequest,可用于调用 abort();回调无效时返回 null。只有响应提供可计算的内容长度时才会收到过程进度。该方法会产生一次额外的 GET 下载,并将响应作为 Blob 接收,不适合仅为展示进度而重复请求大型资源。跨域地址还需要服务端允许 CORS。
使用边界
浏览器环境依赖 window、document、document.body 和 XMLHttpRequest,不能直接用于 Node.js 服务端。独立调用每个公开方法都是单功能操作,不需要初始化,不共享配置,也不支持链式调用。错误处理progress() 通过第三个回调参数报告 HTTP、网络、取消和超时错误;复杂请求仍建议使用 Transport。