美文网首页前端开发那些事儿
Vue开发聊天界面(一)

Vue开发聊天界面(一)

作者: Good_Nine9 | 来源:发表于2020-09-15 14:48 被阅读0次

    Vue开发聊天界面(一)

    最近业务里面有个需求就是开发一个类似微信的聊天页面的H5,不需要像微信那么复杂,但是得有个样子,弄了半天之后终于有了个样子。决定写个博客记一下这个过程,希望后续不会鸽

    组件拆分

    1.1.png

    拆了3个,打字的聊天item聊天list。大概就这样了。

    其中聊天list 用了一个better-scroll这个第三方插件。

    首先第一步就是开发这个聊天item

    聊天item 开发

    分析一下需求,别人发过来的和我们发过去的是两个排版和样式,但是不用单独写两个,用个逻辑区分一下就可以了,也可以动态绑定css什么的差别很小。

    <template>
      <div class="record-wrapper">
        
        <!-- 时间,后续开发 --> 
        <div class="time"></div>
          
        <!-- 消息, msg通用样式 msg-right/msg-left 区分排版左右 -->
        <div v-if="from == 1" class="msg msg-right">
           
          <div class="img-wrapper">
            <img class="img" :src="from1" />
          </div>
          
          <!-- 消息框, msg通用样式 message-wrapper-right/left 区分聊天框颜色 -->
          <div class="message-wrapper message-wrapper-right">
            <div class="message">{{ message }}</div>
          </div>
          
        </div>
      </div>
    </template>
    

    这个是只有1边的,逻辑就是在消息那边加个v-if,判断来源,也可以动态绑定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>
    

    个人觉得css还是比较重要的,这里用了sass来写。主要解决方案就是用一个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>
    

    这个是没有调样式的,只是为了自己嗨弄的,可能会很丑。
    最后大概就是这样的咯

    image.png

    下一篇(2)点这里

    相关文章

      网友评论

        本文标题:Vue开发聊天界面(一)

        本文链接:https://www.haomeiwen.com/subject/kpkfyktx.html