">
当前位置:   article > 正文

基于elementui二次封装tooltip组件(完善,多行高度的情况)_

 当有需求是:使用自定义样式,在有省略号的情况下显示tooltip但是无省略号时没有提示,则有了下面的组件封装

  1. <template>
  2. <div :style="{'--lineNum':lineNum}" class="text-tooltip">
  3. <el-tooltip :content="content" :disabled="isShowTooltip" class="item" effect="dark" placement="bottom">
  4. <div class="tooltip_over">
  5. <slot class="label" name="label"></slot>
  6. <div :class="className" :style="{color:normal?'#666':'','font-weight':normal?'normal':''}" class="over-flow"
  7. @mouseover="onMouseOver(refName)">
  8. <span :ref="refName">{{ content }}</span>
  9. </div>
  10. </div>
  11. </el-tooltip>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. name: 'textTooltip',
  17. props: {
  18. //默认字体高度
  19. lineHeight:{
  20. type:Number,
  21. default:14*1.5
  22. },
  23. //默认显示的行数
  24. lineNum: {
  25. type: Number,
  26. default: 1
  27. },
  28. //文字样式是否使用默认
  29. normal: {
  30. type: Boolean,
  31. default: true
  32. },
  33. // 显示的文字内容
  34. content: {
  35. type: String,
  36. default: ""
  37. },
  38. // 外层框的样式,在传入的这个类名中设置文字显示的宽度
  39. className: {
  40. type: String,
  41. default: ""
  42. },
  43. // 为页面文字标识(如在同一页面中调用多次组件,此参数不可重复)
  44. // 当同一页面使用多次组件时,需要定义不同的refName属性
  45. refName: {
  46. type: String,
  47. default: ""
  48. },
  49. //若出现外层框数值不确定的情况,可使用传参的方式定义父级的宽度
  50. parentWidth: {
  51. type: Number,
  52. default: 0
  53. }
  54. },
  55. data() {
  56. return {
  57. isShowTooltip: true
  58. }
  59. },
  60. methods: {
  61. onMouseOver(str) {
  62. let contentWidth = this.$refs[str].offsetWidth;
  63. let height = this.$refs[str].offsetHeight;
  64. if (this.parentWidth != 0) {
  65. if (this.parentWidth < contentWidth + 20) {
  66. this.isShowTooltip = false;
  67. } else {
  68. this.isShowTooltip = true;
  69. }
  70. } else {
  71. // 判断是否开启tooltip功能 this.$refs[str].parentNode.offsetWidth
  72. // console.log(contentWidth,height,this.$refs[str].offsetHeight);
  73. // 20为特殊字符的误差
  74. if (height>this.lineHeight*this.lineNum) {
  75. this.isShowTooltip = false;
  76. } else {
  77. this.isShowTooltip = true;
  78. }
  79. }
  80. }
  81. }
  82. }
  83. </script>
  84. <style lang="scss" scoped>
  85. $lineNum: var(--lineNum);
  86. .tooltip_over {
  87. display: flex;
  88. line-height: 1.5;
  89. .label {
  90. width: 70px;
  91. }
  92. .over-flow {
  93. flex: 1;
  94. word-break: break-all;
  95. overflow: hidden;
  96. display: -webkit-box;
  97. -webkit-line-clamp: $lineNum;
  98. -webkit-box-orient: vertical;
  99. }
  100. }
  101. </style>

使用:

  1. <div class="courseName">
  2. <Tooltip
  3. :content="mainData.courseContent || '暂无'"
  4. refName="tooltipOverCourseContent"
  5. :normal=false
  6. :lineNum=1
  7. >
  8. <div slot="label">课程简介:</div>
  9. </Tooltip>
  10. </div>
  1. .courseName {
  2. display: inline-flex !important;
  3. max-width: 400px;
  4. span {
  5. flex: 1;
  6. }
  7. }

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

闽ICP备14008679号