从空白到混乱:Eloy Benoffi使用Webflow和GSAP打造的粗野主义故障风作品集

本文详细介绍了实验性UI设计师Eloy Benoffi如何使用Webflow和GSAP技术栈构建其独特的粗野主义故障风作品集网站,包含具体的技术实现细节、动画代码示例和设计理念。

从空白到混乱:Eloy Benoffi使用Webflow和GSAP打造的粗野主义故障风作品集

设计理念的形成

作品集的设计过程经历了16次Figma迭代,最终确立了三个核心理念:

  • 极繁主义:更多即是更多,不因追求清晰度而缩减功能或细节
  • 粗野主义:元素大胆、粗糙、直接,形状锐利,故障效果明显
  • 趣味性:个人项目应保持乐趣,不受他人预期约束

技术栈选择

Webflow作为基础

作为Webflow认证合作伙伴,作者选择Webflow构建网站基础,因其能够:

  • 轻松构建复杂的HTML和CSS布局
  • 支持自定义代码扩展
  • 超越核心功能的进阶开发

GSAP动画引擎

运动设计是网站的关键元素,GSAP提供了所需的灵活性:

使用的GSAP插件:

  • ScrollTrigger:处理所有滚动动画
  • SplitText:悬停效果和文本分割过渡
  • Text:轻松更改文本内容
  • Draggable + Inertia:作品集部分滑块
  • Observer、ScrambleText和ScrollTo:辅助功能

具体技术实现

加载动画与英雄区域

页面加载时展示详细的英雄区域,基于"Nature is Watching"作品设计,包含眼球花朵资源和ASCII版本装饰。

地理位置彩蛋

左下角地理位置元素包含悬停交互:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function setLocationMardel() {
  let LocationToMardel = gsap.timeline();
    
  LocationToMardel.fromTo(
    "[location-type-01][type-txt]",
    {
      text: {
        value: ">>>based in madrid, spain",
      },
    },
    {
      text: {
        value: ">>>born in mar del plata, arg",
        speed: 1,
        preserveSpaces: true,
        padSpace: true,
        type: "diff",
      },
      duration: 0.3,
      ease: "none",
    },
    0
  )
  // ... 更多动画代码
}

const heroMeta = document.querySelector(".hero-meta");
heroMeta.addEventListener("mouseenter", () => {
  setLocationMardel();
});

SVG花朵动画

滚动离开英雄区域时,背景ASCII花朵开始失去字符:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
let tlHeroSVG = gsap.timeline({
  scrollTrigger: {
    trigger: '.hero-section',
    start: 'top bottom',
    end: 'bottom-=50% top',
    scrub: 8,
  },
});

tlHeroSVG.to('.hero-flower_03 path', {
  stagger: {
    each: 0.1,
    from: 'random',
  },
  opacity: 0,
  duration: 2,
  ease: 'bounce.inOut',
});

作品区域过渡动画

创建迷幻标题效果,使用多个div行和GSAP时间轴:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
let tlWorkScroll = gsap.timeline({
  scrollTrigger: {
    trigger: '.work-section',
    start: 'top bottom',
    end: 'bottom-=60% top',
    scrub: 0.6,
  },
});

tlWorkScroll.fromTo(
  '.work-header .title-row_33 .title-txt',
  {
    yPercent: 0,
  },
  {
    yPercent: -300,
    ease: 'power3.in',
    duration: 2,
    stagger: {
      amount: 2,
      from: 'start',
    },
  },
  0
);
// ... 更多动画层级

作品卡片揭示效果

使用四步时间轴随机设置图形缩放:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
tlWorkCardReveal.fromTo(
  wCardItems,
  {
    scale: 1.75,
  },
  {
    scale: 1.5,
    duration: 0.25,
    ease: 'power3.in',
    stagger: {
      amount: 0.2,
      from: 'random',
      ease: 'power1.out',
    },
  },
  0
);
// ... 更多缩放步骤

页脚交互效果

实现鼠标移动克隆效果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gsap.to(generatedCopies, {
  opacity: 0,
  scale: 0.6,
  duration: 0.2,
  ease: 'back.in(1.7)',
  stagger: {
    amount: 0.4,
    from: 'random',
    ease: 'power1.out',
  },
});

成果与反思

该作品集获得了Awwwards荣誉奖、GSAP当日最佳网站、CSSDA最佳UI、最佳UX、最佳创新和特别荣誉奖。作者强调在AI生成内容和销售优化模板的时代,应为人类真实性、意向性甚至错误留出空间。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计