vue 楼层

2021-04-20  本文已影响0人  大梦无痕
image.png
<template>
    <div class="home" v-loading="loading" ref="contentbox">
        <heads></heads>
        <div class="warapp">
            <div class="fixed" v-show="scrollTop>100">
                <div :class="navIndex==inx?'li active':'li'" v-for="(item,inx) in goods" :key="inx" @click="floorNav('list'+inx,inx)">{{item.title}}</div>
            </div>
            <div class="goods-list">
                <div class="xlist" v-for="(item,inx) in goods" :key="inx" :ref="'list'+inx">
                    <!-- 显示样式1 -->
                    <div class="type1" v-if="item.type==1">
                        <div class="tit">{{item.title}}</div>
                        <div class="list">
                            <div class="listItem" v-for="item1 in item.list" :key="item1.id">
                                <router-link class="link" to="/">
                                    <img :src="item1.img" class="goodImg" :alt="item1.goodsName">
                                </router-link>
                                <div class="listItemHover">
                                    <div class="tith">{{item1.tag}}</div>
                                    <div class="sub">{{item1.goodsName}}</div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- 样式2 -->
                    <div class="type2" v-if="item.type==2">
                        <div class="tit">{{item.title}}</div>
                        <div class="list">
                            <div class="listItem" v-for="item1 in item.list" :key="item1.id">
                                <router-link class="link" to="/">
                                    <div class="listItemHover">
                                        <div class="tith">{{item1.tag}}</div>
                                        <div class="sub">{{item1.goodsName}}</div>
                                        <div class="boxImg">
                                            <img :src="item1.img" class="goodImg" :alt="item1.goodsName">
                                        </div>  
                                    </div>
                                </router-link>
                            </div>
                        </div>
                    </div>
                    <!-- 样式3 -->
                    <div class="type3" v-if="item.type==3">
                        <div class="tit">{{item.title}}</div>
                        <div class="list">
                            <div class="listItem" v-for="item1 in item.list" :key="item1.id">
                                <router-link class="link" to="/">
                                    <div class="listItemHover">
                                        <div class="boxImg">
                                            <img :src="item1.img" class="goodImg" :alt="item1.goodsName">
                                        </div>  
                                        <div class="sub">{{item1.goodsName}}</div>
                                        <div class="tith">{{item1.tag}}</div>
                                        <div class="price">¥{{item1.price}}</div>
                                    </div>
                                </router-link>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div ref="tops" class="tops" style="height:1px"></div>
    </div>
