gsap+svg实现可调参数的容量单选滑动动画效果代码

代码语言:html

所属分类:布局界面

代码描述:gsap+svg实现可调参数的容量单选滑动动画效果代码

代码标签: gsap svg 可调 参数 容量 单选 滑动 动画

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

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

<head>
  <meta charset="UTF-8">

    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap"
      rel="stylesheet"
    />
  
  
  
<style>

@layer normalize, base, prototype, anchor, hop, knockout;

@layer knockout {
  .svg-mask {
    outline-offset: -2px;
    position: absolute;
    inset: 0;
    height: 100%;
    width: 100%;
    pointer-events: none;
    z-index: 2;
    translate: 0 100%;
  }

  [data-knockout='mask'][data-style='anchor'] fieldset:first-of-type > div {
    -webkit-mask: var(--svg-mask, initial);
            mask: var(--svg-mask, initial);
  }

  [data-knockout='none'] .mask-layer,
  [data-knockout='mask'] .mask-layer {
    display: none;
  }
  [data-knockout='filter'][data-style='anchor'] {
    .mask-layer {
      filter: url(#knockout-black);
    }
    @media (prefers-color-scheme: dark) {
      .mask-layer {
        filter: url(#knockout-white);
      }
    }
  }
}

@layer hop {
  [data-match='true'][data-style='hop'] {
    label::before {
      inset: unset;
      top: 0;
      left: 0;
      bottom: 0;
      width: max(var(--pill-width-current, 100%), var(--pill-width-previous, 100%));
    }
    label:has(+ :not(:checked) ~ :checked)::before,
    label:has(+ [data-current-checked='true']):has(~ [data-previous-checked='true'])::before {
      right: 0;
      left: unset;
    }
    label:has(+ [data-previous-checked='true'])
      ~ label:has(+ [data-current-checked='true'])::before,
    label:has(+ [data-current-checked='true']) ~ label::before {
      left: 0;
      right: unset;
    }
  }
  [data-style='hop'] {
    label {
      position: relative;
      background: #0000;
      overflow: hidden;
    }
    label::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: 100px;
      z-index: -1;
      width: 100%;
    }

    label:hover {
      background: light-dark(
        color-mix(in srgb, canvasText, #0000 95%),
        color-mix(in srgb, canvasText, #fff0 75%)
      );
    }

    /* the labels that precede a checked option */
    label:has(+ :not(:checked) ~ :checked)::before {
      transform: translateX(100%);
    }

    /* the last checked that comes after the current checked */
    label:has(+ [data-current-checked='true']) ~ label::before {
      transform: translateX(-100%);
    }

    
    label:has(+ [data-previous-checked='true'])::before,
    label:has(+ [data-current-checked='true'])::before {
      background: light-dark(#000, #fff);
      transition: transform calc(var(--duration, 0.2) * 1s) ease-out;
    }
  }
  [data-style='hop'][data-wrap='true'] {
    fieldset:first-of-type:has(:nth-of-type(3)) {
      label:has(+ [data-current-checked='true']):first-of-type ~ label:last-of-type::before {
        transform: translateX(100%);
      }
      label:not(:has(+ [data-current-checked='true'])):first-of-type:has(
          ~ input:last-of-type:checked
        )::before {
        transform: translateX(-100%);
      }
    }
  }
}

@layer anchor {
  @supports (not (anchor-name: --active)) {
    .fields {
      position: relative.........完整代码请登录后点击上方下载按钮下载查看

网友评论0