【无标题】

小米详情
App.vue
<template>
  <div id="app">  
   <Detail></Detail>
  </div>
</template>

<script>
import Detail from './views/Detail'
export default {
  components:{
    Detail
  }
}
</script>

<style lang="scss">
*{
  margin: 0;
  padding: 0;
  list-style: none;
}
.flex{
  display: flex;
}
.j-s{
  justify-content: space-between;
}
.j-c{
  justify-content: center;
}
.a-c{
  align-items: center;
}
</style>
main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
detail.vue
<template>
  <div>
    <NavHeader></NavHeader>
    <ProductParam></ProductParam>
    <NavFooter></NavFooter>
  </div>
</template>
<script>
import NavHeader from "../components/NavHeader.vue";
import NavFooter from "../components/NavFooter.vue";
import ProductParam from "../components/ProductParam.vue";
export default {
  name: "Detail",
  components: {
    NavHeader,
    NavFooter,
    ProductParam,
  },
};
</script>
<style scoped lang='scss'>
</style>
index.js(store)
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})
index.js(路由)
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  
]

const router = new VueRouter({
  routes
})

export default router
navfooter.vue
<template>
  <div class="navfooter">
    <div class="footer_one">
      <img src="/imgs/logo-footer.png" alt="" />
      <div>小米商城</div>
    </div>
    <div class="footer_two ">
      <ul class="flex list j-c">
        <li>小米商城</li>
        <li>|</li>
        <li>小米商城</li>
        <li>|</li>
        <li>MIUI</li>
        <li>|</li>
        <li>米家</li>
        <li>|</li>
        <li>米聊</li>
        <li>|</li>
        <li>多看</li>
        <li>|</li>
        <li>游戏</li>
        <li>|</li>
        <li>政企服务</li>
        <li>|</li>
        <li>小米天猫店</li>
      </ul>
    </div>
    <div class="footer_three"> © mi.com 京ICP证110507号 京ICP备10046444号 京公网安备11010802020134号 京网文[2020]0276-042号</div>
  </div>
</template>
<script>
export default {
  name: "NavFooter",
};
</script>
<style scoped lang='scss'>
.navfooter {
  background-color: rgb(58, 57, 57);
  color: #ccc;
  border-top: 3px solid orangered;
  width: 95%;
  height: 230px;
  margin: 0 auto;
  margin-top: 20px;
  .footer_one {
    margin: 20px auto;
    width: 100%;
    text-align: center;
    div {
      margin-top: 10px;
    }
  }
  .footer_two {
    width: 100%;
    li{
        margin-left: 5px;
    }
  }
  .footer_three{
      width: 100%;
      text-align: center;
      margin-top: 20px;
      font-size: 14px;
  }
}
</style>
navheader.vue
<template>
  <div class="navheader">
    <div class="top flex j-s">
      <div class="left flex">
        <li>小米商城</li>
        <li>MIUI</li>
        <li>IoT</li>
        <li>云服务</li>
        <li>金融</li>
        <li>有品</li>
        <li>小爱开放平台</li>
      </div>
      <div class="right flex">
        <li>登录</li>
        <li>购物车</li>
      </div>
    </div>
    <div class="content flex j-s">
      <div class="left">
        <img src="/imgs/mi-logo.png" alt="" />
      </div>
      <div class="conten flex">
        <li @mouseenter="isShow(1)" @mouseleave="show=false">电视</li>
        <li @mouseenter="isShow(2)" @mouseleave="show=false">小米手机</li>
        <li>RedMi红米</li>
        <li>笔记本</li>
        <li>路由器</li>
        <li>家电</li>
      </div>
      <div class="right flex a-c">
        <input type="text" />
        <div class="img">
          <img src="/imgs/icon-search.png" alt="" />
        </div>
      </div>
    </div>
    <div v-show="show" class="right1 flex j-s">
        <div class="list" v-for="(item,index) in navs" :key="index">
            <div>
                <img :src="item.mainImage" alt="">
            </div>
            <div>{{item.name}}</div>
            <div class="price">{{item.price}}</div>
        </div>
    </div>
  </div>