</template>
<script>
    export default{
        components:{},
        data(){
            return {
                loading:true,
                scrollTop:0,
                goods:[],//楼层数据
                navIndex:0,//当前的index
                maxIndex:100,//当前点击的index 用于判断滚动超出时超过当前index(动画过度)  100 大于当前楼层length就ok

            }
        },
        methods:{
            init(){
                this.goods = [];
                var num = parseInt(Math.random()*12)+3;
                for(var i=0;i<num;i++){
                    var num1 = parseInt(Math.random()*16)+3;
                    var list = [];
                    for(var j=0;j<num1;j++){
                        list.push({
                            goodsName:"2021新款40支13372全棉双拼羽毛刺绣四件套 1.5m床单款四件套 月光蓝+姜黄"+(j+1)*(i+1),
                            tag:"暖柚家纺"+j,
                            img:"http://qiniu.zhaojiafang.com/data/upload/shop/rec_position/656a10be8aad391a8122.jpg",
                            price:parseInt(Math.random()*200000),
                            id:parseInt(Math.random()*20000000000),
                        })
                    }
                    this.goods.push({
                        type:parseInt(Math.random()*3)+1,
                        list:list,
                        title:"实力品牌"+i
                    })
                }
            },
            handleScroll(e){
                this.scrollTop = this.$refs.contentbox.scrollTop;
                if(this.maxIndex!=100){
                    var top = this.$refs['list'+this.maxIndex][0].offsetTop;
                    if(this.maxIndex>this.navIndex){
                        //向下
                        if(this.scrollTop<=top){
                            this.navHover(this.scrollTop);
                        }
                    }else{
                        //向上
                        if(this.scrollTop>=top){
                            this.navHover(this.scrollTop);
                        }
                    }
                }else{
                    this.navHover(this.scrollTop);
                }
                
            },
            navHover(scrollTop){
                
                for(var i=0;i<this.goods.length;i++){
                    var name = "list"+i;
                    var top = this.$refs[name][0].offsetTop;
                    if(scrollTop>=top){
                        this.navIndex = i;
                    }
                }
            },
            //滚动条动画
            animate(max,inx){
                var times = 500;
                var step = (max - this.$refs.contentbox.scrollTop)/10;
                var Maxheight = this.$refs.tops.offsetTop-document.documentElement.clientHeight + 1;//滚动条距离顶部的最大的高度
                var time = setInterval(() => {
                    if(step>0){
                        if(this.$refs.contentbox.scrollTop>=max||this.$refs.contentbox.scrollTop>=Maxheight){
                            this.$refs.contentbox.scrollTop = max;
                            this.navIndex = inx;
                            clearInterval(time);
                            this.maxIndex = 100;
                        }else{
                            this.$refs.contentbox.scrollTop +=step;
                        }
                    }else{
                        if(this.$refs.contentbox.scrollTop<=max){
                            this.$refs.contentbox.scrollTop = max;
                            clearInterval(time);
                            this.maxIndex = 100;
                        }else{
                            this.$refs.contentbox.scrollTop = this.$refs.contentbox.scrollTop + step;
                        }
                    }
                }, 50);
            },
            floorNav(name,inx){
                var maxTime = 500;//滚动时间
                this.maxIndex = inx;
                if(this.navIndex!=inx){
                    this.animate(this.$refs[name][0].offsetTop,inx);
                }
            }
        },
        created(){
            
        },
        mounted(){
            this.init();
            setTimeout(() => {
                window.addEventListener('scroll', this.handleScroll, true);
            }, 500);
        }
    }
</script>

