css自定义属性+inputproperties是唯一响应式通道,worklet必须通过css.paintworklet.addmodule()加载同源https/localhost的js文件,且需css.registerproperty()注册变量、手动处理dpr以确保高清绘制。

不能靠 JS 函数传参,必须用 CSS 自定义属性 + inputProperties 声明,这是唯一被浏览器识别的响应式通道。
注册 worklet 必须走 CSS.paintWorklet.addModule(),不能内联或 script 引入
直接写 <script>registerPaint(...)</script> 或用 <script src="painter.js"></script> 加载,浏览器完全无视——背景变透明,控制台也不报错。只有 CSS.paintWorklet.addModule() 加载独立 JS 文件才生效。
- worklet 脚本必须是同源、HTTPS 或
localhost下的服务(file://协议彻底不支持) - 启动本地服务:比如
python3 -m http.server 8000,然后访问http://localhost:8000 - JS 文件需返回
Content-Type: application/javascript响应头,否则 Chrome/Firefox 会静默拒绝 - 模块里不能出现
document、window、setTimeout等任何 DOM/BOM API
registerPaint() 名称必须和 CSS 中 paint(...) 完全一致
拼写差一个字符,背景就空白,DevTools 里也看不到错误提示。只有打开 Rendering → “Paint flashing” 才能发现该区域根本没触发绘制。
- CSS 写
background: paint(wave-bg),JS 就得registerPaint('wave-bg', class {...}) - 名称不支持空格、大写字母(如
'MyWave'会报Invalid paint worklet name) - 连字符
-和下划线_区分大小写,'dots-bg'≠'dotsBg' - 重复注册同名 worklet,后一次直接覆盖前一次,无警告
动态响应靠 inputProperties + CSS.registerProperty(),不是 JS 变量
paint() 函数里没法监听元素 resize 或 CSS 变量变化。所有动态输入都得显式声明、预先注册,否则 properties.get('--foo') 返回空值,不报错但拿不到值。
- 在 worklet 类中写:
static get inputProperties() { return ['--wave-amplitude', '--color-primary']; } - 主页面提前注册变量类型:
CSS.registerProperty({ name: '--wave-amplitude', syntax: '<number>', inherits: false, initialValue: '12' });</number> - 修改变量触发重绘:
el.style.setProperty('--wave-amplitude', '24');,无需手动调用重绘逻辑 - 未注册的变量名(比如拼错成
--wvae-amplitude)在properties.get()中始终返回空,不会抛异常
高清绘制要手动处理 DPR,别直接用 size.width/height
ctx.fillRect(0, 0, 100, 100) 画出来的是 100 CSS 像素,高 DPI 屏幕下模糊。worklet 里没有 window.devicePixelRatio,得从 canvas 推算。
- 安全做法:
const dpr = ctx.canvas.width / size.width || 1; - 绘图时用
size.width * dpr作实际像素宽,而不是直接用size.width -
ctx.fillStyle对颜色格式敏感:优先用rgb(59, 130, 246),避免#3b82f6简写或hsl()可能解析失败 - 高频重绘(比如每帧更新
--time)时,paint()里别做路径计算、贝塞尔拟合等重逻辑,预计算好坐标数组传进去
最常被忽略的是 CSS.registerProperty() 这一步——没它,inputProperties 声明的变量就只是字符串,不会随样式变更自动更新;还有 DPR 处理,不加这层缩放,Retina 屏上所有图案都会发虚。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











