92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

Vue開發聊天界面

2021-9-1    前端達人

Vue開發聊天界面(一)

最近業務里面有個需求就是開發一個類似微信的聊天頁面的H5,不需要像微信那么復雜,但是得有個樣子,弄了半天之后終于有了個樣子。決定寫個博客記一下這個過程,希望后續不會鴿

組件拆分

拆了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> 

這個是沒有調樣式的,只是為了自己嗨弄的,可能會很丑。
最后大概就是這樣的

Vue開發聊天界面(二)

我開發好了一個聊天的item,可以根據發送方和接收方來分別渲染一個item,這一章我把他們放在一個list的界面里面,讓一串item構成一個聊天頁面,并且這個聊天頁面能夠上下滾動。

其實我覺得很簡單,難點就2個。首先是滑動,這里用了better-scroll這個組件,可以在網上搜,挺好用的。另一個就是頁面布局的問題,寫點css還是沒得問題的。
首先去better-scroll的官網,按著他的核心邏輯抄一下。不詳細談了,總之來說,會有三層嵌套。我個人命名他們為: wrapper 和content和 item 這三層。
先弄一個json,當做會被填充的數據。

export const chatItems = [ { type:1, message:"fdaf地方撒風大撒風阿斯頓飛fd阿斯頓飛安德森發大水發大水發大水奮斗發的大撒風安德森 發大發大水發", from:1, timestamp: new Date() }, { type:1, message:"fdaf地方撒風大撒aa風阿斯頓飛ffdsafsfadsfadsfjlkjsadflkosdajfl asdjlffsaf水奮斗發的大撒風安德森 發大發大水發", from:1, timestamp: new Date() }, { type:1, message:"做緊d咩嘢?", from:2, timestamp: new Date() }, { type:1, message:"???", from:2, timestamp: new Date() }, ] 

然后開始寫vue的代碼

<template> <div class="scroll-wrapper" ref="scroll"> <div class="scroll-content"> <chat-item v-for="item in chatItems" :key="item.message" :type="item.type" :message="item.message" :timestamp="item.timestamp" :from="item.from" ></chat-item> </div> </div> </template> <script> import BScroll from "@better-scroll/core";
import MouseWheel from "@better-scroll/mouse-wheel"
import ChatItem from "./ChatItem";
import { chatItems } from "../../../assets/data/items";

BScroll.use(MouseWheel)

export default {
  name: "",
  data() {
    return {
      chatItems,
      bs: null
    };
  },
  components: {
    "chat-item": ChatItem,
  },

  mounted() {
    this.init();
  },
  beforeDestroy() {
    this.bs.destroy();
  },
  methods: {
    // better-scroll的代碼
    init() {
      this.bs = new BScroll(this.$refs.scroll, {
        scrollY: true, // 上下滾動
        click: true,   // 開啟點擊事件
        startY: document.querySelector(".scroll-wrapper").clientHeight - this.$refs.scroll.scrollHeight + 5 , // 初始高度
        mouseWheel: true,   // 鼠標滾動
        probeType: 2, // listening scroll hook
      });

      // 下面的不要也行,官網抄的順便留下來了
      this.bs.on("scroll", ({ y }) => {
        console.log("scrolling:" + y);
      });
      this.bs.on("scrollEnd", () => {
        console.log("scrollingEnd");
      });
    },
    clickHandler(item) {
      alert(item);
    },
  },
}; </script> <style lang="scss" scoped> .scroll-wrapper {
  height: calc(100% - 160px);  // 留一些空間給 打字的地方 和 header
  overflow: hidden;    // 非常之關鍵
} </style> 

最后是這個樣子的了

藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

文章來源:簡書。作者:Good_Nine9

分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

藍藍設計www.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務





日歷

鏈接

個人資料

