rich-text.uvue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <view>
  3. <page-head title="rich-text"></page-head>
  4. <view class="uni-padding-wrap uni-common-mt">
  5. <view class="uni-btn-v">
  6. <navigator url="/pages/component/rich-text/rich-text-tags">
  7. <button type="primary">rich-text渲染单个HTML标签示例</button>
  8. </navigator>
  9. </view>
  10. <view class="uni-btn-v">
  11. <navigator url="/pages/component/rich-text/rich-text-complex">
  12. <button type="primary">rich-text渲染复杂HTML示例</button>
  13. </navigator>
  14. </view>
  15. <view class="uni-title">
  16. <button type="default" @click="changeText">修改文本内容</button>
  17. </view>
  18. <view class="text-box" id="rich-text-parent" @click="richTextParentClick">
  19. <rich-text id="richtext" style="border: 1px; border-style: solid; border-color: red;" :nodes="text"></rich-text>
  20. <view>
  21. <text>rich-text-parent</text>
  22. <text id='rich-text-str'>{{richTextStr}}</text>
  23. </view>
  24. </view>
  25. <view class="uni-title">
  26. <text class="uni-subtitle-text">selectable</text>
  27. </view>
  28. <view class="text-box2">
  29. <rich-text style="height: 80px;" :selectable="true"
  30. :nodes="text"></rich-text>
  31. </view>
  32. </view>
  33. </view>
  34. <rich-text v-if="autoTest" id="test-rich-text" :nodes="testNodes" :selectable="true" @itemclick="itemClickForTest" style="position: fixed;width: 100px;height: 100px;"></rich-text>
  35. </template>
  36. <script>
  37. export default {
  38. data() {
  39. return {
  40. text: "<span>hello uni-app x!</span><br/><span>uni-app x,终极跨平台方案</span>",
  41. richTextHeight: 0,
  42. richTextElement: null as UniElement | null,
  43. // 自动化测试
  44. autoTest: false,
  45. testNodes: '<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni@2x.png"></img>',
  46. isItemClickTrigger: false,
  47. richTextStr: false
  48. }
  49. },
  50. onReady() {
  51. this.richTextElement = uni.getElementById('richtext') as UniElement
  52. setTimeout(() => {
  53. this.updateRichTextHeight()
  54. }, 2500)
  55. },
  56. methods: {
  57. changeText() {
  58. if (this.text === "<span>hello uni-app x!</span><br/><span>uni-app x,终极跨平台方案</span>") {
  59. this.text = "<h1>hello uni-app x!</h1><br/><h2>uni-app x,终极跨平台方案</h2>"
  60. } else {
  61. this.text = "<span>hello uni-app x!</span><br/><span>uni-app x,终极跨平台方案</span>"
  62. }
  63. setTimeout(() => {
  64. this.updateRichTextHeight()
  65. }, 200)
  66. },
  67. updateRichTextHeight() {
  68. if (this.richTextElement != null) {
  69. this.richTextElement!.getBoundingClientRectAsync()!.then((elRect: DOMRect) => {
  70. this.richTextHeight = elRect.height
  71. console.log('richTextHeight:', this.richTextHeight)
  72. })
  73. }
  74. },
  75. // 自动化测试
  76. itemClickForTest(_ : UniRichTextItemClickEvent) {
  77. this.isItemClickTrigger = true;
  78. },
  79. getBoundingClientRectForTest() : DOMRect {
  80. return uni.getElementById('test-rich-text')?.getBoundingClientRect()!;
  81. },
  82. richTextParentClick() {
  83. this.richTextStr = true;
  84. }
  85. }
  86. }
  87. </script>
  88. <style>
  89. .text-box {
  90. padding: 20px 0;
  91. background-color: white;
  92. }
  93. .text-box2 {
  94. top: 20px;
  95. background-color: white;
  96. }
  97. </style>