- 我们的项目基本功能基本都开发完了,下面就是优化项目的一些细节了
- 第一个细节,我们来实现【在线头像变正常,不在线头像变灰色,并且可以实时变化】
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':'')"
.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)
}
},
网友评论