藍藍設計的小編 http://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
日韩av电影在线播放| 亚洲精品乱码久久久久久金桔影视| 欧美性色xo影院| 97久久国产精品| 久久av红桃一区二区小说| 亚洲免费高清视频| 国产精品一区二区性色av| 国产一区红桃视频| 另类色图亚洲色图| 精品国产区一区二区三区在线观看| 日韩在线视频导航| 日本中文字幕久久看| 日韩在线观看免费av| 精品亚洲va在线va天堂资源站| 九九热视频这里只有精品| www.亚洲天堂| 久久国产加勒比精品无码| 欧美激情一区二区三区在线视频观看| 欧美日韩一区二区免费在线观看| 亚洲人成电影在线| 久久久久久久999精品视频| 精品国产精品自拍| 欧美视频免费在线观看| 国产一区二区黑人欧美xxxx| 欧美电影第一页| 91国内产香蕉| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲自拍偷拍区| 亚洲精品一区二区在线| 中文字幕日韩有码| 国产福利视频一区二区| 久久久国产精品视频| 国产欧美日韩精品在线观看| 国产精品成人一区二区三区吃奶| 亚洲自拍偷拍在线| 亚洲午夜精品视频| 亚洲 日韩 国产第一| 国产精品自在线| 亚洲一级黄色片| 日韩中文字幕在线视频播放| 成人444kkkk在线观看| 国产欧美韩国高清| 久久九九全国免费精品观看| 欧美精品免费看| 中文字幕日韩欧美在线| 亲爱的老师9免费观看全集电视剧| 国产视频一区在线| 欧美一级电影在线| 国产精品视频最多的网站| 亚洲国产精品久久| 日韩有码在线视频| 久久精彩免费视频| 色综合天天综合网国产成人网| 欧美日韩精品在线| 69av在线视频| 欧美午夜影院在线视频| 国产成人久久精品| 88xx成人精品| 日韩欧美一区二区三区久久| 欧美一级视频在线观看| 成人激情视频在线观看| 91视频国产高清| 亚洲女同性videos| 91美女片黄在线观看游戏| 日韩精品视频在线播放| 亚洲国产小视频在线观看| 97超碰国产精品女人人人爽| 亚洲精品久久久久久久久久久久久| 亚洲午夜女主播在线直播| 国内精品久久久久| 久久av红桃一区二区小说| 日本精品久久中文字幕佐佐木| 成人欧美一区二区三区黑人| 国产69久久精品成人| 精品国模在线视频| 激情亚洲一区二区三区四区| 亚洲精选中文字幕| 欧美激情欧美激情| 亚洲剧情一区二区| 亚洲精品456在线播放狼人| 久久九九有精品国产23| 青青a在线精品免费观看| 国产香蕉97碰碰久久人人| 日韩国产精品亚洲а∨天堂免| 国产精品成av人在线视午夜片| 成人黄色中文字幕| 精品久久久久久久久久ntr影视| 国产一区二区三区在线观看视频| 8090理伦午夜在线电影| 91精品国产高清久久久久久| 欧美激情xxxxx| 久久精品国产久精国产一老狼| 国产成人精品日本亚洲| 欧美成人精品不卡视频在线观看| 欧美激情亚洲自拍| 欧美日韩中文字幕日韩欧美| 亚洲91精品在线| 日韩欧美中文在线| 久久久精品电影| 久久伊人免费视频| 国产精品电影一区| 国产欧美久久一区二区| 在线视频欧美性高潮| 精品国内亚洲在观看18黄| 国产亚洲精品激情久久| 国产精品久久久久久中文字| 午夜欧美大片免费观看| 在线视频国产日韩| 九色精品美女在线| 精品国产老师黑色丝袜高跟鞋| 欧洲亚洲女同hd| 欧美在线一级va免费观看| 精品国偷自产在线视频99| 日韩av免费在线| 国产视频自拍一区| 国产精品扒开腿爽爽爽视频| 成人中心免费视频| 国产日韩精品电影| 国外成人在线直播| 日韩中文字幕在线免费观看| 国产精品久久久久久久app| 色综合伊人色综合网| 久久久日本电影| 欧美高清视频一区二区| 亚洲精品一区二区三区婷婷月| 欧美大尺度激情区在线播放| 日韩视频永久免费观看| 欧美国产日韩一区二区三区| 久久777国产线看观看精品| 日韩中文在线不卡| 亚洲欧美日韩在线高清直播| 国内精品视频在线| 色偷偷噜噜噜亚洲男人| 国产精品欧美一区二区三区奶水| 成人在线视频网站| 久久久中精品2020中文| 国产一区二区三区直播精品电影| 最近2019中文免费高清视频观看www99| 亚洲第一精品自拍| 久久99国产综合精品女同| 91精品国产综合久久香蕉| 国产日本欧美一区二区三区| 久久精品国产精品亚洲| 免费97视频在线精品国自产拍| 久久久久久久色| 国产精品自产拍高潮在线观看| 国产免费一区二区三区在线观看| 日韩av影视综合网| 欧美性受xxxx黑人猛交| 精品人伦一区二区三区蜜桃免费| 7m第一福利500精品视频| 日韩免费观看高清| 亚洲三级黄色在线观看| 欧美xxxwww| 日韩av片免费在线观看| 亚洲情综合五月天| 久久久久中文字幕| 亚洲字幕在线观看| 日韩精品极品在线观看| 超碰97人人做人人爱少妇| 久久久91精品国产| 国产人妖伪娘一区91| 日韩美女中文字幕| 精品久久久久久久久久久久久|