vue案例:商城类(一)

一.项目介绍

该项目是用vant框架搭建的前端页面,遇到了一些问题做一些总结。
1.vant按需加载的整合。
创建一个新文件index.js存放这些按需引入的代码

import { ContactCard, ContactList, ContactEdit } from 'vant';

Vue.use(ContactCard);
Vue.use(ContactList);
Vue.use(ContactEdit);

在main.js中进行引入 import “./js/index.js”

2.用swipe组件实现分类加载。
html,分为左边和右边,左边可以控制右边的滚动,右边可以控制左边的样式

<template>
    <div id="categray">
        <Header title="分类"></Header>
        <div class="box">
            <div class="left">//左边
                <ul>
                    <li v-for="(item, index) in selnav" :key="index"
                    	@click='sel(item.class,index)'
                        :class="selected==item.class?'navsel':''">
                    {{item.name}}
                    </li>
                </ul>
            </div>
            <div class="right">//右边
                <div class='right-box '
					>
                    <div class='categray-box'>
                        <div class='categrayDetail-box'>
                        	<div class='img'>
							      <div class="i" style="background-image:url(./static/o7.jpg);background-size:100%;" ></div>
						    </div>
                            <div class='categray-title'><span>蛋糕</span></div>
                            <div class='list-box'>
                              <!--  <div v-for='item in selectedList' @click='goDetail(item)'>
                                    <img class="im" :src="item.img" ></img>
                                    <span>{{item.title}}</span>
                                </div>-->
                                <van-swipe  vertical class="swiper" ref="swiper" :style="'height:'+screeHeight" :loop="false"  @change="onChange" :show-indicators="false">
                                    <van-swipe-item class="x"  v-for="item in selnav" :key="item.id" >
                                    <div v-for='item in selectedList' :key="item.id">
                                       <img class="im" :src="item.img" ></img>
                                        <span>{{item.title}}</span> 
                                    </div>
                                    </van-swipe-item>
                                   
                                </van-swipe>             
							</div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

js中主要有用的就是2个方法

export default {
  name:'Categray',
  components:{Header,TabBar},
  data(){
      return{
           screeHeight:window.screen.height-220+"px",//滑块的高度
            selected:'categray1',//选中的selnav对象中的样式
            index:"0",
            selnav:[//左边
                    {name:'玛芬蛋糕',class:'categray1'},
                    {name:'海绵蛋糕',class:'categray2'},
                    {name:'戚风蛋糕',class:'categray3'},
                    {name:'天使蛋糕',class:'categray4'},
                    {name:'重油蛋糕',class:'categray5'},
                    {name:'芝士蛋糕',class:'categray6'},
                    {name:'蒸蛋糕',class:'categray7'},
                    {name:'抹茶蛋糕',class:'categray8'},
                ],
            selectedList://右边选中的数组对象
                 [
                    {img:"./static/o7.jpg",title:"玛芬蛋糕 16寸"},
                    {img:"./static/o7.jpg",title:"玛芬蛋糕 18寸"}
                ]
            ,
            list:[//右边
                [
                    {img:"./static/o7.jpg",title:"玛芬蛋糕 16寸"},
                    {img:"./static/o7.jpg",title:"玛芬蛋糕 18寸"}
                ],
                
                 [
                    {img:"./static/o5.jpg",title:"海绵蛋糕 16寸"},
                    {img:"./static/o5.jpg",title:"海绵蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o4.jpg",title:"戚风蛋糕 16寸"},
                    {img:"./static/o4.jpg",title:"戚风蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o8.jpg",title:"天使蛋糕 16寸"},
                    {img:"./static/o8.jpg",title:"天使蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o6.jpg",title:"重油蛋糕 16寸"},
                    {img:"./static/o6.jpg",title:"重油蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o2.jpg",title:"芝士蛋糕 16寸"},
                    {img:"./static/o2.jpg",title:"芝士蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o3.jpg",title:"蒸蛋糕 16寸"},
                    {img:"./static/o3.jpg",title:"蒸蛋糕 18寸"}
                ],
                 [
                    {img:"./static/o1.jpg",title:"抹茶蛋糕 16寸"},
                    {img:"./static/o1.jpg",title:"抹茶蛋糕 18寸"}
                ]


            ]

            
      }
  },
  	methods:{
		sel(item,index){//左边点击事件,参数当前对象的样式,索引
			this.selected=item;//样式
            this.selectedList=this.list[index];//右边显示的数据
            this.index=index;//索引
            this.$refs.swiper.swipeTo(this.index)//切换到索引所指的页面
           
		},
         onChange(index) {
             this.index=index;//索引
            this.selected=this.selnav[index].class;//左边当前样式
             this.selectedList=this.list[index]//右边的数据
        }
	}
}

cssy样式,重要部分

#categray{
    .box{
        position:fixed;//固定布局
        .w(375);
        .top(45);
		.bottom(50);
        display:flex;
        
         .left{//左边
             .w(75);
              height:100%;
              border-right:1px solid #D8d8D8;
              box-sizing: border; 
             .fs(14);
             li{
                .w(75);
          		.h(40);
          		.lh(40);
                text-align:center;
          		box-sizing:border;
          		border-left:2px solid #fff; 
             }
             	.navsel{//选中样式
          		border-left:2px solid #b71c1c;
          		color:#ef5350; 
          	}

         }
         .right{//右边
             .w(300);
             height:100%;
                   .categray-box{            
                     height:100%;
                     .categrayDetail-box{
                        height: 100%;         
                        .fs(16);
                        .w(270); 
                        margin:0px auto;
                        .img{
                            width: 100%;
                            .h(80);
                            .i{
                                .h(80);
                                width: 100%;
                            }
				    	}
                        .categray-title{//文字中间
                            .h(35);
                            .lh(35);
                            color:#b71c1c;
                            text-align: center;
				    	}
                        .categray-title span::before,.categray-title span::after{//两条线
                            content:'';
                            display: inline-block;
                            .w(35);
                            .h(1);
                            position: relative;
                            .top(-6);
                            margin:0px 15px;
                            background:#979797;
					    }
                        	.list-box{                           
                                width: 100%;                                 
                                }
                                .swiper{//滑块的宽度
                                    .w(270); 
                                }
                                 .van-swipe-item{//每个滑块的样式
                                        display: flex;
                                        flex-wrap:wrap;
                                        align-content: flex-start; 
                                    div{//每项的样式
                                        .w(90);
                                        .h(110);
                                        .p_b(10);
                                        
                                        display: flex;
                                        flex-direction:column;
                                        align-items: center;
                                        .im{
                                            .w(65);
                                            background-size:100%;
                                        }
                                        span{
                                            .fs(14);
                                            text-align: center;
                                        }
                                    }
                                }
                         
                     }
                 }
             
             
    }
     
    }
    
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值