gsap+svg实现可配置参数的添加购物车按钮动画效果代码

代码语言:html

所属分类:动画

代码描述:gsap+svg实现可配置参数的添加购物车按钮动画效果代码

代码标签: gsap svg 配置 参数 添加 购物车 按钮 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  
  
<style>
@import url('https://unpkg.com/normalize.css') layer(normalize);

@layer normalize, base, prototype, testing, motion;

@layer motion {
  :root {
    --text-speed: 0.26;
    --base-delay: calc(var(--text-speed) * 0.25);
    --tick-speed: 0.12;
    --ring-speed: 0.2;
    --check-speed: 0.1;
    --burst-speed: 0.32;
    --step-delay: 4;
  }
  .playground {
    --base-delay: 0;
  }
  .playground[data-play='true'],
  [data-adding="true"] {
    .check {
      transition-property: opacity, scale, filter;
      transition-duration: calc(calc(var(--check-speed) * 1s) * var(--speed));
      transition-delay: calc((var(--base-delay) * 1s) * var(--speed));
      transition-timing-function: ease-in-out;
      opacity: 1;
      scale: 1;
      filter: blur(0);
    }
    .tick {
      scale: 1.5;
      transition-property: scale;
      transition-duration: calc((calc(var(--tick-speed) * 1s)) * var(--speed));
      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * (var(--step-delay) * 1.1))) * 1s) * var(--speed));
      transition-timing-function: ease-out;
    }
    .ring {
      transition-property: opacity, scale, filter;
      transition-duration: calc((calc(var(--ring-speed) * 1s)) * var(--speed));
      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay))) * 1s) * var(--speed));
      transition-timing-function: ease-in-out; 
      opacity: 0;
      scale: 1;
      filter: blur(1px);
    }
    :is(.wiggle, .line) {
      transition-property: stroke-dashoffset;
      transition-duration: calc((calc(var(--burst-speed) * 1s)) * var(--speed));
      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay))) * 1s) * var(--speed));
      transition-timing-function: ease-out;
      stroke-dashoffset: 1.5;
    }
  }
  .add-to-cart-text {
    clip-path: circle(100% at 50% 50%);
    transition-property: clip-path, opacity, filter, translate;
    transition-duration: calc((var(--text-speed) * 0.6s) * var(--speed)), calc((var(--text-speed) * 1s) * var(--speed));
    transition-timing-function: ease-out;
  }
  [data-adding='true'] .add-to-cart-text {
    clip-path: circle(0% at 50% 50%);
    filter: blur(2px);
    opacity: 0;
    translate: 0 4px;
  }
  [data-timing='random'] :is(.playground[data-play='true'],[data-adding="true"]) .burst :is(.wiggle, .line) {
    transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay)) + (var(--d))) * 1s) * var(--speed));
  }
  [data-timing='sequential'] :is(.playground[data-play='true'],[data-adding="true"]) .burst :is(.wiggle, .line) {
    transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay)) + (var(--index) * 0.05)) * 1s) * var(--speed));
  }
  [data-timing='alternate'] :is(.playground[data-play='true'],[data-adding="true"]) .burst g:nth-of-type(odd) { --alt-d: 0.1; }
  [data-timing='alternate'] :is(.playground[data-play='true'],[data-adding="true"]) .burst g:nth-of-type(even) { --alt-d: 0; }
  [data-timing='alternate'] :is(.playground[data-play='true'],[data-adding="true"]) .burst :is(.wiggle, .line) {
    transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay)) + (var(--alt-d))) * 1s) * var(--speed));
  }
}

@layer testing {
  
  [data-play='true'] .playground {
    display: block;
  }
  .playground {
    width: 100%;
    color: canvas;
    display: none;

    fieldset {
      padding: 2rem;
      display: grid;
      place-items: center;
      position: relative;
      border: 0;
    }
    fieldset legend {
      position: absolute;
      top: 4px;
      left: 6px;
      color: rgba(187, 188, 196, 0.7)
      
    }
    fieldset svg {
      width: 100px;
    }
    
    
  }
  .checkmark-burst {
    overflow: visible !important;

    .burst {
      rotate: 20deg;
    }
    .check {
      opacity: 0.2;
      scale: 0.3;
      filter: blur(2px);
    }
    :is(.ring, .wiggle, .line, .check, .burst, .tick) {
      transform-box: fill-box;
      transform-origin: center;
    }
    :is(.wiggle, .line) {
      stroke-dasharray: 1.5 1.5;
      stroke-dashoffset: -1.5;
      translate: 0 -180%;
    }
    g {
      transform-origin: center;
      rotate: calc(var(--index) * (360 / 8) * 1deg);
    }
  }

  [data-color='vibrant'] .checkmark-burst g {
    color: var(--color, currentColor);
  }
  
  [data-style='wiggle'] .checkmark-burst .line,
  [data-style='line'] .checkmark-burst .wiggle,
  [data-style='alternate'] .checkmark-burst .burst g:nth-.........完整代码请登录后点击上方下载按钮下载查看

网友评论0