参考微信来写一个IM页面
因为项目需要IM客服功能,所以模仿微信的界面,绘制了一个IM页面,项目是基于ts+react。
页面如图:

下面是对接完成功能后的截图:

我自己感觉还可以,所以想分享出来,当然功能上需要自己去写,这里只是一个纯静态页,功能部分因为和项目业务耦合很紧密,所以不公开。
后面我会用这个页面写一个包含收发消息和群聊的小项目发布出来。
代码
index.tsx
import { Button, Input } from 'antd';import React from 'react';import styles from './im.css';import IconFont from '@/components/IconFont';const IM: React.FC = () => { return ( <div className={styles.container}> <div className={styles.chat_container}> <div className={styles.room_list}> <div className={styles.room_list_title}> <Input.Search placeholder="搜索" /> </div> <div className={styles.room}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.room_info}> <div className={styles.room_info_name}>用户1</div> <div className={styles.room_info_last_msg}>最后一条消息</div> </div> </div> <div className={styles.room}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.room_info}> <div className={styles.room_info_name}>用户2</div> <div className={styles.room_info_last_msg}>最后一条消息</div> </div> </div> <div className={styles.room}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.room_info}> <div className={styles.room_info_name}>用户3</div> <div className={styles.room_info_last_msg}>最后一条消息</div> </div> </div> </div> <div className={styles.chat_content_container}> <div className={styles.chat_content_title}>用户1</div> <div className={styles.chat_content}> <div className={styles.bubble_left}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.bubble_content}> <div className={styles.bubble_text}>你好</div> </div> </div> <div className={styles.bubble_right}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.bubble_content}> <div className={styles.bubble_text}>请问有什么能够帮到您?</div> </div> </div> <div className={styles.bubble_left}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.bubble_content}> <div className={styles.bubble_text}>来一则新闻</div> </div> </div> <div className={styles.bubble_right}> <img src="https://t14.baidu.com/it/u=3843289189,1985343162&fm=82&w=255&h=255&img.JPEG" /> <div className={styles.bubble_content}> <div className={styles.bubble_text}> 近日,有消息称,湖人队在赢得总冠军后,将向每位球员发放一笔奖金,金额高达23.1万美元。这笔奖金的发放引起了球迷们的热议,有人认为这是对球员们辛苦付出的回报,也有人认为这笔奖金的金额并不足以满足球员们的期望。 湖人队在本赛季中赢得了总冠军,这是球队历史上第17次夺得总冠军,也是詹姆斯职业生涯中第四次获得总冠军。在这次夺冠之后,湖人队向每位参与比赛的球员发放了一笔奖金。据报道,这笔奖金的金额为23.1万美元,每位球员都会收到这笔钱。 </div> </div> </div> </div> <div className={styles.chat_input}> <input></input> <Button shape={"circle"} icon={<IconFont type={"icon-send"}/>} /> </div> </div> </div> </div> );};export default IM;im.css
.container { display: flex; justify-content: center; align-items: center; width: 100%; box-sizing: border-box;}.chat_container { display: flex; background-color: #ffffff; width: 80%; max-height: 600px; border-radius: 10px; box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);}.room_list { width: 280px; height: 600px; display: flex; flex-direction: column; border-top-left-radius: 10px; border-bottom-left-radius: 10px; border-right: 1px solid #f1f1f1;}.room_list_title { width: 100%; height: 50px; display: flex; justify-content: center; align-items: center; border-top-left-radius: 10px; padding: 0 10px; background-color: #f1f1f1;}.room { width: 100%; height: 60px; display: flex; justify-content: start; align-items: center; padding: 0 10px;}.room img { width: 40px; height: 40px; border-radius: 4px; background-color: #c5c5c5; margin-right: 10px;}.room .room_info_name { margin-bottom: 4px;}.room .room_info_last_msg { color: #b6b5b5; font-size: 12px;}.room:hover { background-color: rgba(224, 224, 224, 0.4); cursor: pointer;}.chat_content_container { width: 100%; display: flex; flex-direction: column; align-items: center; justify-content: space-between;}.chat_content_title { width: 100%; height: 50px; display: flex; justify-content: center; align-items: center; font-size: 18px; background-color: #f1f1f1; border-top-right-radius: 10px;}.chat_content { flex: 1; width: 100%; max-height: 100%; padding: 0 20px; overflow-y: scroll;}.chat_content .bubble_left { display: flex; justify-content: flex-start; align-items: start; margin: 10px 0;}.chat_content .bubble_right { display: flex; justify-content: flex-start; flex-direction: row-reverse; align-items: start; margin: 10px 0;}.chat_content .bubble_left .bubble_content { background-color: #f1f1f1; padding: 10px 20px; border-radius: 10px;}.chat_content .bubble_right .bubble_content { background-color: #86ed56; padding: 10px 20px; border-radius: 10px;}.bubble_content { display: flex; flex-wrap: wrap; max-width: 35%;}.chat_content img { width: 40px; height: 40px; border-radius: 4px; background-color: #c5c5c5; margin: 0 10px;}.chat_input { width: 100%; height: 60px; display: flex; justify-content: start; align-items: center; background-color: white; padding: 0 40px; border-bottom-right-radius: 10px; border-top: 1px solid #ebebeb;}.chat_input input { height: 40px; border-radius: 10px; border: 1px solid #f4f4f4; padding: 0 10px; background-color: #f4f4f4; margin-right: 20px; flex: 1;}::-webkit-scrollbar { width: 10px;}::-webkit-scrollbar-track { background: white;}::-webkit-scrollbar-thumb { background: #f1f1f1;}::-webkit-scrollbar-thumb:hover { background: #dddddd;}