<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      基于uni-app+vue3渲染markdown格式|uniapp軟鍵盤頂起問題解決方案

      前些時候有給大家分享一篇uni-app+vite4+uview-plus搭建跨端項目。今天主要分享下在uniapp中渲染markdown語法及uniapp中軟鍵盤彈起,頁面tabbar或頂部自定義navbar導航欄被撐起擠壓的問題。

      如上圖:支持h5+小程序+App端markdown解析渲染。

      上面則是演示了在App端+小程序端鍵盤彈起,整體頁面及自定義導航條不會被頂跑的問題。

      好了,話不多說,接下來就主要介紹下如何實現的吧。

      uniapp+vue3解析markdown語法/高亮

      雖說uniapp插件市場也有一些markdown渲染插件,但大多兼容性不好。于是就使用了markdown-it及highlight.js插件進行了簡單的封裝處理。經調試目前可以支持h5/小程序/App端的markdown語法解析。

      // 引入markdown-it和highlight.js插件
      import MarkdownIt from '@/plugins/markdown-it.min.js'
      import hljs from '@/plugins/highlight/highlight.min.js'
      // import '@/plugins/highlight/github-dark.min.css'
      import '@/plugins/highlight/atom-one-light.css'
      import parseHtml from '@/plugins/html-parser.js'

      highlight.js高亮樣式大家可以根據需要自行下載,這里使用的淺色樣式。

      • 初始化markdownIt插件

      接下來是初始化markdown及語法高亮、增加代碼行號功能。

      const markdown = MarkdownIt({
         html: true,
         highlight: function(str, lang) {
          let preCode = ""
          try {
            preCode = hljs.highlightAuto(str).value
          } catch (err) {
            preCode = markdown.utils.escapeHtml(str);
          }
          // 自定義行號
          const lines = preCode.split(/\n/).slice(0, -1)
          let html = lines.map((item, index) => {
            // 去掉空行
            if( item == ''){
              return ''
            }
            return '<li><span class="line-num" data-line="' + (index + 1) + '"></span>' + item +'</li>'
          }).join('')
          html = '<ol style="padding: 0px 30px;">' + html + '</ol>'
          
          // 代碼復制
          copyCode.push(str)
          let htmlCode = `<div class="markdown-wrap">`
            // #ifndef MP-WEIXIN
              htmlCode += `<div style="color: #aaa;text-align: right;font-size: 12px;padding:8px;">`
                htmlCode += `${lang}<a class="copy-btn" code-data-index="${copyCode.length - 1}" style="margin-left: 8px;">復制代碼</a>`
              htmlCode += `</div>`
            // #endif
              htmlCode += `<pre class="hljs" style="padding:0 8px;margin-bottom:5px;overflow: auto;border-radius: 5px;"><code>${html}</code></pre>`;
            htmlCode += '</div>'
          return htmlCode
        }
      })
      • 渲染markdown結構
      const parseNodes = (value) => {
         if(!value) return
         
         let htmlString = ''
        if (value.split("```").length % 2) {
          let msgContent = value
          if(msgContent[msgContent.length-1] != '\n'){
            msgContent += '\n'
          }
          htmlString = markdown.render(msgContent)
        } else {
          htmlString = markdown.render(msgContent.value)
        }
        
        // #ifndef APP-NVUE
        return htmlString
        // #endif
        
        // nvue模式下將htmlString轉成htmlArray,其他情況rich-text內部轉
        // 注:本示例項目還沒使用nvue編譯
        // #ifdef APP-NVUE
        return parseHtml(htmlString)
        // #endif
      }

      最后使用rich-text組件來渲染處理后的結果。

      <rich-text space="nbsp" :nodes="parseNodes(item.content)" @itemclick="handleItemClick"></rich-text>

      代碼復制功能則是使用rich-text提供的itemclick方法來實現。

      // 復制代碼
      const handleItemClick = (e) => {
        let {attrs} = e.detail.node
        let {"code-data-index": codeDataIndex, "class": className} = attrs
        if(className == 'copy-btn'){
          uni.setClipboardData({
            data:copyCode[codeDataIndex],
            showToast:false,
            success() {
              uni.showToast({
                title: '復制成功',
                icon: 'none'
              });
            }
          })
        }
      }

      通過上面幾步,基本就實現了解析markdown語法了。

      uniapp markdown組件已經發布插件市場,歡迎免費下載使用。

      https://ext.dcloud.net.cn/plugin?id=13307

      如果大家有一些其它不錯的解決方案,歡迎交流討論分享哈~~

       

      uni-app軟鍵盤撐起頂跑問題

      在使用uniapp開發的時候,經常會遇到input輸入框鍵盤會頂跑頁面。導致頂部自定義導航欄會不見了。

      接下來就介紹一種簡單的方法,經測試是可行的,如果大家有其它方法,也歡迎交流分享。

      說白了,就是在input編輯框外層加一個view標簽,然后給設置padding-bottom為鍵盤彈起高度。

      uniapp也提供了監聽鍵盤高度變化函數 uni.onKeyboardHeightChange 

      const fixPaddingBottom = computed(() => {
        let keyH = keyboardHeight.value > 50 ? keyboardHeight.value - 50 : keyboardHeight.value
        return (keyH || 10) + 'px'
      })

      這里減去50是底部有自定義tabbar,大家可以根據實際情況調整。

      onMounted(() => {
        nextTick(() => {
          scrollToLast()
        })
        
        // #ifndef H5
        uni.onKeyboardHeightChange(e => {
          keyboardHeight.value = e.height
          // 在dom渲染完畢 滾動到最后一條消息
          nextTick(() => {
            scrollToLast()
          })
        })
        // #endif
      })

      目前通過這種方法解決了鍵盤撐起問題。如果大家有其它解決方法,歡迎下方留言討論哈~~??

      Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板

      vue3-webseek網頁版AI問答|Vite6+DeepSeek+Arco流式ai聊天打字效果

       

      posted @ 2023-06-25 08:58  xiaoyan2017  閱讀(2141)  評論(2)    收藏  舉報
      友情鏈接: UP主小店B站
      主站蜘蛛池模板: 激情国产一区二区三区四区| 乐业县| AV秘 无码一区二| 骚虎视频在线观看| 香蕉久久久久久久AV网站| 那曲县| 色噜噜狠狠一区二区三区果冻| 亚洲熟妇一区二区三个区| 亚洲精品日本久久一区二区三区| 欧洲免费一区二区三区视频| 久99久热这里只有精品| 成人无码h真人在线网站| 亚洲综合精品第一页| 国产人妻大战黑人第1集| 国产成人亚洲欧美二区综合 | 日韩精品一区二区三区在线观看| 日本一区二区不卡精品| 深夜精品免费在线观看| 美女网站免费观看视频| 亚洲国产区男人本色| 国产普通话刺激视频在线播放| 西宁市| 四虎影视一区二区精品| 麻豆人妻| 日韩有码中文在线观看| 国产久爱免费精品视频| 国产偷国产偷亚洲高清午夜| 国产成年女人特黄特色大片免费| 亚洲国产精品一二三四五| 国产一卡2卡三卡4卡免费网站| 镇赉县| 久久av高潮av喷水av无码| 青草99在线免费观看| 内射中出无码护士在线| 2021国产成人精品久久| 礼泉县| 光棍天堂在线手机播放免费| 亚洲伊人五月丁香激情| 亚洲国产精品综合久久2007| 麻豆天美国产一区在线播放| 无码欧亚熟妇人妻AV在线外遇|