基于vue2.x實(shí)現(xiàn)的即時(shí)通訊程序仿微信聊天8開(kāi)發(fā)聊天頁(yè)面表情包靜態(tài)頁(yè)面以及引入表情包實(shí)現(xiàn)表情包信息發(fā)送

這節(jié)課來(lái)實(shí)現(xiàn) 點(diǎn)擊 底部 【笑臉】彈出選擇表情包界面的靜態(tài)頁(yè)面布局屈留,如下圖

image.png
  • 找到【笑臉】兼砖,給他的父級(jí)元素綁定一個(gè)點(diǎn)擊事件@click="showEmo"
image.png
  • 然后在methods里映射這個(gè)方法
methods:{
  showEmo() {
      
    }
}
  • 利用vant組件庫(kù)的popup組件來(lái)實(shí)現(xiàn),下面是dom元素
 <!-- popup 表情包 -->
      <van-popup v-model="show" position="bottom" style="height: 30%">
        <div class="Emoinput">
          <div class="left">
            <van-icon name="http://erkong.ybc365.com/5f28d202201141346467740.png" size="25"></van-icon>
          </div>
          <div class="right">
            <van-search v-model="value" placeholder="請(qǐng)輸入要發(fā)送的消息">
            <template #left-icon>
              <van-icon name=""></van-icon>
            </template>
          </van-search>
          </div>
        </div>
        <div class="emobox">
          <ul>
            <li v-for="(item, index) in 28" :key="index">
              <img src="http://yyds.it98k.cn/images/1.gif" alt="" />
            </li>
          </ul>
          <!-- 發(fā)送按鈕 -->
          <div class="sendBtn">
            <van-button icon="arrow-left" style="margin-right: 15px;" type="primary" size="small">清空</van-button>
            <van-button type="primary" size="small">發(fā)送</van-button>
          </div>
        </div>
      </van-popup>
  • 下面是css
.emobox {
    height: calc(100% - 100px);
    padding: 12px;
    box-sizing: border-box;
    overflow: auto;
    ul {
      display: flex;
      flex-wrap: wrap;

      li {
        width: 90px;
        height: 90px;
        margin-right: 50px;
        img {
          width: 100%;
          height: 100%;
        }
      }
    }
    .sendBtn {
      position: fixed;
      right: 20px;
      bottom: 0px;
      background: white;
      display: flex;
      align-items: center;
      padding: 20px 0px 20px 65px;
      border-radius: 10px;
    }
  }
  .Emoinput {
    display: flex;
    align-items: center;
    padding: 0 20px;
    .right{
      flex: 1;
      ::v-deep .van-search{
       width: 100%;
      }
    }
  }
  • 記得在data中定義show默認(rèn)為false
daa:{
  return{
    show:false
  }
}
  • 然后在點(diǎn)擊方法showEmo里纽甘,點(diǎn)擊將show這個(gè)變量設(shè)置為true
methods:{
  showEmo() {
      this.show = true
    }
}
  • 最終實(shí)現(xiàn)該靜態(tài)頁(yè)面良蛮,但是要記得,使用到的vant組件要在plugins/vant.js內(nèi)注冊(cè)

image.png
  • 下面在實(shí)現(xiàn)把 【所有表情包】引入過(guò)來(lái)

  • 新建組件Emotion
  • components文件夾下新建 Emotion文件夾悍赢,里面新建Emotion.vueindex.vue
  • Emotion.vue

<template>
  <div class="ly-emotion">
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: 'ly-emotion',
  mounted() {
    const name = this.$el.innerHTML
    const list = [
      '大笑',
      '炫耀',
      '倒霉',
      '跳舞',
      '釘釘子',
      '委屈',
      '失落',
      '得意',
      '沖',
      '烏鴉',
      '石化了',
      '忙死了',
      '愛(ài)你',
      '啊喂',
      '熱化了',
      '蝸牛',
      '冷',
      '凄涼',
      '有點(diǎn)熱',
      '吃飽了',
      '哼',
      '打一架',
      '飛吻',
      '冷汗',
      '豬頭',
      '拜拜',
      '烏鴉',
      '再見(jiàn)',
      '瀟灑',
      '酷',
      'emo',
      '干杯',
      '跳舞',
      '委屈',
      '酷',
      '大笑'
    ]
    // console.log(name);
    let index = list.indexOf(name)
    // let imgHTML = `<img src="https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/${index}.gif">`
    let imgHTML = `<img src="https://qiniu.it98k.cn/mhxy/${index+1}.gif">`
    this.$nextTick(() => {
      this.$el.innerHTML = imgHTML
    })
  }
}
</script>
<style scoped>

</style>

  • index.vue

<template>
    <div class="emotion-box" :style="{ height: height  }">
      <div class="emotion-box-line" v-for="(line, i) in list" :key="i">
        <emotion class="emotion-item" v-for="(item, i) in line" :key="i" @click.native="clickHandler(item)">{{
          item
        }}</emotion>
      </div>
    </div>
</template>

