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

React使用react-indiana-drag-scroll轮播默认聚焦指定图片问题求助

解决方案

react-indiana-drag-scroll库没有内置初始展示索引的配置项,你需要手动控制滚动容器的初始偏移量实现需求,具体实现如下:

1. 修改ProjectCarousel组件代码

import React, { useRef, useEffect, createRef } from "react";
import { ProjectData } from "../projects/ProjectData";
import ProjectImage from "./ProjectImage";
import ScrollContainer from "react-indiana-drag-scroll";

import "./scss/ProjectCarousel.scss";

export default function ProjectCarousel() {
  // 声明滚动容器的ref
  const scrollContainerRef = useRef(null);
  // 存储每个项目卡片对应的ref
  const projectRefs = useRef(ProjectData.map(() => createRef()));

  useEffect(() => {
    // 组件挂载完成后执行滚动逻辑
    if (!scrollContainerRef.current || projectRefs.current.length < 2) return;
    // 取第二张卡片的DOM元素(索引从0开始,第二张对应索引1)
    const targetCard = projectRefs.current[1].current;
    if (!targetCard) return;

    // 配置1:第二张卡片对齐滚动容器左边缘
    let targetScrollLeft = targetCard.offsetLeft;

    // 配置2:如果需要第二张卡片在容器内居中显示,注释上面一行,使用下面的计算逻辑
    // const container = scrollContainerRef.current.container;
    // targetScrollLeft = targetCard.offsetLeft - (container.clientWidth / 2) + (targetCard.clientWidth / 2);

    // 执行滚动,behavior设为auto避免初始加载出现滚动动画
    scrollContainerRef.current.scrollTo({
      left: targetScrollLeft,
      behavior: "auto"
    });
  }, []);

  return (
    <ScrollContainer className="scroll-container" ref={scrollContainerRef}>
      {ProjectData.map(({ id, ...otherProps }, index) => (
        <div ref={projectRefs.current[index]} key={id}>
          <ProjectImage {...otherProps} />
        </div>
      ))}
    </ScrollContainer>
  );
}

2. 额外语法问题修复

你当前的ProjectImage组件存在a标签嵌套的语法错误,HTML规范不允许<a>标签内部嵌套另一个<a>标签,浏览器会自动调整DOM结构导致点击逻辑异常,建议调整布局结构,将两个跳转入口改为同级排布,参考修改代码如下:

import React from "react";
import GitIcon from "../soMe/icons/github_legend.png";
import "./scss/Project.scss";

export default function ProjectImage({ imageUrl, alt, github, webUrl }) {
  return (
    <div className="image">
      <img src={imageUrl} alt={alt} />
      <div className="action-group">
        <a href={webUrl} alt="Go to this project's website">访问项目站点</a>
        <a href={github} alt="See project on Github">
          <img src={GitIcon} alt="Github入口" />
        </a>
      </div>
    </div>
  );
 }

小提示:如果你的项目卡片有自定义左右边距,可以根据实际布局微调targetScrollLeft的数值,增减对应的边距值即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:57:00