Vue3 + Pinia + Vite5 仿抖音,完全度90% . Vue3 + Pinia + Vite5 imitate TikTok with 90% completeness
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1245 lines
38 KiB

<template>
<div class="Search">
<div class="header">
<back mode="light" @click="$back" class="mr1r"></back>
<BSearch placeholder="搜索用户名字/抖音号"
:isShowRightText="true"
rightTextColor="white"
@notice="$no"
>
<img class="scan" src="../../assets/img/icon/scan-gray.png" @click.stop="$nav('/scan')">
</BSearch>
</div>
<div class="content">
<div class="history">
<div class="row" v-for="(item,index) in lHistory">
<div class="left">
<img src="../../assets/img/icon/home/time-white.png" alt="">
<span> {{ item }}</span>
</div>
<back img="close" mode="gray" @click="history.splice(index,1)" scale=".7"></back>
</div>
<div v-if="history.length>2" class="history-expand" @click="toggle">
{{ isExpand ? '清除全部搜索记录' : '展开全部' }}
</div>
</div>
<div class="guess">
<div class="title">
<div class="left">猜你想搜</div>
<div class="right">
<img class="scan" src="../../assets/img/icon/home/refresh-gray.png" @click.stop="refresh">
<span>换一换</span>
</div>
</div>
<div class="keys">
<div class="key" v-for="(item,index ) in randomGuess">
<span class="desc">{{ item.name }}</span>
<img v-if="item.type === 1" src="../../assets/img/icon/home/new.webp" alt="" class="type">
</div>
</div>
</div>
<div class="rank-list">
<div class="indicator">
<div class="tab" :class="{active:slideIndex === 0}" @click="slideIndex = 0">抖音热榜</div>
<div class="tab" :class="{active:slideIndex === 1}" @click="slideIndex = 1">直播榜</div>
<div class="tab" :class="{active:slideIndex === 2}" @click="slideIndex = 2">音乐榜</div>
<div class="tab" :class="{active:slideIndex === 3}" @click="slideIndex = 3">品牌榜</div>
</div>
<!-- TODO 滚动到下面的时候,应该禁止slide-move,因为第个slideitem的高度不一样,高的切到矮的,会闪屏-->
<SlideRowList v-model:active-index="slideIndex" :style="slideListHeight">
<SlideItem>
<div class="slide0" ref="slide0">
<div class="l-row">
<div class="rank-wrapper">
<img src="../../assets/img/icon/home/to-top-yellow.png" class="rank">
</div>
<div class="right">
<div class="center">
<div class="desc">专题嘻嘻嘻哈哈瞄瞄嘻嘻嘻</div>
</div>
</div>
</div>
<div class="l-row" v-for="(item,index) in hotRankList">
<div class="rank-wrapper">
<img v-if="index === 0" src="../../assets/img/icon/home/hot1.webp" alt="" class="rank">
<img v-else-if="index === 1" src="../../assets/img/icon/home/hot2.webp" alt="" class="rank">
<img v-else-if="index === 2" src="../../assets/img/icon/home/hot3.webp" alt="" class="rank">
<div v-else class="rank">{{ index + 1 }}</div>
</div>
<div class="right">
<div class="center">
<div class="desc">{{ item.name }}</div>
<img v-if="item.type === 1" src="../../assets/img/icon/home/new.webp" alt="" class="type">
<img v-if="item.type === 0" src="../../assets/img/icon/home/hot.webp" alt="" class="type">
</div>
<div class="count">999w</div>
</div>
</div>
<div class="more" @click="$no">查看完整热点榜 ></div>
</div>
</SlideItem>
<SlideItem>
<div class="slide1" ref="slide1">
<div class="l-row" v-for="(item,index) in liveRankList">
<div class="rank-wrapper">
<div class="rank" :class="{top:index<3}">{{ index + 1 }}</div>
</div>
<div class="right">
<div class="center">
<div class="avatar-wrapper">
<img src="../../assets/img/icon/avatar/1.png" alt="" class="avatar">
</div>
<div class="desc">{{ item.name }}</div>
<div v-if="item.type === 0" class="live-type">
<img class="type1" src="../../assets/img/icon/home/pk.webp">
<span>PK</span>
</div>
<div v-if="item.type === 1" class="live-type">
<img class="type2" src="../../assets/img/icon/home/redpack.png">
<span>红包</span>
</div>
</div>
<div class="count">999w人气</div>
</div>
</div>
<div class="more" @click="$no">查看完整直播榜 ></div>
</div>
</SlideItem>
<SlideItem>
<div class="slide2" ref="slide2">
<div class="l-row" v-for="(item,index) in musicRankList" @click="$nav('/home/music-rank-list')">
<div class="rank-wrapper">
<div class="rank" :class="{top:index < 3}">{{ index + 1 }}</div>
</div>
<div class="right">
<div class="center">
<div class="avatar-wrapper">
<img v-lazy="$imgPreview(item.cover)" alt="" class="avatar">
</div>
<div class="desc">{{ item.name }}</div>
</div>
<div class="count">
<img src="../../assets/img/icon/home/hot-gray.png" alt="">
<span>{{ $likeNum(item.use_count) }}</span>
</div>
</div>
</div>
<div class="more" @click="$nav('/home/music-rank-list')">查看完整音乐榜 ></div>
</div>
</SlideItem>
<SlideItem>
<div class="slide3" ref="slide3">
<div class="slide4-wrapper">
<div class="brands">
<div class="brand"
@click="toggleKey(key)"
:class="{active:key === selectBrandKey}"
v-for="key in Object.keys(brandRankList)">
{{ key }}
</div>
</div>
<div class="l-row" v-for="(item,index) in selectBrandList">
<div class="rank-wrapper">
<div class="rank" :class="{top:index < 3}">{{ index + 1 }}</div>
</div>
<div class="right">
<div class="center">
<div class="avatar-wrapper" :class="item.living ? 'living':''">
<div class="avatar-out-line"></div>
<img v-lazy="$imgPreview(item.logo)" alt="" class="avatar">
<!-- <img :src="item.logo" class="avatar">-->
</div>
<div class="desc">{{ item.name }}</div>
</div>
<div class="count">
<img src="../../assets/img/icon/home/hot-gray.png" alt="">
<span>{{ $likeNum(item.hot_count) }}</span>
</div>
</div>
</div>
<div class="more" @click="$no">查看完整品牌榜 ></div>
</div>
<SlideRowList
:autoplay="true"
indicatorType="bullets"
>
<SlideItem>
<div class="ad">AD1</div>
</SlideItem>
<SlideItem>
<div class="ad">AD2</div>
</SlideItem>
<SlideItem>
<div class="ad">AD3</div>
</SlideItem>
<SlideItem>
<div class="ad">AD4</div>
</SlideItem>
<SlideItem>
<div class="ad">AD5</div>
</SlideItem>
<SlideItem>
<div class="ad">AD6</div>
</SlideItem>
<SlideItem>
<div class="ad">AD7</div>
</SlideItem>
<SlideItem>
<div class="ad">AD8</div>
</SlideItem>
</SlideRowList>
</div>
</SlideItem>
</SlideRowList>
</div>
</div>
</div>
</template>
<script>
import Search from "../../components/Search";
import _ from 'lodash'
import Dom from "../../utils/dom";
import {nextTick} from "vue";
export default {
name: "SearchPage",
components: {
'BSearch': Search
},
data() {
return {
isExpand: false,
history: [
'历史记录1',
'历史记录2',
'历史记录3',
'历史记录4',
'历史记录5',
'历史记录6',
'历史记录7',
'历史记录8',
'历史记录9',
'历史记录10',
],
guess: [
{name: '少年透明人', type: -1},
{name: '花呗分批次接入征信', type: -1},
{name: '新娘婚礼上跪求悔婚', type: -1},
{name: '当你想换iPhone13时', type: -1},
{name: 'Ling OS灵犀系统', type: -1},
{name: '桑塔纳2022款', type: -1},
{name: '透明人', type: -1},
{name: '恒大集团凌晨发公告', type: 0},
{name: '2022款日产GT-R', type: 1},
{name: '四川双一流大学名单', type: -1},
{name: '一公司放假通知走红', type: -1},
{name: '成都新全优教育倒闭', type: -1},
{name: '当代女生社交现状', type: -1},
{name: '恒大集团凌晨发公告', type: -1},
],
randomGuess: [],
hotRankList: [
{name: '国内手机厂商最大的软肋就是 android 系统!', type: 0},
{name: '大家的官网订单现在什么状态', type: -1},
{name: '库克不愧是供应链管理大师, A15 一鱼三吃', type: -1},
{name: '找到了 iOS 被怀疑淘宝窃听的可能原因', type: 1},
{name: 'rebase 还是 merge?', type: -1},
{name: '十一出游西安,西安的大佬们能给些建议吗?', type: 0},
{name: '领克 01,燃油还是 phev?', type: 1},
{name: '为什么要抢购新手机呢?', type: -1},
{name: '拼多多官方处理问题跟京东真的没法比', type: -1},
{name: '百度输入法 VS 搜狗输入法', type: -1},
{name: '关于 ios 上 app 检测代理', type: 0},
{name: 'iPadmini6 到货以后,要不要换路由器', type: 1},
{name: '现在有推荐的同步盘么?', type: -1},
{name: '大哥们, mac 电池鼓包你们都咋修的。。', type: -1},
{name: '发现一个特别赞的同步盘方案 Resilio Sync', type: -1},
{name: '得鼻炎了, 说下症状和应对吧', type: 1},
{name: '打翻了一瓶矿泉水在 MacBook Pro 上,赶紧用鼠标关机了,等多久可以尝试开机?', type: 0},
{name: '筋膜枪哪个牌子好啊?', type: -1},
{name: '最近在学理财小白基础知识,然后请教大家办哪个证券账户比较好呀', type: -1},
{name: '有没有长期使用 sidecar 功能的 V 友,这个东西长期的稳定性如何?', type: 0},
{name: '犹豫是否要年年焕新', type: -1},
{name: '请问如何在国内给 AppStore HK/TW 区充值.', type: 0},
{name: '最近感觉一个妹子不错,不过我比她大 5 岁', type: 1},
{name: '12mini 1 月 20 号购入,现在电池健康 92%,正常现象?', type: -1},
{name: '现在新 iphone12/128 啥价格比较合适啊?', type: -1},
{name: 'iOS 15 不改地区就能看到全球所有交通卡', type: -1},
{name: '求推荐拼车/打车软件', type: 1},
{name: '如何比较方便的杀死 nohup 起的进程及其所有子进程?', type: 0},
{name: '换了新工作,好像又掉坑里了。', type: 0},
{name: '有没有这样一款记账软件?', type: 1},
],
liveRankList: [
{name: '毛三岁(收女徒弟)', type: 0},
{name: '广州表哥', type: -1},
{name: '一只扬儿', type: -1},
{name: '沈酒', type: -1},
{name: '客家婷子', type: 1},
{name: '三斤.(9237)', type: -1},
{name: '虎哥说车', type: -1},
{name: '爆笑三江锅(永不言败)', type: -1},
{name: '子豪(尊师胜仔)5点扛把子', type: 1},
{name: '琪琪', type: -1},
{name: '战神土牛(征战全网)', type: 0},
{name: '小鲁班下午5点直播', type: -1},
{name: '惠子ssica', type: -1},
{name: '大狼狗郑建鹏&言真夫妇', type: -1},
{name: '一条小团团', type: -1},
{name: '高火火', type: -1},
{name: '郭聪明', type: -1},
{name: '罗永浩', type: 1},
{name: '陈赫', type: 0},
{name: '摩登兄弟', type: -1},
{name: '浪老师', type: -1},
{name: '陈死狗cnh', type: -1},
{name: '杨驴驴y', type: -1},
{name: 'imxiaoxin', type: 0},
{name: '丶才子欧巴', type: -1},
{name: '旭旭宝宝', type: -1},
{name: 'pigff', type: -1},
{name: '正经人令北', type: -1},
{name: '雨神丶', type: -1},
{name: '智勋勋勋勋', type: 0},
],
musicRankList: [
{
name: '龙卷风',
"mp3": "http://im5.tongbu.com/rings/singerring/zt_uunGo_1/5605.mp3",
cover: require('../../assets/img/music-cover/1.png'),
author: '周杰伦',
duration: 99,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '爱在西元前',
mp3: 'https://m3.8js.net:99/1916/501204165042405.mp3',
cover: require('../../assets/img/music-cover/2.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '蜗牛',
mp3: 'http://im5.tongbu.com/rings/singerring/zt_uunGo_1/3684.mp3',
cover: require('../../assets/img/music-cover/3.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '半岛铁盒',
mp3: 'https://m3.8js.net:99/2016n/46/94745.mp3',
cover: require('../../assets/img/music-cover/4.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '轨迹',
mp3: 'https://m3.8js.net:99/1832/411204324135934.mp3',
cover: require('../../assets/img/music-cover/5.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '七里香',
mp3: 'https://m3.8js.net:99/2016n/14/53717.mp3',
cover: require('../../assets/img/music-cover/6.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '发如雪',
mp3: 'https://m3.8js.net:99/2014/211204142150965.mp3',
cover: require('../../assets/img/music-cover/7.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '霍元甲',
mp3: 'https://m3.8js.net:99/1921/261204212643140.mp3',
cover: require('../../assets/img/music-cover/8.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '千里之外(周杰伦/费玉清)',
mp3: 'http://im5.tongbu.com/rings/singerring/zt_uunGo_1/121.mp3',
cover: require('../../assets/img/music-cover/9.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '菊花台',
mp3: 'http://im5.tongbu.com/rings/singerring/zt_uunGo_1/2022.mp3',
cover: require('../../assets/img/music-cover/10.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '不能说的秘密',
mp3: 'http://im5.tongbu.com/rings/singerring/zt_uunGo_1/165.mp3',
cover: require('../../assets/img/music-cover/11.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '牛仔很忙',
mp3: 'http://im5.tongbu.com/rings/singerring/zt_uunGo_1/219.mp3',
cover: require('../../assets/img/music-cover/12.png'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '给我一首歌的时间',
mp3: 'https://m3.8js.net:99/1938/041204380445445.mp3',
cover: require('../../assets/img/music-cover/13.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '烟花易冷',
mp3: 'https://m3.8js.net:99/1828/051204280535192.mp3',
cover: require('../../assets/img/music-cover/14.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '惊叹号',
mp3: 'https://m3.8js.net:99/20111103/150.mp3',
cover: require('../../assets/img/music-cover/15.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '明明就',
mp3: 'https://m3.8js.net:99/2016n/27/96537.mp3',
cover: require('../../assets/img/music-cover/16.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '算什么男人',
mp3: 'https://m3.8js.net:99/20150107/429.mp3',
cover: require('../../assets/img/music-cover/17.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
{
name: '告白气球',
mp3: 'https://m3.8js.net:99/20161016/481.mp3',
cover: require('../../assets/img/music-cover/18.jpg'),
author: '周杰伦',
duration: 60,
use_count: 37441000,
is_collect: false,
is_play: false,
},
],
brandRankList: {
'汽车': [
{
name: '五菱汽车',
logo: 'https://www.wuling.com/favicon.ico',
hot_count: 1395,
living: false
},
{
name: '宝马',
logo: 'https://www.bmw.com.cn/etc/clientlibs/digitals2/clientlib/media/img/BMW_Grey_Logo.svg',
hot_count: 1395,
living: true
},
{
name: '吉利汽车',
logo: 'http://www.cargc.com/uploads/allimg/200828/1401364511-2.jpg',
hot_count: 1395,
living: false
},
{
name: '一汽大众-奥迪',
logo: 'https://www.audi.cn/bin/nemo.static.20210916063431/cms4i-nemo/assets/icons/favicon/favicon-v4.ico',
hot_count: 1395,
living: false
},
{
name: '一汽-大众',
logo: 'https://www.vw.com.cn/favicon.ico',
hot_count: 1395,
living: false
},
],
'手机': [
{
name: '华为',
logo: 'https://isesglobal.com/wp-content/uploads/2021/01/Huawei.jpg',
hot_count: 1395,
living: false
},
{
name: '小米',
logo: 'https://s01.mifile.cn/favicon.ico',
hot_count: 1395,
living: true
},
{
name: 'vivo',
logo: 'http://wwwstatic.vivo.com.cn/vivoportal/web/dist/img/common/favicon_ecf768e.ico',
hot_count: 1395,
living: false
},
{
name: 'oppo',
logo: 'https://code.oppo.com/etc.clientlibs/global-site/clientlibs/clientlib-design/resources/icons/favicon.ico',
hot_count: 1395,
living: false
},
{
name: '三星',
logo: 'https://www.samsung.com/etc.clientlibs/samsung/clientlibs/consumer/global/clientlib-common/resources/images/Favicon.png',
hot_count: 1395,
living: false
},
],
'美妆': [
{
name: '巴黎欧莱雅',
logo: 'https://oap-cn-prd-cd.e-loreal.cn/-/media/project/loreal/brand-sites/oap/apac/cn/identity/image-2020-06-19-20-48-00-996.png',
hot_count: 1395,
living: false
},
{
name: '花西子',
logo: 'https://www.haoyunbb.com/img/allimg/210607/001I43462-0.png',
hot_count: 1395,
living: false
},
{
name: '完美日记',
logo: 'http://5b0988e595225.cdn.sohucs.com/images/20200412/9c6caafca79e438f98d98d3986ebce4d.png',
hot_count: 1395,
living: false
},
{
name: '雅诗兰黛',
logo: 'https://vipyidiancom.oss-cn-beijing.aliyuncs.com/vipyidian.com/article/1_150918143107_1.png',
hot_count: 1395,
living: false
},
{
name: 'COLORKEY珂拉琪',
logo: 'https://www.80wzbk.com/uploads/logo/20210129/20210129104015_541.jpg',
hot_count: 1395,
living: false
},
]
},
selectBrandKey: '汽车',
selectBrandKeyIndex: 0,
slideIndex: 0,
timer: null,
slideItemHeight: null
}
},
computed: {
lHistory() {
if (this.isExpand) {
if (this.history.length > 10) return this.history.slice(0, 10)
return this.history
} else {
if (this.history.length > 2) return this.history.slice(0, 2)
return this.history
}
},
selectBrandList() {
return this.brandRankList[this.selectBrandKey]
},
brandListKeys() {
return Object.keys(this.brandRankList)
},
slideListHeight() {
return {height: this.slideItemHeight ? (this.slideItemHeight + 'px') : '100%'}
}
},
watch: {
slideIndex: {
handler(newVal) {
nextTick(() => {
// console.log(this.$refs[`slide${newVal}`])
this.slideItemHeight = new Dom(`.slide${newVal}`).css('height')
// console.log(this.slideItemHeight)
this.slideItemHeight = parseFloat(this.slideItemHeight) + 50
})
if (newVal === 3) {
this.timer = setInterval(() => {
if (this.selectBrandKeyIndex === this.brandListKeys.length - 1) {
this.selectBrandKeyIndex = 0
} else {
this.selectBrandKeyIndex++
}
this.selectBrandKey = this.brandListKeys[this.selectBrandKeyIndex]
}, 3000)
} else {
clearInterval(this.timer)
}
},
immediate: true
}
},
created() {
this.history = this.history.reverse()
this.refresh()
},
methods: {
toggleKey(key) {
this.selectBrandKey = key
clearInterval(this.timer)
},
refresh() {
this.randomGuess = _.sampleSize(this.guess, 6)
},
toggle() {
if (this.isExpand) {
this.$showSimpleConfirmDialog('是否清空历史记录?', () => {
this.history = []
}, null, '确定', '取消')
} else {
this.isExpand = true
}
}
}
}
</script>
<style scoped lang="less">
@import "../../assets/less/index";
.Search {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
overflow: auto;
color: white;
font-size: 1.4rem;
.type {
display: flex;
align-items: center;
justify-content: center;
height: 1.6rem;
width: 1.6rem;
font-size: 1.2rem;
margin-left: .5rem;
border-radius: .2rem;
&.hot {
background: @primary-btn-color;
}
&.new {
background: rgb(186, 51, 226);
}
}
.header {
z-index: 4;
background: @main-bg;
height: 6rem;
font-size: 1.4rem;
padding: 0 @padding-page;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid @line-color;
position: fixed;
width: 100vw;
box-sizing: border-box;
top: 0;
.search-ctn {
flex: 1;
}
.scan {
transform: scale(2);
height: 1rem;
width: 1rem;
}
}
.content {
padding-top: 6rem;
.history {
.row {
min-height: 4rem;
}
.history-expand {
text-align: center;
padding: 1rem;
color: @second-text-color;
}
}
.guess {
padding: 0 @padding-page;
.title {
font-size: 1.4rem;
padding: 1rem 0;
display: flex;
align-items: center;
justify-content: space-between;
.right {
color: @second-text-color;
display: flex;
align-items: center;
img {
margin-right: .5rem;
width: 1.3rem;
height: 1.3rem;
}
}
}
.keys {
font-size: 1.6rem;
display: flex;
flex-wrap: wrap;
.key {
box-sizing: border-box;
padding: .8rem 0;
width: 49%;
display: flex;
align-items: center;
.desc {
max-width: 80%;
font-size: 1.4rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
}
.rank-list {
.indicator {
padding: 1.5rem;
display: flex;
align-items: center;
font-size: 1.4rem;
.tab {
color: @second-text-color;
margin-right: 2rem;
&.active {
transform: scale(1.2);
color: white;
}
&:nth-child(1) {
&.active {
font-weight: bold;
background: linear-gradient(to right, rgb(255, 165, 71), rgb(218, 77, 115));
-webkit-background-clip: text;
color: transparent;
}
}
}
}
.slide0 {
box-sizing: border-box;
margin: 0 @padding-page 5rem @padding-page;
background: linear-gradient(to right, rgb(32, 29, 36), rgb(50, 29, 38));
padding: @padding-page;
border-radius: 1rem;
.l-row {
font-size: 1.4rem;
display: flex;
margin-bottom: 1.6rem;
align-items: center;
color: @second-text-color;
.rank-wrapper {
display: flex;
align-items: center;
.rank {
width: 1.8rem;
height: 1.8rem;
line-height: 1.8rem;
text-align: center;
margin-right: 1.5rem;
}
}
.right {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.center {
width: calc(100vw - 14rem);
box-sizing: border-box;
//padding: 0 1rem;
//flex: 1;
display: flex;
align-items: center;
font-size: 1.4rem;
color: white;
.desc {
max-width: 85%;
font-size: 1.4rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
.count {
font-size: 1.2rem;
}
}
}
}
.slide1 {
box-sizing: border-box;
margin: 0 @padding-page 5rem @padding-page;
background: rgb(20, 22, 34);
border: 1px solid rgba(31, 34, 52, 0.5);
padding: @padding-page;
border-radius: 1rem;
.l-row {
font-size: 1.4rem;
display: flex;
margin-bottom: 1rem;
align-items: center;
color: @second-text-color;
&:active {
opacity: .5;
}
.rank-wrapper {
display: flex;
align-items: center;
.rank {
width: 1.8rem;
height: 1.8rem;
line-height: 1.8rem;
text-align: center;
margin-right: 1.5rem;
&.top {
color: yellow;
}
}
}
.right {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.center {
width: calc(100vw - 16rem);
box-sizing: border-box;
//padding: 0 1rem;
//flex: 1;
display: flex;
align-items: center;
font-size: 1.4rem;
color: white;
.avatar-wrapper {
@width: 3.5rem;
margin-right: 1rem;
display: flex;
align-items: center;
justify-content: center;
width: @width;
height: @width;
border-radius: 50%;
background: @primary-btn-color;
.avatar {
width: @width - 0.3;
border-radius: 50%;
padding: .1rem;
background: black;
}
}
.desc {
max-width: 55%;
font-size: 1.4rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.live-type {
height: 2.2rem;
padding: 0 .5rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
color: @second-text-color;
margin-left: .5rem;
border-radius: .2rem;
background: @second-btn-color-tran;
.type2 {
margin-right: .2rem;
width: 1rem;
height: 1rem;
}
.type1 {
margin-right: .2rem;
width: 1.5rem;
height: 1rem;
}
}
}
.count {
font-size: 1.2rem;
}
}
}
}
.slide2 {
box-sizing: border-box;
margin: 0 @padding-page 5rem @padding-page;
background: rgb(20, 22, 34);
border: 1px solid rgba(31, 34, 52, 0.5);
padding: @padding-page;
border-radius: 1rem;
.l-row {
font-size: 1.4rem;
display: flex;
margin-bottom: 1rem;
align-items: center;
color: @second-text-color;
&:active {
opacity: .5;
}
.rank-wrapper {
display: flex;
align-items: center;
.rank {
width: 1.8rem;
height: 1.8rem;
line-height: 1.8rem;
text-align: center;
margin-right: 1.5rem;
&.top {
color: yellow;
}
}
}
.right {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.center {
width: calc(100vw - 15rem);
box-sizing: border-box;
//padding: 0 1rem;
//flex: 1;
display: flex;
align-items: center;
font-size: 1.4rem;
color: white;
.avatar-wrapper {
margin-right: 1rem;
.avatar {
width: 3rem;
height: 3rem;
border-radius: .2rem;
}
}
.desc {
max-width: 95%;
font-size: 1.4rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
.count {
display: flex;
align-items: center;
font-size: 1.2rem;
img {
margin-right: .2rem;
width: 1.5rem;
height: 1.5rem;
}
}
}
}
}
.slide3 {
box-sizing: border-box;
margin: 0 @padding-page 5rem @padding-page;
border-radius: 1rem;
.slide4-wrapper {
padding: .5rem @padding-page;
.brands {
color: @second-text-color;
font-size: 1.2rem;
margin-bottom: 1.5rem;
display: flex;
.brand {
border-radius: .2rem;
margin-right: 1rem;
padding: .5rem 1rem;
background: @second-btn-color-tran;
&.active {
color: white;
background: @second-btn-color;
}
}
}
.l-row {
font-size: 1.4rem;
display: flex;
margin-bottom: 1rem;
align-items: center;
color: @second-text-color;
&:active {
opacity: .5;
}
.rank-wrapper {
display: flex;
align-items: center;
.rank {
width: 1.8rem;
height: 1.8rem;
line-height: 1.8rem;
text-align: center;
margin-right: 1.5rem;
&.top {
color: yellow;
}
}
}
.right {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.center {
width: calc(100vw - 15rem);
box-sizing: border-box;
//padding: 0 1rem;
//flex: 1;
display: flex;
align-items: center;
font-size: 1.4rem;
color: white;
.avatar-wrapper {
@width: 3.5rem;
margin-right: 1rem;
&.living {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: @width;
height: @width;
border-radius: 50%;
background: @primary-btn-color;
.avatar-out-line {
width: @width;
height: @width;
position: absolute;
background: transparent;
border-radius: 50%;
border: .2rem solid @primary-btn-color;
animation: avatar-out-line 1s infinite;
@keyframes avatar-out-line {
from {
padding: 0;
}
to {
opacity: 0;
padding: .2rem;
}
}
}
.avatar {
padding: .1rem;
animation: avatar 1s infinite alternate;
}
}
.avatar {
position: relative;
z-index: 2;
width: @width - 0.3;
height: @width - 0.3;
border-radius: 50%;
background: black;
box-sizing: border-box;
@keyframes avatar {
from {
padding: .1rem;
}
to {
padding: .2rem;
}
}
}
}
.desc {
max-width: 95%;
font-size: 1.4rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
.count {
display: flex;
align-items: center;
font-size: 1.2rem;
img {
margin-right: .2rem;
width: 1.5rem;
height: 1.5rem;
}
}
}
}
}
.ad {
background: @second-btn-color-tran;
display: flex;
align-items: center;
justify-content: center;
height: 10rem;
}
}
.more {
margin-bottom: 2rem;
font-size: 1.2rem;
padding: 1rem 1rem 0 1rem;
text-align: center;
color: yellow;
}
}
}
}
</style>