{
  "id": "gustavofusco_lazy-starfish-84",
  "name": "lazy-starfish-84",
  "category": "buttons",
  "author": "gustavofusco",
  "description": "lazy-starfish-84 组件 (button, animation, interactive)",
  "tags": [
    "button",
    "animation",
    "interactive"
  ],
  "original": {
    "html": "<div class=\"container\">\n  <button class=\"button\">\n    <div class=\"button__line\"></div>\n    <div class=\"button__line\"></div>\n    <span class=\"button__text\">Hover Me</span>\n    <div class=\"button__drow1\"></div>\n    <div class=\"button__drow2\"></div>\n  </button>  \n</div>",
    "css": "/* From Uiverse.io by gustavofusco - Tags: button */\n.button {\n  position: relative;\n  z-index: 0;\n  width: 240px;\n  height: 56px;\n  text-decoration: none;\n  font-size: 14px;\n  font-weight: bold;\n  color: #00135C;\n  letter-spacing: 2px;\n  transition: all .3s ease;\n  border: none;\n  background: transparent;\n}\n\n.button__text {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n}\n\n.button::before,\n.button::after,\n.button__text::before,\n.button__text::before {\n  content: '';\n  position: absolute;\n  height: 3px;\n  border-radius: 2px;\n  background: #00135C;\n  transition: all .5s ease;\n}\n\n.button::before {\n  top: 0;\n  left: 54px;\n  width: calc(100% - 56px * 2 - 16px);\n}\n\n.button::after {\n  top: 0;\n  right: 54px;\n  width: 8px;\n}\n\n.button__text::before {\n  bottom: 0;\n  right: 54px;\n  width: calc(100% - 56px * 2 - 16px);\n}\n\n.button__text::after {\n  top: 0;\n  right: 54px;\n  width: 8px;\n}\n\n.button__line {\n  position: absolute;\n  top: 0;\n  width: 56px;\n  height: 100%;\n  overflow: hidden;\n}\n\n.button__line::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  width: 150%;\n  height: 100%;\n  box-sizing: border-box;\n  border-radius: 300px;\n  border: #00135C;\n}\n\n.button__line:nth-child(1),\n.button__line:nth-child(1)::before {\n  left: 0;\n}\n\n.button__line:nth-child(2),\n.button__line:nth-child(2)::before {\n  right: 0;\n}\n\n.button:hover {\n  letter-spacing: 6px;\n}\n\n.button:hover::before,\n.button:hover .button__text::before {\n  width: 8px;\n}\n\n.button:hover::after,\n.button:hover .button__text::after {\n  width: calc(100% - 56px * 2 - 16px);\n}\n\n.button__drow1,\n.button__drow2 {\n  position: absolute;\n  z-index: -1;\n  border: 1rem;\n  transform-origin: 1rem 1rem;\n}\n\n.button__drow1 {\n  top: -1rem;\n  left: 40px;\n  width: 2rem;\n  height: 0;\n  transform: rotate(30deg);\n}\n\n.button__drow2 {\n  top: 44px;\n  left: 77px;\n  width: 2rem;\n  height: 0;\n  transform: rotate(-127deg);\n}\n\n.button__drow1::before,\n.button__drow1::after,\n.button__drow2::before,\n.button__drow2::after {\n  content: '';\n  position: absolute;\n}\n\n.button__drow1::before {\n  bottom: 0;\n  left: 0;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-60deg);\n}\n\n.button__drow1::after {\n  top: -10px;\n  left: 45px;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-69deg);\n}\n\n.button__drow2::before {\n  bottom: 0;\n  left: 0;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-146deg);\n}\n\n.button__drow1::after {\n  bottom: 26px;\n  left: -40px;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-262deg);\n}\n\n.button__drow1,\n.button__drow1::before,\n.button__drow1::after,\n.button__drow2,\n.button__drow2::before,\n.button__drow2::after {\n  background: dodgerblue;\n}\n\n.button:hover .button__drow1 {\n  animation: drow1 ease-in .06s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow1::before {\n  animation: drow2 linear .08s .06s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow1::after {\n  animation: drow3 linear .03s .14s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2 {\n  animation: drow4 linear .06s .2s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2::before {\n  animation: drow3 linear .03s .26s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2::after {\n  animation: drow5 linear .06s .32s;\n  animation-fill-mode: forwards;\n}\n\n@keyframes drow1 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 100px;\n  }\n}\n\n@keyframes drow2 {\n  0% {\n    width: 0;\n    opacity: 0;\n  }\n\n  10% {\n    opacity: 0;\n  }\n\n  11% {\n    opacity: 1;\n  }\n\n  100% {\n    height: 120px;\n  }\n}\n\n@keyframes drow3 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 80px;\n  }\n}\n\n@keyframes drow4 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 120px;\n  }\n}\n\n@keyframes drow5 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 124px;\n  }\n}\n\n.container {\n  width: 100%;\n  height: 300px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}",
    "file_path": "/mnt/persist/workspace/Buttons/gustavofusco_lazy-starfish-84.html"
  },
  "uniapp": {
    "template": "<view class=\"container\"></view>\n  <button class=\"button\"></button>\n    <view class=\"button__line\"></view>\n    <view class=\"button__line\"></view>\n    <text class=\"button__text\">Hover Me</text>\n    <view class=\"button__drow1\"></view>\n    <view class=\"button__drow2\"></view>\n  </button>  \n</div>",
    "script": "export default {\n  name: 'GalaxyLazyStarfish84',\n  props: {\n    // 根据组件类型动态生成props\n  },\n  data() {\n    return {\n      // 组件状态\n    };\n  },\n  methods: {\n    // 组件方法\n  }\n}",
    "style": "\n/* From Uiverse.io by gustavofusco - Tags: button */\n.button {\n  position: relative;\n  z-index: 0;\n  width: 480rpx;\n  height: 112rpx;\n  text-decoration: none;\n  font-size: 28rpx;\n  font-weight: bold;\n  color: #00135C;\n  letter-spacing: 4rpx;\n  transition: all .3s ease;\n  border: none;\n  background: transparent;\n}\n\n.button__text {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n}\n\n.button::before,\n.button::after,\n.button__text::before,\n.button__text::before {\n  content: '';\n  position: absolute;\n  height: 6rpx;\n  border-radius: 4rpx;\n  background: #00135C;\n  transition: all .5s ease;\n}\n\n.button::before {\n  top: 0;\n  left: 108rpx;\n  width: calc(100% - 112rpx * 2 - 32rpx);\n}\n\n.button::after {\n  top: 0;\n  right: 108rpx;\n  width: 16rpx;\n}\n\n.button__text::before {\n  bottom: 0;\n  right: 108rpx;\n  width: calc(100% - 112rpx * 2 - 32rpx);\n}\n\n.button__text::after {\n  top: 0;\n  right: 108rpx;\n  width: 16rpx;\n}\n\n.button__line {\n  position: absolute;\n  top: 0;\n  width: 112rpx;\n  height: 100%;\n  overflow: hidden;\n}\n\n.button__line::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  width: 150%;\n  height: 100%;\n  box-sizing: border-box;\n  border-radius: 600rpx;\n  border: #00135C;\n}\n\n.button__line:nth-child(1),\n.button__line:nth-child(1)::before {\n  left: 0;\n}\n\n.button__line:nth-child(2),\n.button__line:nth-child(2)::before {\n  right: 0;\n}\n\n.button:hover {\n  letter-spacing: 12rpx;\n}\n\n.button:hover::before,\n.button:hover .button__text::before {\n  width: 16rpx;\n}\n\n.button:hover::after,\n.button:hover .button__text::after {\n  width: calc(100% - 112rpx * 2 - 32rpx);\n}\n\n.button__drow1,\n.button__drow2 {\n  position: absolute;\n  z-index: -1;\n  border: 1rem;\n  transform-origin: 1rem 1rem;\n}\n\n.button__drow1 {\n  top: -1rem;\n  left: 80rpx;\n  width: 2rem;\n  height: 0;\n  transform: rotate(30deg);\n}\n\n.button__drow2 {\n  top: 88rpx;\n  left: 154rpx;\n  width: 2rem;\n  height: 0;\n  transform: rotate(-127deg);\n}\n\n.button__drow1::before,\n.button__drow1::after,\n.button__drow2::before,\n.button__drow2::after {\n  content: '';\n  position: absolute;\n}\n\n.button__drow1::before {\n  bottom: 0;\n  left: 0;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-60deg);\n}\n\n.button__drow1::after {\n  top: -20rpx;\n  left: 90rpx;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-69deg);\n}\n\n.button__drow2::before {\n  bottom: 0;\n  left: 0;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-146deg);\n}\n\n.button__drow1::after {\n  bottom: 52rpx;\n  left: -80rpx;\n  width: 0;\n  height: 2rem;\n  border-radius: 1rem;\n  transform-origin: 1rem 1rem;\n  transform: rotate(-262deg);\n}\n\n.button__drow1,\n.button__drow1::before,\n.button__drow1::after,\n.button__drow2,\n.button__drow2::before,\n.button__drow2::after {\n  background: dodgerblue;\n}\n\n.button:hover .button__drow1 {\n  animation: drow1 ease-in .06s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow1::before {\n  animation: drow2 linear .08s .06s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow1::after {\n  animation: drow3 linear .03s .14s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2 {\n  animation: drow4 linear .06s .2s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2::before {\n  animation: drow3 linear .03s .26s;\n  animation-fill-mode: forwards;\n}\n\n.button:hover .button__drow2::after {\n  animation: drow5 linear .06s .32s;\n  animation-fill-mode: forwards;\n}\n\n@keyframes drow1 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 200rpx;\n  }\n}\n\n@keyframes drow2 {\n  0% {\n    width: 0;\n    opacity: 0;\n  }\n\n  10% {\n    opacity: 0;\n  }\n\n  11% {\n    opacity: 1;\n  }\n\n  100% {\n    height: 240rpx;\n  }\n}\n\n@keyframes drow3 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 160rpx;\n  }\n}\n\n@keyframes drow4 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 240rpx;\n  }\n}\n\n@keyframes drow5 {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: 248rpx;\n  }\n}\n\n.container {\n  width: 100%;\n  height: 600rpx;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n\n\n\n\n",
    "component_name": "GalaxyLazyStarfish84"
  },
  "platforms": {
    "h5": true,
    "mp-weixin": true,
    "mp-alipay": true,
    "mp-baidu": true,
    "mp-toutiao": true,
    "app-plus": true
  },
  "props": [
    {
      "name": "disabled",
      "type": "Boolean",
      "default": false,
      "required": false,
      "description": "是否禁用"
    },
    {
      "name": "text",
      "type": "String",
      "default": "按钮",
      "required": false,
      "description": "按钮文字"
    },
    {
      "name": "type",
      "type": "String",
      "default": "primary",
      "required": false,
      "description": "按钮类型"
    }
  ],
  "events": [
    {
      "name": "click",
      "description": "点击事件",
      "parameters": [
        "event"
      ]
    }
  ],
  "slots": [
    {
      "name": "",
      "description": "",
      "props": []
    }
  ],
  "compatibility": {
    "h5": {
      "supported": true,
      "issues": [],
      "alternatives": []
    },
    "mp-weixin": {
      "supported": true,
      "issues": [],
      "alternatives": []
    },
    "mp-alipay": {
      "supported": true,
      "issues": [],
      "alternatives": []
    },
    "app-plus": {
      "supported": true,
      "issues": [],
      "alternatives": []
    }
  },
  "performance": {
    "complexity": "high",
    "bundle_size": 4417,
    "render_cost": "high",
    "memory_usage": "high"
  },
  "dependencies": [],
  "examples": [
    {
      "title": "",
      "description": "",
      "code": ""
    }
  ],
  "created_at": "2025-07-31T07:55:36.904Z",
  "updated_at": "2025-07-31T07:55:36.904Z"
}