当前位置:   article > 正文

【sgCollapseBtn】自定义组件:底部折叠/展开按钮

【sgCollapseBtn】自定义组件:底部折叠/展开按钮

特性:

  1. 支持自定义折叠状态
  2. 支持自定义标签名称

sgCollapseBtn源码 

  1. <template>
  2. <div :class="$options.name" @click="show = !show" :placement="placement">
  3. <div class="collapse-btns">
  4. <div class="collapse-btn" v-if="show">
  5. <i class="el-icon-caret-top"></i>
  6. <div class="label">折叠{{ collapseLabel || expandLabel || `` }}</div>
  7. </div>
  8. <div class="collapse-btn" v-else>
  9. <i class="el-icon-caret-bottom"></i>
  10. <div class="label">展开{{ expandLabel || collapseLabel || `` }}</div>
  11. </div>
  12. </div>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. name: "sgCollapseBtn",
  18. components: {},
  19. data() {
  20. return {
  21. show: false,
  22. };
  23. },
  24. props: ["data", "value", "collapseLabel", "expandLabel", "placement"],
  25. watch: {
  26. value: {
  27. handler(d) {
  28. this.show = d;
  29. },
  30. deep: true,
  31. immediate: true,
  32. },
  33. show(d) {
  34. this.$emit("input", d);
  35. },
  36. },
  37. created() {},
  38. mounted() {},
  39. computed: {},
  40. methods: {},
  41. };
  42. </script>
  43. <style lang="scss" scoped>
  44. .sgCollapseBtn {
  45. position: relative;
  46. z-index: 1;
  47. /*禁止选中文本*/
  48. user-select: none;
  49. width: 100%;
  50. height: 30px;
  51. line-height: 30px;
  52. background-color: white;
  53. cursor: pointer;
  54. &[placement="bottom"] {
  55. position: absolute;
  56. top: revert;
  57. bottom: 0;
  58. left: 0;
  59. right: 0;
  60. }
  61. .collapse-btns {
  62. width: 100%;
  63. $side: 20%; //渐变边界
  64. /*左右渐变遮罩(兼容IOS)*/
  65. -webkit-mask-image: linear-gradient(
  66. to right,
  67. transparent,
  68. white $side,
  69. white calc(100% - #{$side}),
  70. transparent
  71. );
  72. display: flex;
  73. justify-content: center;
  74. align-items: center;
  75. font-size: 14px;
  76. background-color: white;
  77. &::after {
  78. content: "";
  79. width: 100%;
  80. height: 100%;
  81. position: absolute;
  82. left: 0;
  83. top: 0;
  84. background: linear-gradient(white, #e2f0ff);
  85. opacity: 0;
  86. transition: 1s ease !important;
  87. z-index: -1;
  88. }
  89. .collapse-btn {
  90. transition: 0.4s !important;
  91. display: flex;
  92. align-items: center;
  93. transform: translateX(40%);
  94. i {
  95. transition: 0.4s !important;
  96. color: #d3dce6;
  97. }
  98. .label {
  99. transition: 0.2s !important;
  100. margin-left: 25px;
  101. color: #409eff;
  102. opacity: 0;
  103. }
  104. }
  105. }
  106. &:active,
  107. &:hover {
  108. .collapse-btns {
  109. &::after {
  110. opacity: 1;
  111. }
  112. .collapse-btn {
  113. transform: translateX(0%);
  114. i {
  115. color: #409eff;
  116. }
  117. .label {
  118. margin-left: 5px;
  119. color: #409eff;
  120. opacity: 1;
  121. // width: 100%;
  122. }
  123. }
  124. }
  125. }
  126. }
  127. </style>

应用

  1. <template>
  2. <div :class="$options.name">
  3. <!-- 折叠按钮 -->
  4. <sgCollapseBtn v-model="expandSearch" :placement="`bottom`" :collapseLabel="``" />
  5. </div>
  6. </template>
  7. <script>
  8. import sgCollapseBtn from "@/vue/components/admin/sgCollapseBtn";
  9. export default {
  10. name: "sgComponent",
  11. components: { sgCollapseBtn },
  12. data() {
  13. return {
  14. expandSearch: false,
  15. };
  16. },
  17. props: ["value"],
  18. computed: {},
  19. watch: {},
  20. created() {},
  21. mounted() {},
  22. methods: {},
  23. destroyed() {},
  24. };
  25. </script>
  26. <style lang="scss" scoped>
  27. .sgComponent {
  28. }
  29. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/274389
推荐阅读
相关标签
  

闽ICP备14008679号