当前位置:   article > 正文

vue封装一个多行文本展开收起的组件_vue文字的展开与收起 插件

vue文字的展开与收起 插件
  1. <template>
  2. <div class="content">
  3. <div class="text" :class="[isAll ? props.longClass : '']">
  4. <label for="exp" class="btn" v-if="showCtro" @click.stop="isAll = !isAll">
  5. <span class="words">{{ isAll ? '展开' : '收起' }}</span>
  6. </label>
  7. <span ref="reportText" v-html="textHtml" />
  8. </div>
  9. </div>
  10. </template>
  11. <script setup>
  12. import { defineComponent, ref, watch, onMounted, nextTick } from 'vue'
  13. const props = defineProps({
  14. text: {
  15. type: String,
  16. default: ''
  17. },
  18. textHtml: {
  19. type: String,
  20. default: ''
  21. },
  22. longClass: {
  23. type: String,
  24. default: 'long'
  25. }
  26. })
  27. const showCtro = ref(false)
  28. const isAll = ref(false)
  29. const reportText = ref('')
  30. const classObj = ref({
  31. long: 75
  32. })
  33. watch(
  34. () => props.text,
  35. async () => {
  36. isAll.value = false
  37. showCtro.value = false
  38. await nextTick()
  39. const key = props.longClass
  40. if (props.text) {
  41. showCtro.value = isAll.value = reportText.value?.offsetHeight > classObj.value[key]
  42. }
  43. },
  44. {
  45. immediate: true
  46. }
  47. )
  48. </script>
  49. <style lang="less" scoped>
  50. .content {
  51. height: 100%;
  52. display: flex;
  53. }
  54. .text {
  55. width: 100%;
  56. color: #333;
  57. font-size: 14px;
  58. }
  59. .long {
  60. height: 64px;
  61. display: -webkit-box;
  62. overflow: hidden;
  63. -webkit-line-clamp: 3;
  64. -webkit-box-orient: vertical;
  65. }
  66. .btn {
  67. float: right;
  68. clear: both;
  69. margin-right: 8px;
  70. color: #514def;
  71. cursor: pointer;
  72. }
  73. .text::before {
  74. content: '';
  75. float: right;
  76. width: 0;
  77. height: calc(100% - 20px);
  78. }
  79. .exp:checked + .text {
  80. -webkit-line-clamp: 999; /*设置一个足够大的行数就可以了*/
  81. }
  82. </style>

实现思路:

        1、 利用css样式让展开收起按钮浮动后,与文本处在同一个空间内

        2、通过动态样式,来切换展开和收起的不同文本样式和高度

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

闽ICP备14008679号