我现在的是到末尾会突然到第一个,怎么写循环平滑的走马灯?

我移动整个卡片,到末尾的时候,我直接瞬移到第一个,再次循环。我想使用无限循环走马灯的那种效果?

html元素

 <div className="right">
    <div className="right_box">
      {[...currentList, ...currentList].map((item, index) => {
        return (
          <div className={`right_list_item`} key={index}>
            <div className="right_list_item_img">
              <img src={item.img} />
            </div>
          </div>
        );
      })}
    </div>
  </div>
 // 走马灯动画
  function loopChangeList() {
    const max = 8;
    gsap.to('.honors_page_content .right_box', {
      transform: `translateX(${-((max - 4) * 3) + 'rem'})`,
      // 直线运动
      ease: 'linear',
      duration: 8,
      // 完成后继续循环,实现走马灯效果,从左倒右一直循环
      onComplete: () => {
        gsap.set('.honors_page_content .right_box', {
          transform: `translateX(0)`,
        });
        loopChangeList();
      },
    });
  }
阅读 3.1k
2 个回答
 // 走马灯动画
  function loopChangeList() {
    const max = 8;
    gsap.to('.honors_page_content .right_box', {
      transform: `translateX(${-((max - 4) * 3) + 'rem'})`,
      // 直线运动
      ease: 'linear',
      duration: 8,
      // repeat: -1, // 无限循环

      // 完成后继续循环,实现走马灯效果,从左倒右一直循环
      onComplete: () => {
        // TODO ? 难道要一个i一个移动再去判断是第几个需要移动?
        // 把前4个元素移动到末尾
        const list = document.querySelectorAll(
          '.honors_page_content .right_box .right_list_item',
        );
        const parent = document.querySelector(
          '.honors_page_content .right_box',
        );
        for (let i = 0; i < 4; i++) {
          const item = list[i];
          parent?.appendChild(item);
        }
        gsap.set('.honors_page_content .right_box', {
          transform: `translateX(0)`,
        });
        loopChangeList();
      },
    });
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题