You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React:如何用单个JavaScript函数控制多ID滚动托盘的左右滑动

复用滚动托盘滑动函数方案

问题描述

我有一个可正常运行的JavaScript函数,能够改变滚动托盘的位置,实现左右滑动。但我有5个这类滚动托盘,目前需为每个托盘编写不同命名的slideLeft和slideRight函数,传入不同ID通过document.getElementById获取对应元素。请问能否仅用一组slideLeft和slideRight函数,让它们根据ID识别要操作的滚动托盘?现有代码如下:

export function slideRight() {
    let container = document.getElementById('scroll-tray-1')
    sideScroll(container, 'right', 25, 400, 40);
};

export function slideRight() { // 此处函数名重复,应为slideLeft
    let container = document.getElementById('scroll-tray-2')
    sideScroll(container, 'left', 25, 400, 40);
};

function sideScroll(element, direction, speed, distance, step) {
    let scrollAmount = 0;
    var slideTimer = setInterval(function () {
        if (direction === 'left') {
            element.scrollLeft -= step;
        } else {
            element.scrollLeft += step;
        }
        scrollAmount += step;
        if (scrollAmount >= distance) {
            window.clearInterval(slideTimer);
        }
    }, speed);
}

解决方案

完全可以通过给滑动函数添加ID参数实现复用,无需为每个托盘单独编写函数。修改后的代码如下:

// 通用向右滑动函数,接收托盘ID作为参数
export function slideRight(trayId) {
    const container = document.getElementById(trayId);
    if (!container) return; // 避免传入无效ID时触发错误
    sideScroll(container, 'right', 25, 400, 40);
};

// 通用向左滑动函数,接收托盘ID作为参数
export function slideLeft(trayId) {
    const container = document.getElementById(trayId);
    if (!container) return; // 避免传入无效ID时触发错误
    sideScroll(container, 'left', 25, 400, 40);
};

function sideScroll(element, direction, speed, distance, step) {
    let scrollAmount = 0;
    const slideTimer = setInterval(function () {
        if (direction === 'left') {
            element.scrollLeft -= step;
        } else {
            element.scrollLeft += step;
        }
        scrollAmount += step;
        if (scrollAmount >= distance) {
            window.clearInterval(slideTimer);
        }
    }, speed);
}

使用方式

调用时只需传入对应滚动托盘的ID即可:

// 操作第一个托盘向右滑动
slideRight('scroll-tray-1');
// 操作第二个托盘向左滑动
slideLeft('scroll-tray-2');
// 操作第五个托盘向右滑动
slideRight('scroll-tray-5');

额外优化说明

  • 添加if (!container) return判断,避免无效ID导致的运行错误
  • 将var替换为const,符合现代JavaScript语法规范

内容的提问来源于stack exchange,提问作者Nino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:20:32