Browse Source

粉丝页面加过渡动画

pull/19/head
zyronon 4 years ago
parent
commit
3cc7ba393e
  1. 2
      src/assets/less/custom.less
  2. 2
      src/components/Scroll.vue
  3. 61
      src/pages/message/Fans.vue
  4. 8
      src/pages/people/components/People.vue

2
src/assets/less/custom.less

@ -15,7 +15,7 @@
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
padding: 1rem 1.8rem; padding: 1rem 1.8rem;
border-radius: .3rem; border-radius: .3rem;
font-size: 1.4rem; font-size: 1.2rem;
white-space: nowrap; white-space: nowrap;
} }

2
src/components/Scroll.vue

@ -1,5 +1,5 @@
<template> <template>
<div class="scroll-wrapper" ref="wrapper" @scroll="scroll"> <div class="scroll-wrapper scroll" ref="wrapper" @scroll="scroll">
<div class="scroll-content"> <div class="scroll-content">
<slot></slot> <slot></slot>
</div> </div>

61
src/pages/message/Fans.vue

@ -6,44 +6,79 @@
</template> </template>
</BaseHeader> </BaseHeader>
<div class="content"> <div class="content">
<Scroll @pulldown="loadData">
<People v-for="item in friends.all" :people="item" mode="fans"></People> <People v-for="item in friends.all" :people="item" mode="fans"></People>
<div class="line mt1r"></div> <div class="line mt1r"></div>
<div class="title"> <div class="title">
<span>朋友推荐</span> <span>朋友推荐</span>
<img src="../../assets/img/icon/about-gray.png" alt=""> <img src="../../assets/img/icon/about-gray.png" alt="">
</div> </div>
<People v-for="item in friends.all" :people="item" mode="recommend"></People> <transition-group name="list-complete" tag="div" class="people-wrapper">
<People v-for="(item,index) in recommend"
:key="item.id"
:people="item"
@remove="remove(index)"
mode="recommend"/>
</transition-group>
<Loading :is-full-screen="false" v-if="loading"/>
</Scroll>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {mapState} from "vuex"; import {mapState} from "vuex";
import People from "../people/components/People"; import People from "../people/components/People";
import Scroll from "../../components/Scroll";
import Loading from "../../components/Loading";
export default { export default {
name: "Fans", name: "Fans",
components: { components: {
People Scroll,
}, People,
props: { Loading
modelValue: false
}, },
data() { data() {
return {} return {
loading: false,
recommend: []
}
}, },
computed: { computed: {
...mapState(['userinfo', 'friends']) ...mapState(['userinfo', 'friends'])
}, },
created() { created() {
this.recommend = this.$clone(this.friends.all)
},
methods: {
remove(index) {
this.$notice('将不会再为你推荐该用户')
this.recommend.splice(index, 1)
}, },
methods: {} async loadData() {
if (this.loading) return
this.loading = true
await this.$sleep(500)
this.loading = false
this.recommend = this.recommend.concat(this.friends.all)
}
}
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/assets/less/index"; @import "@/assets/less/index";
.list-complete-enter-from,
.list-complete-leave-to {
opacity: 0;
}
.list-complete-leave-active {
position: absolute;
}
.Fans { .Fans {
position: fixed; position: fixed;
left: 0; left: 0;
@ -56,7 +91,15 @@ export default {
.content { .content {
padding: @padding-page; padding: @padding-page;
padding-top: 6rem; padding-top: @header-height;
.scroll {
height: calc(100vh - @header-height);
}
.people-wrapper {
position: relative;
}
.title { .title {
margin-top: 1.5rem; margin-top: 1.5rem;

8
src/pages/people/components/People.vue

@ -1,9 +1,7 @@
<template> <template>
<div class="People"> <div class="People">
<img v-if="people.type === 6" src="../../../assets/img/icon/add-light.png" alt="" class="add"> <img :src="$imgPreview(people.avatar)" alt="" class="head-image pull-left">
<img v-else :src="$imgPreview(people.avatar)" alt="" class="head-image pull-left">
<div class="content"> <div class="content">
<template v-if="mode === 'fans'"> <template v-if="mode === 'fans'">
<div class="left"> <div class="left">
<div class="name">{{ people.name }}</div> <div class="name">{{ people.name }}</div>
@ -44,7 +42,7 @@
<div class="detail">可能认识的人</div> <div class="detail">可能认识的人</div>
</div> </div>
<div class="right"> <div class="right">
<div class="l-button ">移除</div> <div class="l-button" @click="$emit('remove')">移除</div>
<div class="l-button red">关注</div> <div class="l-button red">关注</div>
</div> </div>
</template> </template>
@ -122,6 +120,8 @@ export default {
} }
.People { .People {
transition: all 0.3s ease;
width: 100%;
height: 7rem; height: 7rem;
display: flex; display: flex;
align-items: center; align-items: center;

Loading…
Cancel
Save