美文网首页
基于vue2.x实现的即时通讯程序仿微信聊天11细节优化01

基于vue2.x实现的即时通讯程序仿微信聊天11细节优化01

作者: 风中凌乱的男子 | 来源:发表于2022-12-03 22:43 被阅读0次
    • 我们的项目基本功能基本都开发完了,下面就是优化项目的一些细节了
    • 第一个细节,我们来实现【在线头像变正常,不在线头像变灰色,并且可以实时变化】
    image.png
    • 目前是正常的颜色,但是他们都没在线,所以要先改成默认灰色
    • 打开代码src/views/home/index.vue
    • 找到头像设置变灰样式filter: grayscale(100%);
    .avatar {
       ::v-deep img {
         filter: grayscale(100%);
       }
    }
    
    • 这样头像就变灰了
    image.png
    • 如果想要变成有颜色的头像,直接将filter: grayscale(100%);设置成filter: grayscale(0%);即可
    • 这里要用到动态绑定class
    • 来测试下,判断索引让第一个好友头像变亮
    • 找到头像,动态绑定class,如下
    image.png
     :class="(index==0?'color':'')"
    
    • 然后在设置css样式
     .color{
              ::v-deep img {
                filter: grayscale(0%);
              }
            }
    
    • 这样第一个好友头像就会变亮
    image.png
    • 逻辑我们已经知道了,那怎么去真实判断好友在线不在线呢?
    • 其实在我们刚链接wocketIo服务器的时候,服务端给我们发送了一个在线好友的事件,我们只需监听下这个事件,拿到在线好友的id,然后去和你好友列表的好友id做对比就可以了
    image.png
    • 可以看到,服务端推送了一个users事件,下面是在线好友的对象
    • 第一步,我们先来监听users事件,在当前页面使用sockets方法函数
     sockets: {
        users: function (data) {
          console.log(data)
        },
      },
    
    image.png
    • 这样就打印出来了,在线好友的对象,下面是处理逻辑,【取对象的keys组成在线好友id数组】,使用到Object.keys()语法
    sockets: {
        users: function (data) {
          console.log(data)
          console.log(Object.keys(data))
        }
      },
    
    image.png
    • id数组拿到了,就对比下你的好友列表,如果id相等,就赋值你好友列表的那个人的的对象,改变isZaixian的值,比如isZaixian=1,判断条件再改成item.isZaixian ==1?'color':''
    :class="item.isZaixian == 1 ? 'color' : ''"
    
    • 下面是处理逻辑,判断好友在线把isZaixian改成1
     sockets: {
        users: function (data) {
          console.log(data)
          console.log(Object.keys(data))
          this.isZaixianArr = Object.keys(data)
        }
      },
    
     data() {
        return {
            isZaixianArr:[]
        }
    }
    
    • 然后在获取好友列表的方法了,在then回调后,去处理逻辑
    async getMyfriendsFun() {
          try {
            const res = await getMyfriends()
            let arr = res.data
            const idSet = new Set(this.isZaixianArr)
            //https://blog.csdn.net/yiyueqinghui/article/details/107773347
            const res1 = arr.map(o => ({ ...o, isZaixian: idSet.has(o._id) ? 1 : o.isZaixian }))
            this.list = res1
          } catch (error) {
            console.log(error)
          }
        },
    
    • 在好友上线的时候,刷新你的好友列表
    sockets: {
        users: function (data) {
          // console.log(data)
          // console.log(Object.keys(data))
          this.isZaixianArr = Object.keys(data)
          this.getMyfriendsFun()
        }
      },
    
    image.png
    • 这样就变亮了,但是还要处理下排序,在线的在上面
     async getMyfriendsFun() {
          try {
            const res = await getMyfriends()
            let arr = res.data
            console.log(this.isZaixianArr);
            const idSet = new Set(this.isZaixianArr)
            // https://blog.csdn.net/yiyueqinghui/article/details/107773347
            console.log(idSet);
            const res1 = arr.map(o => ({ ...o, isZaixian: idSet.has(o._id) ? 1 : o.isZaixian }))
            this.list = res1.sort(function (a, b) {
                return b.isZaixian - a.isZaixian
              })
          } catch (error) {
            console.log(error)
          }
        },
    

    相关文章

      网友评论

          本文标题:基于vue2.x实现的即时通讯程序仿微信聊天11细节优化01

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