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

如何在Flutter中实现自定义Carousel?参考Dribbble影院App UI

实现这款影院App轮播UI的思路拆解

先明确这个轮播的核心特点:中心卡片放大突出,两侧卡片缩小且带透明度渐变,滑动切换时过渡平滑,还有阴影增强层次感。下面是具体的实现思路:

一、基础布局搭建

  • 用一个容器装所有卡片,设置overflow: hidden把超出可视区域的部分藏起来,容器宽度设成和屏幕可视区域一致。
  • 卡片可以用绝对定位或者flex排列,初始时让中心卡片刚好在容器正中间,两侧卡片依次排在左右两边。

二、卡片状态样式控制

  • 给卡片分三个状态:活跃(中心卡片)、左侧卡片、右侧卡片,分别写对应的样式:
    /* 中心活跃卡片 */
    .card.active {
      transform: scale(1.2);
      opacity: 1;
      z-index: 10;
      box-shadow: 0 8px 20px rgba(0,0,0,0.3);
    }
    /* 左右两侧卡片 */
    .card.prev, .card.next {
      transform: scale(0.9);
      opacity: 0.7;
      z-index: 5;
    }
    .card.prev {
      transform: translateX(-22%) scale(0.9);
    }
    .card.next {
      transform: translateX(22%) scale(0.9);
    }
    
  • 别忘了给卡片加transition: all 0.3s ease,让状态切换时动画更顺滑。

三、滑动交互逻辑实现

  • 监听触摸或鼠标事件:记录点击/触摸的初始位置,滑动过程中计算位移,松开时判断是向左还是向右滑。
  • 切换卡片状态:比如向右滑的话,把当前中心卡片变成左侧卡片,原来的右侧卡片变成中心卡片,同时调整其他卡片的状态类。
  • 如果要做自动轮播,就加个定时器,定时触发切换逻辑,鼠标悬停时暂停定时器就行。

四、可选技术方案

  • 原生JS:完全自定义,代码轻量,适合需要精细控制的场景。
  • Vue/React:用框架的状态管理来维护卡片的状态,配合框架的过渡组件能简化动画实现。
  • 现成轮播库:比如Swiper,通过自定义配置能快速接近目标效果,但可能需要额外调整样式来匹配设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:18:27