z-collapse.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <view class="z-collapse">
  3. <view class="z-collapse-title flex-n fac fjb" @click="show=show?false:true">
  4. <view class="z-collapse-text">{{title}}</view>
  5. <view class="iconfont iconfanhui" :class="show?'z-collapse-top':'z-collapse-down'"></view>
  6. </view>
  7. <view :class="show?'z-collapse-area':'z-collapse-area-hide'">
  8. <slot></slot>
  9. </view>
  10. </view>
  11. </template>
  12. <script>
  13. export default {
  14. props:{
  15. title:String
  16. },
  17. data() {
  18. return {
  19. show:false,
  20. };
  21. }
  22. }
  23. </script>
  24. <style scoped lang="scss">
  25. .z-collapse{
  26. .z-collapse-title{
  27. line-height: 80rpx;
  28. padding: 0 50rpx;
  29. border-bottom: 1px solid #f1f1f1;
  30. }
  31. .z-collapse-text{
  32. color: #999999;
  33. font-size:28rpx;
  34. }
  35. .z-collapse-top{
  36. transform: rotate(90deg);
  37. color: #333333;
  38. font-size:28rpx;
  39. }
  40. .z-collapse-down{
  41. font-size:28rpx;
  42. color: #333333;
  43. transform: rotate(-90deg);
  44. }
  45. .z-collapse-area{
  46. animation: show .5s;
  47. animation-fill-mode:forwards;
  48. }
  49. .z-collapse-area-hide{
  50. animation: hide .5s;
  51. animation-fill-mode:forwards;
  52. }
  53. }
  54. @keyframes show{
  55. 0%{
  56. height: 0;
  57. padding: 0;
  58. overflow:visible;
  59. }
  60. 100%{
  61. padding: 20rpx 0;
  62. height: 100%;
  63. }
  64. }
  65. @keyframes hide{
  66. 0%{
  67. padding: 20rpx 0;
  68. height: 100%;
  69. }
  70. 100%{
  71. height: 0;
  72. padding: 0;
  73. overflow:hidden;
  74. }
  75. }
  76. </style>