vue 饿了么项目
1.图标字体引用
2.scss 二三倍图切换 1像素边框
3.better-scroll
4.布局
商品主页面
<div id="app"> <v-header :seller='seller'></v-header> <div class="tab"> <div class="tab-item"> <router-link to="/goods">商品</router-link> </div> <div class="tab-item"> <router-link to="/ratings">评价</router-link> </div> <div class="tab-item"> <router-link to="/seller">商家</router-link> </div> </div> <keep-alive> <router-view :seller='seller'></router-view> </keep-alive> </div>
主页面包含头部,三个tab菜单切换。头部在页面切换时通用。每个菜单下router-view都有通用商家信息,通过props动态传入seller数据给各个子组件。
<router-view :seller='seller'></router-view>
1.header.vue组件
<template> <div class="header"> <!-- 头部内容 --> <div class="content-wrapper"> <div class="avatar"></div> <div class="content"></div> <div class="supports_count" @click="showDetail(true)"></div> </div> <!-- 公告栏 --> <div class="bulletin-wrapper" @click="showDetail(true)"> <span class="bulletin-title"></span> <span class="bulletin-text"></span> <span class="icon-keyboard_arrow_right"></span> </div> <!-- 背景 --> <div class="background"></div> <!-- 头部详细页面 --> <transition name="fade"> <div class="detail" v-show="detailShow"> <div class="detail-main"> <div class="name"></div> <div class="star-wrapper"></div> <div class="title"></div> <div class="supports"></div> <div class="title"></div> <div class="content"></div> </div> <div class="detail-close" @click="showDetail(false)"></div> </div> </transition> </div> </template>
公告栏一行多余字体省略
.bulletin-wrapper{ position: relative; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
.bulletin-title{
//span元素转为行内块元素 为了可以使用width height控制图标大小 display: inline-block; vertical-align: middle; @include bg-image("bulletin"); } .bulletin-text{ } .icon-keyboard_arrow_right
//字体图标绝对定位 position absolute top: 9px right 2px }
头部详细页面点击显示和隐藏
<div class="supports_count" v-if="seller.supports" @click="showDetail(true)"> <div class="detail-close" @click="showDetail(false)"> <transition name="fade"> <div class="detail" v-show="detailShow"> //内容 </div> </transition> data () { return { detailShow: false } }, methods: { showDetail (isShow) { this.detailShow = isShow } },
Vue只有在插入,更新或者移除DOM元素时才会应用过渡效果。
使用vue提供的transition来封装组件成为过渡组件,transition需要与如下情景中的任一种一起使用:
-
v-if(条件渲染)
-
v-show(条件展示)
-
动态组件
-
在组建的根节点上,并且被vue实例DOM方法触发,如appendTo方法把组件添加到某个根节点上
组件过渡过程中,会有四个CSS类名进行切换,这四个类名与上面transition的name属性有关,比如name="fade",会有如下四个CSS类名:
-
fade-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立即删除;
-
fade-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成之后移除;
-
fade-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立即删除;
-
fade-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成之后被删除;
从上面四个类名可以看出,fade-enter-active和fade-leave-active在整个进入或离开过程中都有效,所以CSS的transition属性在这两个类下进行设置。
上面示例中,fade-enter和fade-leave-active类设置CSS为opacity:0,说明过渡刚进入和离开的时候透明度为0,即不显示。