Vue開(kāi)發(fā)聊天界面(一)

Vue開(kāi)發(fā)聊天界面(一)

最近業(yè)務(wù)里面有個(gè)需求就是開(kāi)發(fā)一個(gè)類似微信的聊天頁(yè)面的H5,不需要像微信那么復(fù)雜,但是得有個(gè)樣子,弄了半天之后終于有了個(gè)樣子。決定寫(xiě)個(gè)博客記一下這個(gè)過(guò)程,希望后續(xù)不會(huì)鴿

組件拆分

1.1.png

拆了3個(gè),打字的,聊天item,聊天list。大概就這樣了。

其中聊天list 用了一個(gè)better-scroll這個(gè)第三方插件。

首先第一步就是開(kāi)發(fā)這個(gè)聊天item

聊天item 開(kāi)發(fā)

分析一下需求,別人發(fā)過(guò)來(lái)的和我們發(fā)過(guò)去的是兩個(gè)排版和樣式,但是不用單獨(dú)寫(xiě)兩個(gè),用個(gè)邏輯區(qū)分一下就可以了,也可以動(dòng)態(tài)綁定css什么的差別很小。

<template>
  <div class="record-wrapper">
    
    <!-- 時(shí)間,后續(xù)開(kāi)發(fā) --> 
    <div class="time"></div>
      
    <!-- 消息, msg通用樣式 msg-right/msg-left 區(qū)分排版左右 -->
    <div v-if="from == 1" class="msg msg-right">
       
      <div class="img-wrapper">
        <img class="img" :src="from1" />
      </div>
      
      <!-- 消息框, msg通用樣式 message-wrapper-right/left 區(qū)分聊天框顏色 -->
      <div class="message-wrapper message-wrapper-right">
        <div class="message">{{ message }}</div>
      </div>
      
    </div>
  </div>
</template>

這個(gè)是只有1邊的,邏輯就是在消息那邊加個(gè)v-if,判斷來(lái)源,也可以動(dòng)態(tài)綁定css

弄好以后就這樣

<template>
  <div class="record-wrapper">
    <div class="time"></div>
    <div v-if="from == 1" class="msg msg-right">
      <div class="img-wrapper">
        <img class="img" :src="from1" />
      </div>
      <div class="message-wrapper message-wrapper-right">
        <div class="message">{{ message }}</div>
      </div>
    </div>

    <div v-else class="msg msg-left">
      <div class="img-wrapper">
        <img class="img" :src="from2" />
      </div>
      <div class="message-wrapper message-wrapper-left">
        <div class="message">{{ message }}</div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "",
  props: {
    from: Number, // 1: 自己    2: 別人
    message: String,
    timestamp: Date,
  },
  data() {
    return {
      from1: require("../../../assets/imgs/from1.jpg"),
      from2: require("../../../assets/imgs/from2.jpg"),
    };
  },
};
</script>

個(gè)人覺(jué)得css還是比較重要的,這里用了sass來(lái)寫(xiě)。主要解決方案就是用一個(gè)display:flex配合上flex-direction: row-reverse讓頭像和消息左右排列

<style lang="scss" scoped>
.record-wrapper {
  margin: 4px;
  padding: 4px;
}
.time {
  text-align: center;
}
.msg {
  display: flex;
  flex-direction: row; 

  .message-wrapper {
    max-width: 220px;

    margin: 0px 10px 0px 10px;

    .message {
      margin: 8px;
      word-wrap: break-word; //英文換行
    }
  }

  .message-wrapper-left {
    background-color: lightslategray;
    border-radius: 0px 12px 12px 12px;
  }

  .message-wrapper-right {
    background-color: powderblue;
    border-radius: 12px 0px 12px 12px;
  }

  .img {
    flex: auto;
    height: 36px;
    width: 36px;
    border-radius: 8px;
  }
}
.msg-right {
  flex-direction: row-reverse;
}
.msg-left {
  flex-direction: row;
}
</style>

這個(gè)是沒(méi)有調(diào)樣式的,只是為了自己嗨弄的,可能會(huì)很丑。
最后大概就是這樣的咯

image.png

下一篇(2)點(diǎn)這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容