npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

node-dommatrix

v1.1.1

Published

A TypeScript implementation of DOMMatrix compliant with W3C standards, optimized for Node.js environments

Readme

node-dommatrix

一个符合规范的W3C DOMMatrix实现,用于2D/3D矩阵变换。适用于图形库、动画系统以及任何需要精确几何变换的应用场景。


✨ 核心特性

  • 遵循W3C标准:严格按照几何接口规范实现
  • 双模式支持:无缝处理2D(3×3)和3D(4×4)矩阵
  • 类型安全:完整的TypeScript支持,带有严格的类型定义
  • 轻量级:压缩后约4KB,无依赖
  • CSS兼容:输出matrix()/matrix3d()字符串,可直接用于样式中

🚀 安装

# npm
npm install node-dommatrix

# yarn
yarn add node-dommatrix

📖 API 参考

🔹 DOMMatrix 类

构造函数

支持多种初始化方式创建新矩阵:

| 语法 | 描述 | |-----------------------------------|----------------------------------------------------------------| | new DOMMatrix() | 空的单位矩阵(默认2D模式) | | new DOMMatrix(transformString) | 从CSS变换字符串创建(例如:"translate(10px) rotate(30deg)") | | new DOMMatrix(matrixArray) | 从数组创建:2D矩阵需要6个元素[a,b,c,d,e,f],3D矩阵需要16个元素 | | new DOMMatrix(otherMatrix) | 克隆另一个DOMMatrix实例 |

示例:

// 从CSS变换字符串创建
const mat = new DOMMatrix('translate(50px, 100px) scale(2) rotate(45deg)');

// 从2D数组创建
const identity2d = new DOMMatrix([1, 0, 0, 1, 0, 0]);

// 从3D数组创建
const identity3d = new DOMMatrix([
  1,0,0,0,
  0,1,0,0,
  0,0,1,0,
  0,0,0,1
]);

🔸 核心方法

| 方法 | 参数 | 返回值 | 描述 | |-------------------------|--------------------------|-----------------|----------------------------------------------| | clone() | - | DOMMatrix | 创建矩阵的深拷贝 | | identity() | - | void | 将矩阵重置为单位矩阵(无变换) | | multiply(other) | other: DOMMatrix | DOMMatrix | 返回新矩阵:this × other | | multiplySelf(other) | other: DOMMatrix | this | 修改当前矩阵:this = this × other | | inverse() | - | DOMMatrix \| null | 返回逆矩阵(如果是奇异矩阵则返回null) | | transformPoint(point) | point: DOMPointInit | DOMPoint | 将矩阵应用于点进行变换 | | toString() | - | string | 返回兼容CSS的变换字符串 |

示例:矩阵乘法

const translate = new DOMMatrix().translateSelf(10, 20);
const rotate = new DOMMatrix().rotateSelf(30);

// 创建新矩阵:translate × rotate
const combined = translate.multiply(rotate);

// 或者在当前矩阵上直接修改
translate.multiplySelf(rotate);

示例:逆变换

const matrix = new DOMMatrix().scaleSelf(2);
const inverse = matrix.inverse(); // 逆矩阵将缩放0.5倍

// 逆转变换
const point = new DOMPoint(4, 6);
const transformed = matrix.transformPoint(point); // {x:8, y:12}
const original = inverse!.transformPoint(transformed); // {x:4, y:6}

🔸 变换方法

所有变换方法都有两种变体:

  • 非变异版本method() 返回应用了变换的新矩阵
  • 变异版本methodSelf() 直接在当前矩阵上应用变换

| 方法 | 参数 | 返回值 | 描述 | |-------------------------|----------------------------------------------------------------------------------------------|-----------------|--------------------------------------| | translate(tx, ty?, tz?) | tx: number(X方向平移)ty: number(Y方向平移,默认:0)tz: number(Z方向平移,默认:0) | DOMMatrix | 带平移的新矩阵 | | translateSelf(tx, ty?, tz?) | 同上 | this | 平移当前矩阵 | | rotate(angle, x?, y?, z?) | angle: number(角度)x,y,z: 旋转轴(默认:0,0,1 用于2D) | DOMMatrix | 带旋转的新矩阵 | | rotateSelf(angle, x?, y?, z?) | 同上 | this | 旋转当前矩阵 | | scale(sx, sy?, sz?) | sx: number(X方向缩放)sy: number(Y方向缩放,默认:sx)sz: number(Z方向缩放,默认:1) | DOMMatrix | 带缩放的新矩阵 | | scaleSelf(sx, sy?, sz?) | 同上 | this | 缩放当前矩阵 | | skewX(angle) | angle: number(角度) | DOMMatrix | 带X方向倾斜的新矩阵 | | skewXSelf(angle) | 同上 | this | 对当前矩阵应用X方向倾斜 | | skewY(angle) | angle: number(角度) | DOMMatrix | 带Y方向倾斜的新矩阵 | | skewYSelf(angle) | 同上 | this | 对当前矩阵应用Y方向倾斜 | | to2D() | - | DOMMatrix | 转换为2D矩阵(丢弃3D数据) |

示例:链式变换

const matrix = new DOMMatrix()
  .translateSelf(100, 200)    // 移动原点
  .rotateSelf(45)             // 绕新原点旋转
  .scaleSelf(1.5);            // 缩放变换后的矩阵

console.log(matrix.toString()); 
// 输出: matrix(1.06..., 1.06..., -1.06..., 1.06..., 100, 200)

示例:3D变换

const matrix = new DOMMatrix()
  .rotateSelf(30, 1, 0, 0)    // 绕X轴旋转30°
  .translateSelf(0, 0, 50)    // 沿Z轴移动
  .scaleSelf(1, 1, 0.8);      // 缩放Z轴

const point = matrix.transformPoint(new DOMPoint(10, 20, 30));

🔸 属性

| 属性 | 类型 | 描述 | |-----------|---------------------|------------------------------------------------------------| | is2D | boolean | 若矩阵处于2D模式则为true | | elements | readonly number[] | 原始矩阵值(3D矩阵16个元素,2D矩阵6个有效元素) | | a-f | number | 2D组件快捷方式:a=m11, b=m12, c=m21, d=m22, e=m41, f=m42 | | m11-m44 | number | 3D组件访问器(4×4矩阵位置) |

示例:直接访问属性

const matrix = new DOMMatrix().scaleSelf(2, 3);
console.log(matrix.a);  // 2 (m11: X方向缩放)
console.log(matrix.d);  // 3 (m22: Y方向缩放)

matrix.e = 50;          // 设置X方向平移 (m41)
matrix.f = 100;         // 设置Y方向平移 (m42)

🔹 DOMPoint 类

表示3D空间中的点,带有齐次坐标:

构造函数

new DOMPoint(x?: number, y?: number, z?: number, w?: number);

属性

| 属性 | 类型 | 描述 | |------|----------|------------------------| | x | number | X坐标(默认:0) | | y | number | Y坐标(默认:0) | | z | number | Z坐标(默认:0) | | w | number | 齐次坐标(默认:1) |

示例:

const point = new DOMPoint(10, 20, 30);
console.log(point.x); // 10

// 用矩阵变换点
const transformed = matrix.transformPoint(point);

🧩 兼容性

  • Node.js: ≥ 14.0.0
  • 浏览器: Chrome 54+, Firefox 43+, Safari 10+, Edge 15+
  • TypeScript: ≥ 4.0(用于类型定义)

📄 许可证

MIT ©