<style lang=scss scoped>
    .fixed{
        position: fixed;
        top: 105px;
        left: 50%;
        margin-left: -660px;
        background: #f3f2f2;
        z-index: 10;
        
        .li{
            width: 40px;
            color: #999;
            font-size: 12px;
            line-height: 18px;
            text-align: center;
            padding: 4px;
            box-sizing: border-box;
            border-bottom: 1px dotted #d1d1d1;
            cursor: pointer;
        }
        .li:hover{
            background: #f00;
            color: #fff;
        }
        .li.active{
            background: #f00;
            color: #fff;
        }
    }
    .home{
        background: #fff;
        height: 100%;
        overflow: auto;
    }
    .main{
        display: flex;
        height: 600px;
        background: #fff;
        .menu{
            width: 212px;
            position: relative;
            .menuTit{
                background: #F92C66;
                color: #fff;
                font-size: 14px;
                height: 36px;
                line-height: 36px;
                padding: 0 10px;
                .icons{
                    font-size: 18px;
                    vertical-align: middle;
                }
            }
            .ul{
                background: linear-gradient(180deg, #fd3f75, #fd264c);
                height: calc(100% - 36px);
                overflow: auto;
                .li{
                    padding: 10px;
                    display: flex;
                    color: #fff;
                    font-size: 14px;
                    transition: all 0.5s;
                    .lit{
                        flex: auto;
                        .them{
                            cursor: pointer;
                           .icon{
                               display: inline-block;
                               vertical-align: middle;
                               width: 20px;
                               height: 20px;
                               background: #f5f5f5;
                               margin-right: 6px;
                           } 
                        }
                        .sub{
                            padding-left: 26px;
                            margin-top: 6px;
                            font-size: 12px;
                            span{
                                cursor: pointer;
                                margin-right: 4px;
                                color:rgba(236, 236, 236, 0.85) ;
                                transition: all 0.2s;
                            }
                            span:hover{
                                color: #fff;
                            }
                        }
                    }
                    .icont{
                        i{
                            font-size: 18px;
                        }
                    }
                }
                .menuLayer{
                    position: absolute;
                    left: 212px;
                    top: 36px;
                    bottom: 0;
                    width: 988px;
                    box-shadow:0 0 4px 0 rgba(0,0,0,0.2) ;
                    display: none;
                    padding: 20px;
                    box-sizing: border-box;
                    z-index: 1000;
                    background: #fff;
                    .item{
                        margin-bottom: 20px;
                        .tit{
                            font-size: 14px;
                            color: #222;
                            font-weight: 900;
                            line-height: 20px;
                        }
                        .sub1{
                            font-size: 12px;
                            color: #999;
                            margin-top: 10px;
                            span{
                                cursor: pointer;
                                margin-right: 24px;
                                transition: all 0.2s;
                            }
                            span:hover{
                                color: #fd264c;
                            }
                        }
                    }
                    
                }
                .li:hover{
                    background: rgba(255,255,255,0.3);
                    .menuLayer{
                        display: block;
                    }
                }
            }
        }
        .box{
            height: 100%;
            width: calc(100% - 212px);
            position: relative;
            z-index: 1;
            .nav{
                height: 36px;
                line-height: 36px;
                display: flex;
                flex-wrap: wrap;
                padding: 0 20px;
                border-bottom: 2px solid #fd3f75;
                .navItem{
                    margin-right: 20px;
                    font-size: 14px;
                    font-weight: 400;
                    color: #222;
                    transition: all 0.2s;
                    cursor: pointer;
                }
                .navItem:hover{
                    color: #fd3f75;
                }
            }
        }
        .centent{
            height:calc(100% - 38px);
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            .swiper{
                width: calc(100% - 200px);
                position: relative;
                z-index: 1;
                height: 400px;
                .swiper-container{
                    width: 100%;
                    height: 100%;
                }
            }
            .user{
                width: 200px;
                box-sizing: border-box;
                height: 400px;
                .us{
                    height: 80px;
                    display: flex;
                    padding: 20px 20px 0 20px;
                    .img{
                        width: 60px;
                        height: 60px;
                        background: #f5f5f5;
                        border-radius: 50%;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        i{
                            font-size: 40px;
                            color: #999;
                        }
                    }
                    .ust{
                        padding-left: 12px;
                        font-size: 12px;
                        display: flex;
                        align-items: center;
                        flex-direction: column;
                        color: #444;
                        .text{
                            margin-top: 10px;
                        }
                        a{
                            color: #444;
                        }
                    }
                }
            }
            .active{
                img{
                    width: 100%;
                    height: 99px;
                    margin-top: 1px;
                    cursor: pointer;
                }
            }
            .hot{
                width: 100%;
                height: 162px;
                padding: 4px;
                box-sizing: border-box;
                .swiper-container{
                    width: 100%;
                    height: 100%;
                    .img{
                        cursor: pointer;
                        height: 120px;
                    }
                    .title{
                        font-size: 14px;
                        height: 30px;
                        line-height: 30px;
                        overflow: hidden;
                        text-overflow: ellipsis;
                        white-space:nowrap;
                        transition: all 0.25s;
                        cursor: pointer;
                    }
                    .swiper-slide:hover{
                        .title{
                            color: #F92C66;
                        }
                    }
                }
            }
        }
    }
    .goods-list{
        padding-top: 40px;
        overflow: hidden;
        .xlist{
            margin-bottom:20px ;
            .type1{
                .tit{
                    font-size: 24px;
                    font-weight: 900;
                    line-height: 60px;
                    color: #4e4c4c;
                    text-align: center;
                }
                .list{
                    display: flex;
                    align-items: center;
                    flex-wrap: wrap;
                    .listItem{
                        width: calc(33.3333% - 10px);
                        margin-right: 15px;
                        margin-bottom: 15px;
                        position: relative;
                        height: 215px;
                        overflow: hidden;
                        .link,.goodImg{
                            display: block;
                            width: 100%;
                            min-height: 100%;
                        }
                        .listItemHover{
                            position: absolute;
                            left:0;
                            bottom: -50%;
                            width: 100%;
                            height: 50%;
                            background: rgba(0,0,0,0.75);
                            z-index: 100;
                            padding: 20px;
                            box-sizing: border-box;
                            transition: all 0.5s;
                            display: flex;
                            justify-content: center;
                            align-items: center;
                            flex-direction: column;
                            .tith{
                                font-size: 18px;
                                font-weight: 900;
                                color: #fff;
                                line-height: 24px;
                            }
                            .sub{
                                font-size: 16px;
                                color: #fff;
                                line-height: 20px;
                                margin-top: 10px;
                            }
                        }
                    }
                    .listItem:nth-child(3n){
                        margin-right: 0;
                    }
                    .listItem:hover{
                        .listItemHover{
                            bottom: 0;
                        }
                    }
                }
            }
            .type2{
                .tit{
                    font-size: 24px;
                    font-weight: 900;
                    line-height: 60px;
                    color: #222;
                    text-align: center;
                }
                .list{
                    display: flex;
                    align-items: center;
                    flex-wrap: wrap;
                    .listItem{
                        width: calc(25% - 3px);
                        margin: 0 4px 5px 0;
                        .link{
                            display: block;
                            width: 100%;
                            padding: 0 2px;
                            box-sizing: border-box;
                            .listItemHover{
                                padding: 5px;
                                text-align: center;
                                box-shadow: 0px 1px 3px rgba(0,0,0,0.25);
                                border-top: 1px solid #ffac13;
                                .tith{
                                    color: #ffac13;
                                    font-size: 16px;
                                    font-weight: 400;
                                    line-height: 24px;
                                }
                                .sub{
                                    height: 24px;
                                    line-height: 24px;
                                    margin: 5px 0;
                                    overflow: hidden;
                                    text-overflow: ellipsis;
                                    white-space: nowrap;
                                    text-align: center;
                                    font-size: 14px;
                                    color: #b0b0b0;
                                }
                                .boxImg{
                                    width: 100%;
                                    height: 283px;
                                    overflow: hidden;
                                }
                                .goodImg{
                                    width: 100%;
                                    height: 100%;
                                    transform: scale(1.1);
                                    transition: all 0.5s;
                                }
                            }
                            .listItemHover:hover{
                                .goodImg{
                                    transform: scale(1);
                                }
                            }
                        }
                    }
                    .listItem:nth-child(4n){
                        margin-right: 0;
                    }
                }
            }
            .type3{
                .tit{
                    font-size: 24px;
                    font-weight: 900;
                    line-height: 60px;
                    color: #222;
                    text-align: center;
                }
                .list{
                    display: flex;
                    align-items: center;
                    flex-wrap: wrap;
                    .listItem{
                        width: calc(20% - 5px);
                        margin: 0 4px 5px 0;
                        background: #f5f5f5;
                        padding: 10px;
                        box-sizing: border-box;
                        text-align: center;
                        .boxImg{
                            height:215px;
                        }
                        .tith{
                            font-size: 12px;
                            background: #fee6e5;
                            margin: 0 auto;
                            padding: 2px 8px;
                            border-radius: 10px;
                            color: #f5534c;
                            display: inline-block;
                        }
                        .sub{
                            height: 24px;
                            line-height: 24px;
                            margin: 5px 0;
                            overflow: hidden;
                            text-overflow: ellipsis;
                            white-space: nowrap;
                            text-align: center;
                            font-size: 14px;
                            color: #6c6c6c;
                            transition: all 0.3s;
                        }
                        .price{
                            color: #fc4a00;
                            font-size: 15px;
                            line-height: 20px;
                            margin-top: 4px;
                        }
                    }
                    .listItem:nth-child(5n){
                        margin-right: 0;
                    }
                    .listItem:hover{
                        .sub{
                            color: #f5534c;
                        }
                    }
                }        
            }
        }
    }
</style>
上一篇下一篇

猜你喜欢

热点阅读