vue仿站酷首页

1687878925984

学着通过vue脚手架制作站酷网站首页模块

首先是导航栏使用nav制作

例如发现板块,这里我制作了一个二级菜单:

<span><a href="https://www.zcool.com.cn/">首页</a></span>
            <span>
              <div class="dropdown">
                <a href="https://www.zcool.com.cn/discover">
                  <i class="point1"></i>
                  发现
                </a>
                <div class="dropdown-content">
                  <a href="#">精选</a>
                  <a href="#">平面</a>
                  <a href="#">UI</a>
                  <a href="#">网页</a>
                  <a href="#">插画</a>
                  <a href="#">动漫</a>
                  <a href="#">摄影</a>
                </div>
              </div>
            </span>

然后设置css样式

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  position: absolute;
  display: none;
  min-width: 150px;
  min-height: 50px;
  padding: 12px 16px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  background-color: #fff;
  border-radius: 12px;
}

.dropdown-content a {
  margin: 10px;
}

.dropdown:hover .dropdown-content {
  display: block;
}

然后是轮播,使用了swiper组件,非常方便(我把swiper挂载在mounted上面使用)


    <div class="swiper">
      <div class="swiper-wrapper">
        <div class="swiper-slide" v-for="v in swiperArr" :key="v">
          <img :src="v" alt="" />
        </div>
      </div>
      <!-- 分页器 -->
      <!-- <div class="swiper-pagination"></div> -->

      <!-- 导航按钮 -->
      <div class="swiper-button-prev"></div>
      <div class="swiper-button-next"></div>

      <!-- 滚动条 -->
      <div class="swiper-scrollbar"></div>
    </div>
 mounted() {
        new Swiper(".swiper", {
            // direction: "vertical", // 垂直切换选项
            loop: true,
            autoplay: true,
            // 如果需要分页器
            pagination: {
                el: ".swiper-pagination",
            },
        });
    },

之后使用tab,v-model绑定,v-for循环显示内容,例如首页推荐模块

 <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="首页推荐" name="one">
        <ul class="recommend-content">
          <li v-for="(v, i) in indexRecommendArr" :key="i">
            <img :src="v.img" alt="" />
            <div>
              <div class="left">
                <h3>{{ v.title }}</h3>
                <p>{{ v.name }}</p>
              </div>
              <div class="right">
                <img class="view" width="25" height="25" src="../assets/imgs/眼睛.png" alt="" />
                <span>{{ v.view }}</span>
              </div>
            </div>
          </li>
        </ul>
      </el-tab-pane>

其中的内容(图片和文字)使用mock和axios模拟虚拟数据

MockServe.js:
import Mock from 'mockjs'
import apiData from './data.json'

Mock.mock('/indexRecommendArr', { code: 0, data: apiData.indexRecommendArr })


data.json:
 "indexRecommendArr": [
        {
            "img": "https://img.zcool.cn/community/0313ddygzmg1bm74n8mkect3332.png?x-oss-process=image/resize,m_fill,w_520,h_390,limit_1/auto-orient,1/sharpen,100/quality,q_80/format,webp",
            "title": "看完这篇万字文章,你也能绘制用户体验地图",
            "view": "100",
            "name": "剪空气刘海的567"
        },
        {
            "img": "https://img.zcool.cn/community/0318vc7cvga35k5u5nvrdmk3637.png?x-oss-process=image/resize,m_fill,w_520,h_390,limit_1/auto-orient,1/sharpen,100/quality,q_80/format,webp",
            "title": "大话吉祥×新年礼盒",
            "view": "2859",
            "name": "無视免谈"
        },
        {
            "img": "https://img.zcool.cn/community/01505b64918f0a000f941000f614f9.jpg?x-oss-process=image/resize,m_fill,w_520,h_390,limit_1/auto-orient,1/sharpen,100/quality,q_80/format,webp",
            "title": "流水迢迢 概念海报",
            "view": "3779",
            "name": "鍾大年儿"
        },
        {
            "img": "https://img.zcool.cn/community/03155dndbpvrfgyxcnjrymn3435.png?x-oss-process=image/resize,m_fill,w_520,h_390,limit_1/auto-orient,1/sharpen,100/quality,q_80/format,webp",
            "title": "如何从0到1搭建互动游戏【视觉篇】",
            "view": "1923",
            "name": "继安Haivy"
        }
axios:
import Vue from 'vue'
import axios from 'axios'

const http = {
    install() {
        Vue.prototype.axios = axios;
    }
}
mock(/\/api\/ratings\/list/, 'post', ratings.list)

//在created里面获取数据
created() {
        this.$axios.get("/indexRecommendArr").then((res) => {
            this.indexRecommendArr = res.data.data;
        });

跳转的页面由路由实现

      <RouterLink to="/bk1"></RouterLink>
    <RouterView></RouterView>

在此基础上做了登录界面和换一换交互功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值