Vue(小案例_vue+axios仿手机app)_首页(底部导航栏+轮播图+九宫格)
---恢复内容开始---
一、前言
1、底部导航(两种做法)
2、轮播图
3、九宫格
二、主要内容
1、底部导航
方式一:借用mint-ui, 这里实现tab切换时高亮可以给每个tab双向绑定一个值
(1)html结构代码如下
<!--底部-->
<mt-tabbar v-model="selected" fixed>
<mt-tab-item id="home">
<img slot="icon" src="./assets/index.png">
首页
</mt-tab-item>
<mt-tab-item id="vip">
<img slot="icon" src="./assets/vip.png">
会员
</mt-tab-item>
<mt-tab-item id="shopcart">
<img slot="icon" src="./assets/shopcart.png">
购物车
</mt-tab-item>
<mt-tab-item id="search">
<img slot="icon" src="./assets/search.png">
查找
</mt-tab-item>
</mt-tabbar>
(2)实现点击时切换,并且当前的背景为高亮
mint-ui官方说了tabBar有value属性值,就是id值,
export default {
name: 'App',
data(){
return {
selected:''
}
},
watch:{
selected:function(newV,oldV){
console.log(newV);
console.log(oldV);
console.log(this.selected);// 官方文档已经说明了,tabbar 有 value属性是 选中的项的id值,点击的时候会给selected进行赋值,也就将id值赋给selected,根据selected的值为点击的那个添加一个is-selected样式,你可以更改这个样式,或者绑定一个点击事件判断selected的值,添加样式,原理是一样的
this.$router.push({name:this.selected});//这里进行路由跳转,跳到当前点击这里
}
}
}
方式二:vue-router中给我们提供了linkactiveclass,用这种方式可以自定义导航
(1)html结构代码
<!--底部-->
<div class="tabBar">
<ul>
<li v-for="(tab, index) in tabs">
<router-link :to="tab.routerName">
<img :src="tab.imgSrc">
<p>{{tab.title}}</p>
</router-link>
</li>
</ul> </div>
(2)将tab用到的图片定义到下面的data中
import index from './assets/index.png'
import vip from './assets/vip.png'
import shopcart from './assets/shopcart.png'
import search from './assets/search.png' let tabs = [
{id:1, title:"首页", imgSrc:index, routerName:{name:'home'}},
{id:2, title:"会员", imgSrc:vip, routerName:{name:'vip'}},
{id:3, title:"购物车", imgSrc:shopcart, routerName:{name:'cart'}},
{id:4, title:"查找", imgSrc:search, routerName:{name:'search'}} ]
export default {
name: 'App',
data(){
return { tabs }
},
(3)自己定义tab样式
.tabBar{
width: 100%;
height: 55px;
background-color: #ccc;
position: absolute;
bottom: 0;
left: 0;
background-image: linear-gradient(180deg, #d9d9d9, #d9d9d9 50%, transparent 50%);
background-size: 100% 1px;
background-repeat: no-repeat;/*做一像素渐变线*/
background-position: top left;
background-color: #fafafa;
}
.tabBar ul{
width: 100%;
overflow: hidden;
}
.tabBar ul li{
float: left;
width: 25%;
height: 55px;
text-align: center;
}
.tabBar ul li a{
display: inline-block;
width: 100%;
height: 100%;
padding-top: 10px;
}
.tabBar ul li a.link-active{
background-color: pink;
}
.tabBar ul li a img{
width: 25px;
height: 25px;
}
.tabBar ul li a p{
font-size: 12px;
}
tabBar.css
2、轮播图
轮播图的做法比较简单,
(1)直接用mint-ui 到官网找到swiper,
(2)在首页(home组件创建好后),发送axios请求,拿到接口里面 的图片,
//在组件被创建好之后,请求轮播图图片
created(){
//api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d
this.$axios.get('api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d')
.then(res=>{
console.log(res.data.result);
this.imgslist= res.data.result.data
})
.catch(err=>{
console.log('轮播图异常',err);
})
}
(3)然后进行图片渲染
<!--这是轮播图-->
<mt-swipe :auto='4000' class='swiper' style="height: 200px;background-color: red;">
<mt-swipe-item v-for="(item, index) in filterImgs" :key="index">
<img :src="item.thumbnail_pic_s">
</mt-swipe-item>
</mt-swipe>
(4)有时候我们并不会将请求到的所有数据渲染完,这里可以在computed函数监听
computed:{
filterImgs: function(){ //上面渲染时就用这个filterImgs
//只返回数组从0-3的数据
return this.imgslist.slice(0,2);
}
},
3、九宫格
(1)html代码
<!--这是九宫格-->
<div class="list">
<ul >
<li v-for="(grid, index) in grids">
<!--这里是点击时要跳转的路由-->
<router-link :to="grid.router">
<img :src="grid.src">
<p>{{grid.title}}</p>
</router-link>
<router-view></router-view>
</li>
</ul>
</div>
(2)将九宫格里面的图片信息,路由信息存放在一个数组中
var grids = [
{id:1, src:'../../../static/img/news.png',title:'新闻资讯', router:{name:'news.list'}},
{id:2, src:'../../../static/img/news.png',title:'图文分享',router:{name:'news.list'}},
{id:3, src:'../../../static/img/news.png',title:'商品展示',router:{name:'news.list'}},
{id:4, src:'../../../static/img/news.png',title:'资讯',router:{name:'news.list'}},
{id:5, src:'../../../static/img/news.png',title:'联系我们',router:{name:'news.list'}},
{id:6, src:'../../../static/img/news.png',title:'新闻资讯',router:{name:'news.list'}}, ]
export default {
name:'Home',
data(){
return {
imgslist:[],
grids }
}
}
(3)九宫格样式
.list{
width: 100%;
height: 100%;
}
.list ul{/*他里面的li在必要时拆航*/
display: flex;
flex-wrap: wrap;
}
.list ul li{
width: 33%;
height: 100px;
text-align: center;
font-size: 12px;
margin-top: 15px;
}
.list ul li a{
display: inline-block;
width: 50px;
height: 50px;
margin: 0 auto;
}
.list ul li a img{
width: 50px;
}
三、总结
1.当滑动页面的时候,会拽着底部导航滑动如下

2.解决上面的问题加全局样式:
html{
width: 100%;
height: 100%;
overflow: hidden;
}
body{
padding-top: 41px;
width: 100%;
height: 100%;
overflow: auto;
}
3.这是有多久没有写项目了::
https://www.jianshu.com/p/1ee1c410dc67
---恢复内容结束---
Vue(小案例_vue+axios仿手机app)_首页(底部导航栏+轮播图+九宫格)的更多相关文章
- Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)
一.前言 1.公共轮播图的实现 2.组件传参,公共组件的实现 二.主要内容 1.公共轮播图的实现 (1)分析:当渲染不同的轮 ...
- Vue(小案例_vue+axios仿手机app)_购物车(二模拟淘宝购物车页面,点击加减做出相应变化)
一.前言 在上篇购物车中,如果用户刷新了当前的页面,底部导航中的数据又会恢复为原来的: 1.解决刷新,购物车上数值不变 ...
- Vue(小案例_vue+axios仿手机app)_购物车
一.前言 1.购物车 二.主要内容 1.效果演示如下,当我们选择商品数量改变的时候,也要让购物车里面的数据改变 2.具体实现 (1)小球从上面跳到下面的效果 (2)当点击上面的“加入购物车按钮”让小球 ...
- Vue(小案例_vue+axios仿手机app)_图文列表实现
一.前言 1.导航滑动实现 2.渲染列表信息时让一开始加载的时候就请求数据 3.根据路由的改变,加载图文的改变(实现用户访问网站时可能执行的三个操作) 二.主要内容 1.导航滑动实现: (1)演示 ...
- Vue(小案例_vue+axios仿手机app)_上拉加载
---恢复内容开始--- 一.前言 ...
- Vue(小案例_vue+axios仿手机app)_实现用户评论
一.前言 1.渲染评论列表 2.点击加载按钮,加载更多 3.提交评论 二.主要内容 1.评论列表一般是注册到一个全局的公共组件中 2.请求后台数据,渲染评论列表 (1)数据格式如下 地址 /ap ...
- Vue(小案例_vue+axios仿手机app)_图片列表操作
一.前言 1.让图片还没有被完全加载出来的时候给用户提示 2.图片查看器 二.主要内容 1.让图片还没有被完全加载出来的时候 ...
- Vue(小案例_vue+axios仿手机app)_购物车(计算商品总金额)
一.前言 1.计算总金额 2.点击删除按钮,删除对应的商品信息 3.当还没结算的时候,当用户跳到其他页面 ...
- Vue(小案例_vue+axios仿手机app)_Vuex优化购物车功能
一.前言 1.用vuex实现加入购物车操作 2.购物车详情页面 3.点击删除按钮,删除购物详情页面里的对应商品 二.主要内容 1.用vuex加入购物车 (1)在src ...
随机推荐
- macos 安装sublime text 3,如何安装插件
1. 上面的代码如下: import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1 ...
- 【原】Java学习笔记006 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...
- 【原】Java学习笔记004 - 运算符
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 运算符:对常量 或 ...
- eos 创建两对的公钥和私钥, 钱包,交易所转账到主网,主网到交易所
在ubuntu18.04上安装EOS的目的: 在ubuntu中,进行eos源码编译和安装 在不联网的安全环境下,用eos官方的命令行工具,创建自己的公钥和私钥 用eos官方的命令行工具,创建钱包,执行 ...
- Cs231n课堂内容记录-Lecture 7 神经网络训练2
Lecture 7 Training Neural Networks 2 课堂笔记参见:https://zhuanlan.zhihu.com/p/21560667?refer=intelligent ...
- Win10 Service'MongoDB Server' failed to start. Verify that you have sufficient privileges to start system services【简记】
最近工作中有需要用到 MongoDB数据库,以前用的3.*的版本,这次用的是较新4.0.6的版本,然后去官网下载安装. 安装到一半,就弹出如下提示,说是"MongoDB Server&quo ...
- phoenix API服务发布
概述 Elixir 的 Phoenix 框架对于开发 Web 应用非常方便,不仅有 RoR 的便利,还有 Erlang 的性能和高并发优势. 但是应用的发布涉及到 Erlang 和 Elixir 环境 ...
- 日志学习系列(三)——NLog基础知识
前边我们解释了log4net的学习,我们再介绍一下NLog 一.什么是NLog NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单 ...
- ThreadLocal的使用及原理分析
文章简介 ThreadLocal应该都比较熟悉,这篇文章会基于ThreadLocal的应用以及实现原理做一个全面的分析 内容导航 什么是ThreadLocal ThreadLocal的使用 分析Thr ...
- vue 使用localStorage解决vuex在页面刷新后数据被清除的问题
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...