{"_id":"@deot/helper-wheel","_rev":"9-bf2c0157586cd35a33f9b2cd93a79d59","name":"@deot/helper-wheel","dist-tags":{"latest":"1.1.8"},"versions":{"1.0.1":{"name":"@deot/helper-wheel","version":"1.0.1","license":"MIT","_id":"@deot/helper-wheel@1.0.1","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"923a4883e26e13a531a295f6682c648a2e4f2db5","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.0.1.tgz","fileCount":7,"integrity":"sha512-fnBTry/wHp/sF3uF89QYPnq5jCzvrReY0t4rRk0MCTgNWww7K9b/tAkztvB/Wnqplgp2B/3noTXo9djLuou40A==","signatures":[{"sig":"MEUCIEZaZVmM8VNfm8t8ggYXPvxGiTc8dhkq4cOBwYfCw0eNAiEA96RtEpLTL8zTxzQWjq6cG4S2MGPOnpyKdCxeQTJKN8A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":71513},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"1715846b4800a29e490550d12e2bc12daac1361e","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"9.5.1","description":"滚轮行为优化","directories":{},"_nodeVersion":"18.16.1","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.0.1_1689263240258_0.03318871907367682","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@deot/helper-wheel","version":"1.1.0","license":"MIT","_id":"@deot/helper-wheel@1.1.0","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"61dc1c5a5eadc0445516776652b02cdda5044171","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.0.tgz","fileCount":7,"integrity":"sha512-yoDcl8oCbjse1WMtC/GuDI0nX8X5zL5lpPHOWkovQrz1FNvEWfllCqTe01bMwMfOmXYtRUCNK0pyuXKMJ7GVbg==","signatures":[{"sig":"MEUCIAbSLbqpJQ5SYrAAPIlJRWqBqTnFGfshsb+V0jg7L67FAiEAiUnE99uKX2c4HYZ2iTmMda+P61hH3rze0S3RDzTckgQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":71500},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs.js"}},"gitHead":"aa9e40ce9edfdf36ab99d6a77571d691acaf03f9","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"9.8.0","description":"滚轮行为优化","directories":{},"_nodeVersion":"20.5.1","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.0_1692857123219_0.9146712902477032","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@deot/helper-wheel","version":"1.1.1","license":"MIT","_id":"@deot/helper-wheel@1.1.1","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"d5031a7287ea55a179d33278e262f3ccbd9e469e","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.1.tgz","fileCount":7,"integrity":"sha512-rwpk5+KXL0ZbPKk1+Sl5ds4eGx2NxzeOM3tYMO1tB2pn/AUrBnH6cR9CtQQrfBFBHPOml8QQOY64ETc5jBiQtg==","signatures":[{"sig":"MEYCIQD0lVLSOgyJeydw5XSFVmYB1kStUJmq9dTS5Uj/t1NbbgIhAM12I5uDSUTiORjWE4DhfxtlFOnSXJMORsMAs6O4bklo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":71497},"main":"dist/index.es.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"}},"gitHead":"cb85757afa34ff538c72073a6799f866fc40509c","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"9.8.0","description":"滚轮行为优化","directories":{},"_nodeVersion":"20.5.1","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.1_1692930926876_0.3289959619698355","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"@deot/helper-wheel","version":"1.1.3","license":"MIT","_id":"@deot/helper-wheel@1.1.3","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"5c20e4bcea050bf55c7f453882cf949becb8401d","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.3.tgz","fileCount":7,"integrity":"sha512-Qp7oku7bBt7owS/jUj0UF3SZz02A4Et1E+ZZsVu7cIXyDxCYl4pc3sqqFx4TT1md8JEDUlcTxra1hlgIp5jlsA==","signatures":[{"sig":"MEUCIHKbCwDokZQwEHIszmqXYmcBd5r8f5tDtwLcEvwjpITHAiEAlzBd4DluexQIgehk3HatM8WfhQ0uXDeKes1K3XpcLWo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":71149},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"980a65f7e7e40322974c1719f22e4011687b78c1","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"10.2.3","description":"滚轮行为优化","directories":{},"_nodeVersion":"21.2.0","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.3_1700642927295_0.2606749376859998","host":"s3://npm-registry-packages"}},"1.1.4":{"name":"@deot/helper-wheel","version":"1.1.4","license":"MIT","_id":"@deot/helper-wheel@1.1.4","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"e072d5962fa3f41d3d7989fcd92a54e400b9646f","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.4.tgz","fileCount":7,"integrity":"sha512-xXJDZo2xIxckH/dU6iY7MbQ2aIalGotW6A1uSIBkswBtlMCz7xCJe0gBMWcEGUTKDCW8f0vRaW/+HEBr5EtPOA==","signatures":[{"sig":"MEYCIQCsolQYFSxmsOFV4husfC7VJgVpKjpMXnKpjclqyyXZwwIhAKjfgr5QnS3tLRyC+YBRn6fnPACzHLi1Idl/Tb4vNXrP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71419},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f2ac3d86434c8b244d708619bfe230d97deac7f2","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"10.9.2","description":"滚轮行为优化","directories":{},"_nodeVersion":"23.7.0","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.4_1739432765553_0.9299222017097504","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@deot/helper-wheel","version":"1.1.5","license":"MIT","_id":"@deot/helper-wheel@1.1.5","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"3a6741b85fb0ffe48a453bfcf3370655bc3333c1","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.5.tgz","fileCount":7,"integrity":"sha512-xwymk4T3XF7CR8NYAxO4KUyCYpammOInyv7RSAVt9esywvd2AZQ43PbZRb9eWUIRL55Vnkl7I2zqofqjZ6HWOA==","signatures":[{"sig":"MEYCIQConfimAIGc7ry2hKCA0TuqddARCLWY5lxqvZUUBa3L5gIhALcnZzVzhO8KtDWS6rBz2Qd/cVuWtf6i2EtyuqtgB2c3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41802},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"34abe6f363003b793faae5ba44f6a6b8bef63a51","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"11.4.2","description":"滚轮行为优化","directories":{},"_nodeVersion":"24.4.0","dependencies":{"normalize-wheel-es":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.5_1752192459119_0.2784778546583193","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@deot/helper-wheel","version":"1.1.6","license":"MIT","_id":"@deot/helper-wheel@1.1.6","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"b2c43374be071c6113bcdae651364fa70e749738","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.6.tgz","fileCount":7,"integrity":"sha512-8mT+Cufd3/+7+qDVz4Yqm51vmrPhxZh5VxtHWhAQUKR6P7k4ZIlxHd4zCvUH9AHdvAoOJQjhcpzD/vs7TxBKfA==","signatures":[{"sig":"MEYCIQCrFqUgUnCEBJHW3+nrdzq2/gflN+eR1ZrPf8QzhOcN1gIhAMFvFKDIq40VJlnyhhFqWgFN7WRcz32hKDJbKF8ea+lw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74697},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c1032b45048876de7df4d421232b0ee947e533da","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"11.4.2","description":"滚轮行为优化","directories":{},"_nodeVersion":"24.4.0","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.6_1752200796186_0.5841095585552969","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@deot/helper-wheel","version":"1.1.7","license":"MIT","_id":"@deot/helper-wheel@1.1.7","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"dist":{"shasum":"32540ac7711ce890e295393b3a0b1a711c85bed5","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.7.tgz","fileCount":7,"integrity":"sha512-r++Clf7RuyoZ5/P7b/joLNvStdkOGsxHjB+O2y7Q8M+bzf5bibapAR9BosyvrhgVECw4sJ7/hXm3dz0fJWUWyQ==","signatures":[{"sig":"MEUCID47EPnK5k3tvhCq9sEx063cgoz4pQ9D1XALbZkLit5xAiEAqkv79FCOOHQJVCi4AR39NyT3O/IOOBdHH7NC3ihAo+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCW4cVfm2E1SnpJBCd3Oj3Bq9+dLDhAUyUjGPMYRG9iKwIgCQQta1YdENC81hEQny5u7UMAaxYXIfQZoOiNuBtnOm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78979},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"75e2a1d6a00104aeaca20f0b4ad93b2baece4209","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"11.19.0","description":"统一鼠标滚轮、触控和中键拖动输入，优化嵌套滚动、方向锁定与 `overflow: hidden` 场景。","directories":{},"_nodeVersion":"24.21.0","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/helper-wheel_1.1.7_1790257301796_0.8946077836510742","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"_id":"@deot/helper-wheel@1.1.8","dist":{"shasum":"2f9fa85836479915f114650314837a4188a33e52","tarball":"https://registry.npmjs.org/@deot/helper-wheel/-/helper-wheel-1.1.8.tgz","fileCount":7,"integrity":"sha512-/IY8BfHZc/Zd1QO1VYN/8De1e7D9yF6PPdvo7oA1eo1lV6PmNqNvvNEqabd6EEhMhMt4KX2Q4rX2uzLtZYQNLw==","signatures":[{"sig":"MEUCIEkLOhWve3wsoWi4EzZUS84GOEiictQCcUieC7zl1ICYAiEA6DPGBSjWeXowUOrGuARxiFV6QSgnMzHXlGWCEDaMaDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC/NTKaXHxwxXMHNrtygF68Oajta+q+zAsd6uA28/2aCAIgR4HiWftRMW0bCJ9aAHyqp7IXwNK2ztbrQFuWxP02Eg4="}],"unpackedSize":79225},"main":"dist/index.js","name":"@deot/helper-wheel","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"65b589d8a3a622a3bae75f64f8286e8ec8ba8870","license":"MIT","version":"1.1.8","_npmUser":{"name":"deot","email":"zrd0921@qq.com"},"_npmVersion":"11.19.0","description":"统一鼠标滚轮、触控和中键拖动输入，优化嵌套滚动、方向锁定与 `overflow: hidden` 场景。","directories":{},"maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"_nodeVersion":"24.21.0","dependencies":{"normalize-wheel":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/helper-wheel_1.1.8_1790303751214_0.27461251899262695"}}},"time":{"created":"2023-07-13T15:47:20.163Z","modified":"2026-09-25T02:35:51.461Z","1.0.1":"2023-07-13T15:47:20.448Z","1.1.0":"2023-08-24T06:05:23.401Z","1.1.1":"2023-08-25T02:35:27.124Z","1.1.3":"2023-11-22T08:48:47.471Z","1.1.4":"2025-02-13T07:46:05.712Z","1.1.5":"2025-07-11T00:07:39.338Z","1.1.6":"2025-07-11T02:26:36.367Z","1.1.7":"2026-09-24T13:41:41.894Z","1.1.8":"2026-09-25T02:35:51.309Z"},"license":"MIT","description":"统一鼠标滚轮、触控和中键拖动输入，优化嵌套滚动、方向锁定与 `overflow: hidden` 场景。","maintainers":[{"name":"deot","email":"zrd0921@qq.com"}],"readme":"# @deot/helper-wheel\n\n统一鼠标滚轮、触控和中键拖动输入，优化嵌套滚动、方向锁定与 `overflow: hidden` 场景。\n\n## 安装\n\n```bash\npnpm add @deot/helper-wheel\n```\n\n## 使用\n\n```ts\nimport { Wheel } from '@deot/helper-wheel';\n\nconst off = Wheel.of(element, {\n\tfreedom: false,\n\tnative: true\n}).enable();\n\noff();\n```\n\n自定义消费滚动增量：\n\n```ts\nconst wheel = Wheel.of(element);\nconst off = wheel.on((deltaX, deltaY) => {\n\tupdatePosition(deltaX, deltaY);\n});\n```\n\n也可以从 `@deot/helper` 直接导入 `Wheel`。\n\n## API\n\n### Wheel\n\n将滚轮、触控与中键拖动归一化为按动画帧合并的水平和垂直增量。\n\n#### `new Wheel(element, options?)`\n\n创建滚动控制器\n\n| 参数 | 参数类型 | 默认值 | 返回值 |\n| --- | --- | --- | --- |\n| `element`、`options` | `HTMLElement`、`WheelOptions` | 见 Options | `Wheel` |\n\n#### `Wheel.of(element, options?)`\n\n构造函数的工厂方法\n\n| 参数 | 参数类型 | 默认值 | 返回值 |\n| --- | --- | --- | --- |\n| `element`、`options` | `HTMLElement`、`WheelOptions` | 见 Options | `Wheel` |\n\n#### `Wheel.shouldWheelX(element, delta)`\n\n判断横向边界能否继续滚动\n\n| 参数 | 参数类型 | 返回值 |\n| --- | --- | --- |\n| `element`、`delta` | `HTMLElement`、`number` | `boolean` |\n\n#### `Wheel.shouldWheelY(element, delta)`\n\n判断纵向边界能否继续滚动\n\n| 参数 | 参数类型 | 返回值 |\n| --- | --- | --- |\n| `element`、`delta` | `HTMLElement`、`number` | `boolean` |\n\n#### `Wheel.on(listener)`\n\n监听按帧合并后的增量\n\n| 参数 | 参数类型 | 返回值 |\n| --- | --- | --- |\n| `listener` | `(deltaX: number, deltaY: number) => unknown` | `() => void` |\n\n#### `Wheel.off(listener?)`\n\n删除指定或全部 listener，必要时解绑 DOM 事件\n\n| 参数 | 参数类型 | 返回值 |\n| --- | --- | --- |\n| `listener` | `Function` | `void` |\n\n#### `Wheel.enable()`\n\n注册默认滚动 listener 并返回解绑函数\n\n| 返回值 |\n| --- |\n| `() => void` |\n\n`Wheel` 依赖 DOM、触控事件和 `requestAnimationFrame`，应只在浏览器中针对实际元素创建实例。\n\n#### 公开状态与实现成员\n\n| 成员 | 类型 | 说明 |\n| --- | --- | --- |\n| `el` / `options` | `HTMLElement` / `WheelOptions` | 当前滚动容器与合并默认值后的配置 |\n| `listeners` / `defaultOnWheel` | `WheelFunction[]` / `WheelFunction \\| null` | 增量监听器和 `enable()` 注册的默认监听器 |\n| `deltaX` / `deltaY` | `number` | 当前动画帧累计的滚动增量 |\n| `isTouching` | `boolean` | 是否处于触控手势中 |\n| `startTime` / `startX` / `startY` / `moveX` / `moveY` | `number` | 触控或中键拖动的手势状态 |\n| `needThresholdWait` / `timer` | `boolean` / `any` | 原生边界切换的等待状态与定时器 |\n| `animationFrameID` | `number \\| null` | 当前合并增量的动画帧 ID |\n| `handleTouchStart(event)` / `handleTouchMove(event)` / `handleTouchEnd(event)` | `(event: TouchEvent) => void` | 触控事件处理器 |\n| `handleMouseMove(event)` | `MouseEvent` | 中键拖动处理器 |\n| `handleWheel(event)` | `WheelEvent` | 原生滚轮处理器 |\n| `clear()` / `didWheel()` | `() => void` | 清理累计状态 / 在动画帧中发布累计增量 |\n\n事件处理器和手势状态虽然在当前声明中可见，但由 `enable()` 管理；业务代码通常只需使用 `on()`、`off()` 和 `enable()`。\n\n在容器上滚动，或点击按钮派发一次滚轮事件，观察合并后的帧增量和边界判断：\n\n:::playground\n<!--\n<config lang=\"json5\">\n{\n\tviews: ['runtime', 'files']\n}\n</config>\n-->\n```vue\n<script setup>\n/* eslint-disable no-useless-assignment */\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport { Wheel } from '@deot/helper-wheel';\n\nconst box = ref(null);\nconst output = ref({ deltaX: 0, deltaY: 0, scrollTop: 0 });\nlet wheel;\nlet offListener = () => {};\nlet offEnable = () => {};\n\nconst dispatch = () => {\n\tbox.value.dispatchEvent(new WheelEvent('wheel', { deltaY: 48, bubbles: true, cancelable: true }));\n};\n\nonMounted(() => {\n\twheel = Wheel.of(box.value, { native: false, freedom: true });\n\toffListener = wheel.on((deltaX, deltaY) => {\n\t\toutput.value = {\n\t\t\tdeltaX,\n\t\t\tdeltaY,\n\t\t\tscrollTop: box.value.scrollTop,\n\t\t\tshouldWheelX: Wheel.shouldWheelX(box.value, deltaX),\n\t\t\tshouldWheelY: Wheel.shouldWheelY(box.value, deltaY)\n\t\t};\n\t});\n\toffEnable = wheel.enable();\n});\n\nonBeforeUnmount(() => {\n\toffListener();\n\toffEnable();\n\twheel?.off();\n});\n</script>\n\n<template>\n\t<div class=\"demo\">\n\t\t<button @click=\"dispatch\">派发 deltaY = 48</button>\n\t\t<div ref=\"box\" class=\"wheel-box\">\n\t\t\t<div v-for=\"item in 8\" :key=\"item\" class=\"row\">Row {{ item }}</div>\n\t\t</div>\n\t\t<strong>输出</strong>\n\t\t<pre>{{ JSON.stringify(output, null, 2) }}</pre>\n\t</div>\n</template>\n\n<style>\n.demo { display: grid; width: min(100%, 640px); gap: 12px; padding: 12px; box-sizing: border-box; font: 14px/1.5 sans-serif; }\nbutton { width: fit-content; padding: 6px 10px; cursor: pointer; border: 1px solid #cbd5e1; border-radius: 8px; background: #fff; }\n.wheel-box { height: 120px; overflow: hidden; border: 1px solid #cbd5e1; border-radius: 8px; }\n.row { padding: 10px 12px; border-bottom: 1px solid #e2e8f0; }\npre { margin: 0; padding: 12px; border-radius: 8px; background: #f8fafc; }\n</style>\n```\n:::\n\n#### `WheelOptions`\n\n配置滚动方向判断、事件传播和原生边界行为。\n\n表中的 `WheelFunction<T>` 表示 `(deltaX: number, deltaY: number) => T`，是源码内部类型，不可从包中单独导入。\n\n| 选项 | 默认值 | 说明 |\n| --- | --- | --- |\n| `native` | `true` | 到达边界后是否保持原生“松开后父层再滚动”的阈值行为 |\n| `freedom` | `false` | 是否允许 X/Y 同时自由滚动；关闭时按手势角度锁定主方向 |\n| `shouldWheelX(deltaX, deltaY)` | 容器 X 轴边界判断 | 是否消费本次横向增量 |\n| `shouldWheelY(deltaY, deltaX)` | 容器 Y 轴边界判断 | 是否消费本次纵向增量 |\n| `stopPropagation(deltaX, deltaY)` | `() => true` | 消费滚动时是否阻止事件冒泡 |\n","readmeFilename":"README.md"}