1. gzyueqian
      13352868059

      h5培訓機構中心哪里好?粵嵌教你怎么選專業的HTML5課程

      更新時間: 2018-09-21 15:46:52來源: HTML5課程瀏覽量:2889

          想起近開發APP的時候,產品提的一個需求,用戶的帖子正文還有評論內容里,要能夠顯示emoji表情,因為我們這款app是混合開發的,APP里的發貼,發評論是原生做的(android和ios),但帖子詳情頁又是我們前端H5做的,那么問題就來了:
          :原生發帖的時候,emoji表情嵌套在正文里,可能存在一個,或者多個,前端如何才能正常展示?
          第二:原生再次編輯帖子的時候,他怎么拿到emoji,正常顯示呢?
          后臺將emoji表情搞成鏈接,嵌套在正文里???鏈接長度和內容不可控,肯定不行。

          下面我直接說經過討論后的解決方案,我只說前端部分,原生那邊解決方法是同理,大家以后遇到這樣的需求,僅供參考,后面封裝了js代碼,可以直接調用方法,提一下,我用的是vue框架



          先說解決方案:

          原生編輯帖子,將對應的emoji表情用對應的字段表示,這個大家要約定好,比如emoji1 表示微笑,emoji2表示沮喪,直接發送給后臺,前端調用后臺接口,得到含有emoji標記字段的正文內容,對正文進行查找,如果存在標記字段,用img 標簽替換所有的emoji 字段,將存儲在本地對應的emoji圖片路徑綁定在img的src上,將處理好的正文,v-html渲染


          <template>
            <div>
                <div v-html="Emoji('要處理的內容')"></div>
            </div>
          </template>
          import { Emoji } from './../static/js/Emoji.js'
      
          export default {
      
              Emoji:Emoji
      
          }

          下面是封裝的emoji方法

          var emojiArr = [];          // 用于存儲emoji的空數組
          var devicePixelRatio = ''// 設備像素比
          var fn= () =>{
             devicePixelRatio = window.devicePixelRatio
          }
          fn()
          var emojisNum = 48;         // 當前本地emoji表情的數量
      
          //循環出emoji數組
          for (let i = 1; i <= emojisNum; i++) {
            let url = require(`../../static/images/emoji/emoji_${i}@${devicePixelRatio}x.png`);
            emojiArr.push({
              url: url,
              str: `[emoji_${i}]`
            })
          }
      
          //接收到的字符串與命名好的emoji字符串匹配
          const getEmoji = (str) => {
            for (let i = 0; i < emojisNum; i++) {
              if (str == emojiArr[i].str) {
                return emojiArr[i].url;
              }
            }
            return str;
          };
      
          //相匹配的字符串則替換成emoji圖片
          export function Emoji(value) {
            let emojiArrMatch = value.match(/[emoji_(.{1,4})]/ig) || [];
            let len = emojiArrMatch.length;
            if (len == 0) {  //如果正文里沒有emoji字段,原文輸出
              return value;
            }
            emojiArrMatch.forEach(function(item) {
              let url = getEmoji(item);
              value = value.replace(item, `<img class=emoji src=${url}>`);
            })
            return value;
          }


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲热线99精品视频 | 日韩电影免费在线观看视频 | 日韩一区二区四区高清免费 | 一级午夜理论片日本在线 | 热久久美女精品天天吊色 | 婷婷综合激情亚洲狠狠首页 |