UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

68 lines (64 loc) 2.15 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); /** * 使用鼠标滚轮控制元素的scrollLeft实现左右移动 * @param {HTMLElement} element - 需要控制移动的DOM元素 * @param {Object} [options] - 配置选项 * @param {number} [options.speed=50] - 移动速度(像素/滚动单位) * @param {boolean} [options.preventDefault=true] - 是否阻止默认滚动行为 * @param {boolean} [options.invertDirection=false] - 是否反转滚动方向 * @example * ```ts * // 基础用法:让横向滚动容器支持鼠标滚轮横向滚动 * const el = document.querySelector('.scroll-container') as HTMLElement; * const dispose = enableHorizontalScroll(el); * * // 自定义速度和方向 * enableHorizontalScroll(el, { * speed: 100, * invertDirection: true, * }); * * // 不阻止默认滚动行为(页面仍可垂直滚动) * enableHorizontalScroll(el, { preventDefault: false }); * * // 组件销毁时取消监听 * dispose?.(); * ``` */ function enableHorizontalScroll(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!element) return; // 合并默认选项 var config = Object.assign({ speed: 50, preventDefault: true, invertDirection: false }, options); // 处理滚轮事件 function handleWheel(e) { // 阻止默认的垂直滚动行为 if (config.preventDefault) { e.preventDefault(); } // 计算滚轮方向(兼容不同浏览器) var delta = Math.sign(e.deltaY || e.wheelDelta || -e.detail); // 如果需要反转方向 if (config.invertDirection) { delta = -delta; } // 计算新的scrollLeft位置 var newScrollLeft = element.scrollLeft + delta * config.speed; // 应用滚动 element.scrollLeft = newScrollLeft; } // 添加事件监听 element.addEventListener('wheel', handleWheel, { passive: false }); // 返回一个取消监听的函数 return function disableHorizontalScroll() { element.removeEventListener('wheel', handleWheel); }; } exports.enableHorizontalScroll = enableHorizontalScroll;