<script>
import Emotion from './Emotion'
export default {
  props: {
    height: {
      
    }
  },
  data() {
    return {
      list: [
        ['大笑', '炫耀', '倒霉', '跳舞'],
        ['釘釘子', '委屈', '失落', '得意'],
        ['沖', '烏鴉', '石化了', '忙死了'],
        ['愛(ài)你', '啊喂', '熱化了', '蝸牛'],
        ['冷', '凄涼', '有點(diǎn)熱', '吃飽了'],
        ['哼', '打一架', '飛吻', '冷汗'],
        ['豬頭', '拜拜', '烏鴉', '再見(jiàn)'],
        ['瀟灑', '酷', 'emo', '干杯'],
        ['跳舞', '委屈', '酷','大笑']
      ]
    }
  },
  methods: {
    clickHandler(i) {
      let emotion = `#${i};`
      this.$emit('emotion', emotion)
    }
  },
  components: {
    Emotion
  }
}
</script>
<style scoped lang="scss">
.emotion-box {
  width: 100%;
  box-sizing: border-box;
  overflow: hidden;
  overflow-y: auto;
}
.emotion-box-line {
  display: flex;
  justify-content: space-around;
  ::v-deep img {
    width: 100px;
    height: 100px;
    object-fit: contain;
  }
}
</style>
  • 然后在chatDetail聊天頁(yè)面引入Emotion組件
import Emotion from '@/components/Emotion';
  • 注冊(cè)一下
 components: {Emotion },
  • 然后使用這個(gè)組件 决瞳,并在methods里映射自定義事件
image.png
  • methods

handleEmotion(i) {
      this.value += i
 },
  • 這樣就實(shí)現(xiàn)了表情包的引入

image.png
  • 下面給發(fā)送按鈕直接調(diào)用send方法
image.png
  • 再給send方法里,設(shè)置this.show = false左权,在發(fā)送表情包后皮胡,隱藏彈窗
image.png
  • 可以看到,發(fā)送出去的是表情包的標(biāo)識(shí)赏迟,我們可以使用 正則表達(dá)式 來(lái)匹配 標(biāo)識(shí) 映射 img圖片
  • 現(xiàn)在methods里定義一個(gè)方法
methods:{
   // 將匹配結(jié)果替換表情圖片
    emotion(res) {
      let word = res.replace(/\#|\;/gi, '')
      const list = [
       '大笑',
      '炫耀',
      '倒霉',
      '跳舞',
      '釘釘子',
      '委屈',
      '失落',
      '得意',
      '沖',
      '烏鴉',
      '石化了',
      '忙死了',
      '愛(ài)你',
      '啊喂',
      '熱化了',
      '蝸牛',
      '冷',
      '凄涼',
      '有點(diǎn)熱',
      '吃飽了',
      '哼',
      '打一架',
      '飛吻',
      '冷汗',
      '豬頭',
      '拜拜',
      '烏鴉',
      '再見(jiàn)',
      '瀟灑',
      '酷',
      'emo',
      '干杯',
      '跳舞',
      '委屈',
      '酷',
      '大笑'
      ]
      let index = list.indexOf(word)
      return `<img src="https://qiniu.it98k.cn/mhxy/${index + 1}.gif" align="middle">`
    },
}
  • 然后修改模版渲染方式
image.png
 <div class="content">
            <p v-html="item.message.replace(/\#[\u4E00-\u9FA5]{1,3}\;/gi, emotion)"></p>
          </div>
  • 這樣就實(shí)現(xiàn)了
image.png
  • 最后修改下 樣式
.content{
      p{
        display: flex;
        align-items: center;
      }
      ::v-deep   img{
         width: 120px;
         height: 120px;
          object-fit: contain;
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屡贺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锌杀,更是在濱河造成了極大的恐慌甩栈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕再,死亡現(xiàn)場(chǎng)離奇詭異量没,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)突想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)殴蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人猾担,你說(shuō)我怎么就攤上這事袭灯。” “怎么了绑嘹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵稽荧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我工腋,道長(zhǎng)蛤克,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任夷蚊,我火速辦了婚禮构挤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惕鼓。我一直安慰自己筋现,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布箱歧。 她就那樣靜靜地躺著矾飞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呀邢。 梳的紋絲不亂的頭發(fā)上洒沦,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音价淌,去河邊找鬼申眼。 笑死瞒津,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括尸。 我是一名探鬼主播巷蚪,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼濒翻!你這毒婦竟也來(lái)了屁柏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤有送,失蹤者是張志新(化名)和其女友劉穎淌喻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雀摘,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裸删,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了届宠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烁落。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豌注,靈堂內(nèi)的尸體忽然破棺而出伤塌,到底是詐尸還是另有隱情,我是刑警寧澤轧铁,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布每聪,位于F島的核電站,受9級(jí)特大地震影響齿风,放射性物質(zhì)發(fā)生泄漏药薯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一救斑、第九天 我趴在偏房一處隱蔽的房頂上張望童本。 院中可真熱鬧,春花似錦脸候、人聲如沸穷娱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泵额。三九已至,卻和暖如春携添,著一層夾襖步出監(jiān)牢的瞬間嫁盲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工烈掠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羞秤,地道東北人缸托。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锥腻,于是被迫代替她去往敵國(guó)和親嗦董。 傳聞我的和親對(duì)象是個(gè)殘疾皇子母谎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容