<template> <div id="root"> <nav-con id="nav" ref="nav" :title="'他们送上了祝福'"></nav-con> <div class="container" :class="{'container-ipx': ipx,'container-iphone': iphone}" id="container" v-if="Object.keys(list).length > 0 && !isLoad"> <ul class="list" ref="list"> <li v-for="(i,index) in list" :key="index"> <img :src="i.avatar" alt="" class="avatar"> <div class="info"> <div class="info-wrap"> <p class="name">{{i.name}}</p> <div class="other"> <div class="sex" :class="i.sex == 'M' ? 'male' : 'female'"> <img :src="i.sex == 'M' ? 'male.png' : 'female.png'" alt="" class="sex-icon"> {{i.age}} </div> <div class="level" v-if="i.growup">Lv.{{i.growup.level}}</div> </div> <div class="time" v-if="i.msgtime">最后发言时间:{{i.msgtime | timeComputed}}天前</div> </div> <div class="greet" @click="(i.mid == mid_self || i.is_greet) ? '' : triggleConfirm(true,i.name,i.mid,index)" :class="(i.mid == moid_self || i.is_greet) ? 'greet-gray' : ''">问候</div> </div> </li> </ul> </div> <div class="container container-no" :class="{'container-ipx': ipx,'container-iphone': iphone}" v-if="Object.keys(list).length == 0 && !isLoad"> <div class="main"> <img src="../../assets/images/no-big.png" alt=""> </div> </div> <div class="container container-no" :class="{'container-ipx': ipx,'container-iphone': iphone}" v-if="isLoad"> <div class="momo-ing-loading"></div> </div> </div> </template> <script> import { iphoneAdapterByUA } from "../../utils/index"; import dao from "../../dao"; import navCon from '../../components/NavCon' export default { components: { navCon, }, data() { return { list: [], greet_name: '', index: 0, isLoad: true, greet_index: '', momoid_self: '', time: '' }; }, filters: { timeComputed(msgtime){ let stamp = Math.floor(new Date().getTime() / 1000) return Math.ceil((stamp - msgtime) / 86400) }, strDeal(str){ let res = str.substring(0,12) return res + '...' } }, methods: { getList(isAppend){ if(!isAppend){ this.isLoad = true } dao.getList({gid: this.gid,index: this.index,count: 100}, (res) => { this.isLoad = false if(res.ec == 0){ this.time = res.timesec if(isAppend){ this.list = this.list.concat(res.data.list) } else { this.momoid_self = res.data.momoid this.list = res.data.list this.$nextTick(() => { // 初始化监听window滚动事件 let container = document.getElementById('container') if(container){ container.addEventListener('scroll', this.handleScroll) } }) } this.remain = res.data.remain this.index = this.index + 100 } else { mm.ui.showMessage({ status: 1, message: res.em }); } }) }, handleScroll(){ let position_info = this.$refs.list.getBoundingClientRect(), distance = window.innerHeight - (position_info.top + position_info.height) if(distance >= -200 && this.remain == 1 && !this.isLoad){ this.index ++ this.getList(true) } }, triggleConfirm(bool,name,id,index){ if(bool){ this.greet_name = name this.greet_id = id this.greet_index = index } this.showConfirm = bool } }, created() { mm.ui.setPulldown({ type: 0 // Int: 1-允许下拉,0-不允许下拉 }) iphoneAdapterByUA(); this.ipx = window.DEVICE_OS && window.DEVICE_OS === 'iosx'; this.iphone = window.DEVICE_OS && window.DEVICE_OS === 'ios'; }, mounted() { // let url = location.href, // paramStr = url.split('?')[1], // paramArr = paramStr.split('&'), // obj = {} // for(let i in paramArr){ // let arr = paramArr[i].split('=') // obj[arr[0]] = arr[1] // } // this.gid = obj.scene_id this.getList(0,false) } }; </script> <style lang="postcss"> .container{ 100%; height: 100vh; overflow: scroll; background-color:#ffffff; box-sizing: border-box; padding-top: 82px; -webkit-overflow-scrolling: touch; .title{ font-size: 24px; color: #323333; font-weight: bold; margin: 38px 0 36px 40px; } .list{ padding-top: 13px; padding-bottom: 70px; li{ 100%; padding: 27px 28px; overflow: hidden; box-sizing: border-box; .avatar{ 140px; height: 140px; border-radius: 70px; margin-right: 24px; float: left; } .info{ float: left; height: 140px; calc(100% - 164px); /* margin-right: 30px; */ /* height: 100%; */ display: flex; flex-direction: row; justify-content: space-between; align-items: center; .info-wrap{ margin-right: 30px; calc(100% - 146px); height: 100%; } .name{ font-size: 32px; color: #323333; 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-top: 9px; } .other{ margin-top: 8px; overflow: hidden; &>div{ display: flex; justify-content: center; align-items: center; float: left; margin-right: 6px; font-size: 18px; } .sex{ padding: 0 8px; min- 60px; height: 24px; box-sizing: border-box; border-radius: 13px; color: #fff; font-size: 20px; float: left; line-height: 25px; .sex-icon{ margin-right: 2px; } } .male{ background: #4cd3ea; } .female{ background: #ff79b8; } .level{ min- 56px; height: 24px; padding: 0 10px; border-radius: 12px; color: #fff; padding: 0 10px; box-sizing: border-box; /* font-size: 18px; */ background: #e59b58; } } .time{ 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 26px; color: #aaa; margin-top: 10px; } } .greet{ 116px; height: 60px; border-radius: 30px; background: #3bb3fa; color: #fff; font-size: 28px; line-height: 60px; text-align: center; } .greet-gray{ background: #ebebeb !important; color: #cdcdcd !important; } } } } .container-ipx{ padding-top: 176px; } .container-iphone{ padding-top: 128px; } .container-no{ display: flex; justify-content: center; align-items: center; flex-direction: column; .main{ position: absolute; top: 39%; left: 50%; transform: translate(-50%,-50%); img{ 98px; display: block; margin: 0 auto; } p{ text-align: center; } .line1{ color: #323333; font-size: 32px; margin-top: 42px; margin-bottom: 10px; } .line2{ color: #aaa; font-size: 28px; } } } .confirm{ background: #fff; border-radius: 30px; padding: 98px 0 30px 0; box-sizing: border-box; display: flex; align-items: center; flex-direction: column; img{ height: 280px; } .greeat-text{ margin-top: 64px; .title{ font-size: 36px; color: #323333; text-align: center; } .msg{ 408px; font-size: 28px; color: #aaa; text-align: center; margin-top: 10px; } } .confirm-btn{ 400px; height: 100px; border-radius: 50px; color: #fff; background: #3bb3fa; margin-top: 80px; text-align: center; line-height: 100px; font-size: 28px; font-weight: bold; } .cancel{ color: #aaa; font-size: 28px; margin-top: 30px; text-align: center; } } .momo-breathing-loading { 120px; height: 120px; opacity: 0; animation: breathing 1.6s steps(1) infinite forwards; background-repeat: no-repeat; background-size: 480px 480px; background-image: url("oading.png"); } @keyframes breathing { 0% { opacity: 0.8; background-position: 0 0; } 6.25% { background-position: -120px 0; } 12.5% { background-position: -240px 0; } 18.75% { background-position: -360px 0; } 25% { background-position: 0 -120px; } 31.25% { background-position: -120px -120px; } 37.5% { background-position: -240px -120px; } 43.75% { background-position: -360px -120px; } 50% { background-position: 0 -240px; } 56.25% { background-position: -120px -240px; } 62.5% { background-position: -240px -240px; } 68.75% { background-position: -360px -240px; } 75% { background-position: 0 -360px; } 81.25% { background-position: -120px -360px; } 87.5% { background-position: -240px -360px; } 93.75% { opacity: 0.8; background-position: -360px -360px; } } </style>