zhangzengfei
2021-11-17 5186227a467bd34dc253e64b23bc96d3a07bb399
src/components/VabProfile/index.vue
@@ -25,289 +25,289 @@
</template>
<script>
  export default {
    name: 'VabProfile',
    props: {
      styleObj: {
        type: Object,
        default: () => {
          return {}
        },
      },
      username: {
        type: String,
        default: '',
      },
      avatar: {
        type: String,
        default: '',
      },
      iconArray: {
        type: Array,
        default: () => {
          return [
            { icon: 'bell', url: '' },
            { icon: 'bookmark', url: '' },
            { icon: 'cloud-sun', url: '' },
          ]
        },
export default {
  name: "VabProfile",
  props: {
    styleObj: {
      type: Object,
      default: () => {
        return {};
      },
    },
    data() {
      return {}
    username: {
      type: String,
      default: "",
    },
    created() {},
    mounted() {},
    methods: {},
  }
    avatar: {
      type: String,
      default: "",
    },
    iconArray: {
      type: Array,
      default: () => {
        return [
          { icon: "bell", url: "" },
          { icon: "bookmark", url: "" },
          { icon: "cloud-sun", url: "" },
        ];
      },
    },
  },
  data() {
    return {};
  },
  created() {},
  mounted() {},
  methods: {},
};
</script>
<style lang="scss" scoped>
  .card {
    --card-bg-color: hsl(240, 31%, 25%);
    --card-bg-color-transparent: hsla(240, 31%, 25%, 0.7);
.card {
  --card-bg-color: hsl(240, 31%, 25%);
  --card-bg-color-transparent: hsla(240, 31%, 25%, 0.7);
    position: relative;
  position: relative;
  width: 100%;
  height: 100%;
  .card-borders {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    .card-borders {
    .border-top {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 2px;
      background: var(--card-bg-color);
      transform: translateX(-100%);
      animation: slide-in-horizontal 0.8s cubic-bezier(0.645, 0.045, 0.355, 1)
        forwards;
    }
    .border-right {
      position: absolute;
      right: 0;
      width: 2px;
      height: 100%;
      overflow: hidden;
      background: var(--card-bg-color);
      transform: translateY(100%);
      animation: slide-in-vertical 0.8s cubic-bezier(0.645, 0.045, 0.355, 1)
        forwards;
    }
      .border-top {
    .border-bottom {
      position: absolute;
      bottom: 0;
      width: 100%;
      height: 2px;
      background: var(--card-bg-color);
      transform: translateX(100%);
      animation: slide-in-horizontal-reverse 0.8s
        cubic-bezier(0.645, 0.045, 0.355, 1) forwards;
    }
    .border-left {
      position: absolute;
      top: 0;
      width: 2px;
      height: 100%;
      background: var(--card-bg-color);
      transform: translateY(-100%);
      animation: slide-in-vertical-reverse 0.8s
        cubic-bezier(0.645, 0.045, 0.355, 1) forwards;
    }
  }
  .card-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    height: 100%;
    padding: 40px 0 40px 0;
    background: var(--card-bg-color-transparent);
    opacity: 0;
    transform: scale(0.6);
    animation: bump-in 0.5s 0.8s forwards;
    .avatar {
      width: 80px;
      height: 80px;
      border: 1px solid $base-color-white;
      border-radius: 50%;
      opacity: 0;
      transform: scale(0.6);
      animation: bump-in 0.5s 1s forwards;
    }
    .username {
      position: relative;
      margin-top: 20px;
      margin-bottom: 20px;
      font-size: 26px;
      color: transparent;
      letter-spacing: 2px;
      animation: fill-text-white 1.2s 2s forwards;
      &::before {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 2px;
        background: var(--card-bg-color);
        transform: translateX(-100%);
        animation: slide-in-horizontal 0.8s cubic-bezier(0.645, 0.045, 0.355, 1)
          forwards;
      }
      .border-right {
        position: absolute;
        right: 0;
        width: 2px;
        height: 100%;
        background: var(--card-bg-color);
        transform: translateY(100%);
        animation: slide-in-vertical 0.8s cubic-bezier(0.645, 0.045, 0.355, 1)
          forwards;
      }
      .border-bottom {
        position: absolute;
        bottom: 0;
        width: 100%;
        height: 2px;
        background: var(--card-bg-color);
        transform: translateX(100%);
        animation: slide-in-horizontal-reverse 0.8s
          cubic-bezier(0.645, 0.045, 0.355, 1) forwards;
      }
      .border-left {
        position: absolute;
        top: 0;
        width: 2px;
        height: 100%;
        background: var(--card-bg-color);
        transform: translateY(-100%);
        animation: slide-in-vertical-reverse 0.8s
          cubic-bezier(0.645, 0.045, 0.355, 1) forwards;
        color: black;
        content: "";
        background: #35b9f1;
        transform: scaleX(0);
        transform-origin: left;
        animation: slide-in-out 1.2s 1.2s cubic-bezier(0.75, 0, 0, 1) forwards;
      }
    }
    .card-content {
    .social-icons {
      display: flex;
      flex-direction: column;
      align-items: center;
      height: 100%;
      padding: 40px 0 40px 0;
      background: var(--card-bg-color-transparent);
      opacity: 0;
      transform: scale(0.6);
      animation: bump-in 0.5s 0.8s forwards;
      .avatar {
        width: 80px;
        height: 80px;
        border: 1px solid $base-color-white;
        border-radius: 50%;
        opacity: 0;
        transform: scale(0.6);
        animation: bump-in 0.5s 1s forwards;
      }
      .username {
      .social-icon {
        position: relative;
        margin-top: 20px;
        margin-bottom: 20px;
        font-size: 26px;
        color: transparent;
        letter-spacing: 2px;
        animation: fill-text-white 1.2s 2s forwards;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 2.5em;
        height: 2.5em;
        margin: 0 15px;
        color: white;
        text-decoration: none;
        border-radius: 50%;
        &::before {
        @for $i from 1 through 3 {
          &:nth-child(#{$i}) {
            &::before {
              animation-delay: 2s + 0.1s * $i;
            }
            &::after {
              animation-delay: 2.1s + 0.1s * $i;
            }
            svg {
              animation-delay: 2.2s + 0.1s * $i;
            }
          }
        }
        &::before,
        &::after {
          position: absolute;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%;
          color: black;
          content: '';
          background: #35b9f1;
          transform: scaleX(0);
          transform-origin: left;
          animation: slide-in-out 1.2s 1.2s cubic-bezier(0.75, 0, 0, 1) forwards;
          content: "";
          border-radius: inherit;
          transform: scale(0);
        }
      }
      .social-icons {
        display: flex;
        &::before {
          background: #f7f1e3;
          animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
        }
        .social-icon {
          position: relative;
          display: flex;
          align-items: center;
          justify-content: center;
          width: 2.5em;
          height: 2.5em;
          margin: 0 15px;
          color: white;
          text-decoration: none;
          border-radius: 50%;
        &::after {
          background: #2c3e50;
          animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
        }
          @for $i from 1 through 3 {
            &:nth-child(#{$i}) {
              &::before {
                animation-delay: 2s + 0.1s * $i;
              }
              &::after {
                animation-delay: 2.1s + 0.1s * $i;
              }
              svg {
                animation-delay: 2.2s + 0.1s * $i;
              }
            }
          }
          &::before,
          &::after {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            content: '';
            border-radius: inherit;
            transform: scale(0);
          }
          &::before {
            background: #f7f1e3;
            animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
          }
          &::after {
            background: #2c3e50;
            animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
          }
          svg {
            z-index: 99;
            transform: scale(0);
            animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
          }
        svg {
          z-index: 99;
          transform: scale(0);
          animation: scale-in 0.5s cubic-bezier(0.75, 0, 0, 1) forwards;
        }
      }
    }
  }
}
  @keyframes bump-in {
    50% {
      transform: scale(1.05);
    }
    to {
      opacity: 1;
      transform: scale(1);
    }
@keyframes bump-in {
  50% {
    transform: scale(1.05);
  }
  @keyframes slide-in-horizontal {
    50% {
      transform: translateX(0);
    }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
    to {
      transform: translateX(100%);
    }
@keyframes slide-in-horizontal {
  50% {
    transform: translateX(0);
  }
  @keyframes slide-in-horizontal-reverse {
    50% {
      transform: translateX(0);
    }
  to {
    transform: translateX(100%);
  }
}
    to {
      transform: translateX(-100%);
    }
@keyframes slide-in-horizontal-reverse {
  50% {
    transform: translateX(0);
  }
  @keyframes slide-in-vertical {
    50% {
      transform: translateY(0);
    }
  to {
    transform: translateX(-100%);
  }
}
    to {
      transform: translateY(-100%);
    }
@keyframes slide-in-vertical {
  50% {
    transform: translateY(0);
  }
  @keyframes slide-in-vertical-reverse {
    50% {
      transform: translateY(0);
    }
  to {
    transform: translateY(-100%);
  }
}
    to {
      transform: translateY(100%);
    }
@keyframes slide-in-vertical-reverse {
  50% {
    transform: translateY(0);
  }
  @keyframes slide-in-out {
    50% {
      transform: scaleX(1);
      transform-origin: left;
    }
  to {
    transform: translateY(100%);
  }
}
    50.1% {
      transform-origin: right;
    }
    100% {
      transform: scaleX(0);
      transform-origin: right;
    }
@keyframes slide-in-out {
  50% {
    transform: scaleX(1);
    transform-origin: left;
  }
  @keyframes fill-text-white {
    to {
      color: white;
    }
  50.1% {
    transform-origin: right;
  }
  @keyframes scale-in {
    to {
      transform: scale(1);
    }
  100% {
    transform: scaleX(0);
    transform-origin: right;
  }
}
@keyframes fill-text-white {
  to {
    color: white;
  }
}
@keyframes scale-in {
  to {
    transform: scale(1);
  }
}
</style>