</template>
<script>
import axios from 'axios'
export default {
    data() {
        return {
            navs:[],
            show:false
        }
    },
   async created() {
       
    },
    methods: {
     async isShow(val){
         this.show =true
        if(val===1){
          // 显示电视
            this.navs=[
              {
                mainImage:'/imgs/nav-img/nav-3-1.jpg',
                name:'小米壁画电视 65英寸',
                price:'6999'
              },
               {
                mainImage:'/imgs/nav-img/nav-3-2.jpg',
                name:'小米全面屏电视 55英寸',
                price:'1899'
              },
               {
                mainImage:'/imgs/nav-img/nav-3-3.png',
                name:'小米电视4A 32英寸',
                price:'799'
              },
               {
                mainImage:'/imgs/nav-img/nav-3-4.jpg',
                name:'小米电视4A 55英寸',
                price:'1299'
              },
               {
                mainImage:'/imgs/nav-img/nav-3-5.jpg',
                name:'小米电视4A 65英寸',
                price:'2799'
              },
               {
                mainImage:'/imgs/nav-img/nav-3-6.png',
                name:'Redmi 红米电视 70英寸 R70A',
                price:'3499'
              }
            ]
          
        }else{
          // 显示手机
           let {data:{data:{list}}}= await axios.get('json/nav.json')
           this.navs =list
        }
     }
    },
};
</script>
<style scoped lang='scss'>
.navheader {
  width: 95%;
  // border: 1px solid black;
  margin: 0 auto;
  .top {
    height: 50px;
    line-height: 50px;
    background-color: rgb(58, 57, 57);
    color: #ccc;
    .left {
      padding: 0 20px;
      li {
        margin-left: 10px;
      }
    }
    .right {
      margin-right: 10px;
      li {
        margin-left: 10px;
        &:last-child {
          background: orangered url("/imgs/icon-cart-checked.png") no-repeat
            left center;
          width: 100px;
          padding: 0px 20px;
          margin-left: 20px;
          text-align: center;
          line-height: 50px;
        }
      }
    }
  }
  .content {
    height: 50px;
    margin-top: 10px;
    position: relative;
    .left {
      background-color: orangered;
      width: 50px;
      height: 50px;
    }
    .conten {
      line-height: 50px;
      li {
        cursor: pointer;
        padding: 0 20px;
        &:hover{
            color: orangered;
        }
      }
    }
    .right {
      input {
        height: 30px;
        width: 200px;
        outline: none;    
      }
      .img {
        width: 30px;
        height: 30px;
        border: 1px solid rgb(97, 94, 94);
        img {
          width: 15px;
          height: 15px;
          padding: 5px;
        }
      }
    }
  }
  .right1{
    //   border: 1px solid greenyellow;
      margin-top: 20px;
      position: absolute;
      z-index: 999;
      background-color: white;
      .list{
        // position: absolute;
          width: 16%;
        //   border: 1px solid black;
          text-align: center;
          img{
              width: 100%;
          }
          .price{
              color: orangered;
              font-weight: bold;
          }
      }
  }
}
</style>
productparam.vue
<template>
  <div class="productparam">
    <div ref="top"  class="produ_one flex j-s">
      <p>红米Note7</p>
      <ul class="list flex a-c">
        <li>概述</li>
        <li>|</li>
        <li>参数</li>
        <li>|</li>
        <li>用户评价</li>
      </ul>
    </div>
    <div class="produ_two flex">
      <div class="left">
        <swiper ref="mySwiper" :options="swiperOptions">
          <swiper-slide>
            <img src="/imgs/detail/phone-1.jpg" alt="" />
          </swiper-slide>
          <swiper-slide>
            <img src="/imgs/detail/phone-2.jpg" alt="" />
          </swiper-slide>
          <swiper-slide>
            <img src="/imgs/detail/phone-3.jpg" alt="" />
          </swiper-slide>
          <swiper-slide>
            <img src="/imgs/detail/phone-4.jpg" alt="" />
          </swiper-slide>
          <div class="swiper-pagination" slot="pagination"></div>
        </swiper>
      </div>
      <div class="right">
        <div class="title">{{detail.name}}</div>
        <div>{{detail.subtitle}}</div>
        <div class="orange">小米自营</div>
        <div><span class="orange">{{detail.price}}元</span>  <span style="text-decoration: line-through;">1000</span> </div>
        <div class="address">
            <div>北京 北京市 朝阳区 安定门街道</div>
            <div class="orange">有现货</div>
        </div>
        <div class="title">选择版本</div>
        <div class="flex">
            <div class="type">6GB+64GB 全网通</div>
            <div class="type">4GB+64GB 移动4G</div>
        </div>
        <div class="title">选择颜色</div>
        <div class="orange">
            深空灰
        </div>
        <div>
            <div>
                <span>红米Note7 6GB+64GB 全网通 深灰色</span>
                <span>{{detail.price}}元</span>
            </div>
            <div class="orange">总计:{{detail.price}}元</div>
            <div class="btn">加入购物车</div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import axios from "axios";
import { Swiper, SwiperSlide, directive } from "vue-awesome-swiper";
import "swiper/css/swiper.css";
export default {
  components: {
    Swiper,
    SwiperSlide,
  },
  directives: {
    swiper: directive,
  },
  async created() {
    let {data: { data }} = await axios.get("json/product.json");
    this.detail = data;
  },
  data() {
    return {
      detail: {},
      swiperOptions: {
        pagination: {
          el: ".swiper-pagination",
        },
        loop: true,
        autoplay: {
          delay: 3000,
          disableOnInteraction: false,
        },
      },
    };
  },
  computed: {
    swiper() {
      return this.$refs.mySwiper.$swiper;
    },
  },
  mounted() {
    this.swiper.slideTo(3, 1000, false);
    let that =this
        window.onscroll=function(e){
        if(window.pageYOffset>=100){
            that.$refs.top.style ="position:fixed;top:0"
        }else{
            that.$refs.top.style=""
        }
    }
  },
};
</script>
<style scoped lang='scss'>
.productparam {
  width: 95%;
//   height: 800px;
//   border: 1px solid black;
  margin: 20px auto;
  
  .produ_one {
    width: 100%;
    height: 30px;
    z-index: 1000;
    //   border: 1px solid red;
    p {
      font-size: 20px;
      font-weight: bold;
      padding-left: 10px;
    }
    .list {
      margin-right: 10px;
      li {
        color: rgb(119, 118, 118);
        margin-left: 10px;
      }
    }
  }
  .produ_two {
    width: 100%;
    // border: 1px solid red;
    .left {
      width: 500px;
      height: 600px;
      //   border: 1px solid red;
      img {
        width: 500px;
        height: 600px;
      }
    }
    .right {
      flex: 1;
      padding-left:20px;
      .title{
          font-weight: bold;
          font-size: 14px;
          padding: 10px 0;
      }
      .orange{
          color: orangered;
      }
      .type{
          border: 1px solid orangered;
          padding: 20px 50px;
          margin: 0 20px;
      }
      .btn{
          width: 200px;
          padding: 20px 0;
          text-align: center;
          background-color: orangered;
          color: white;
          margin: 20px;
      }
    }
  }
}
</style>

上一篇:Css3 边框详讲


下一篇:奥运五环~~~~~