标签:注意 首页 pre 问题: new slide turn 本地 center
接上篇 https://www.cnblogs.com/chenyingying0/p/12609330.html
首先说下格式化的问题:
vscode可以安装Vetur插件

安装之后重启编辑器,鼠标右键,有一个格式化代码选项,点击即可
首先放出文件路径,先让小伙伴们熟悉下结构

Navbar 组件:
在base目录下创建navbar目录,里面创建index.vue
<template>
<div class="mine-navbar">
<!-- v-if作用:插槽存在内容则显示,不存在则隐藏 -->
<div class="mine-navbar-left" v-if="$slots.left">
<slot name="left"></slot>
</div>
<div class="mine-navbar-center" v-if="$slots.center">
<slot name="center"></slot>
</div>
<div class="mine-navbar-right" v-if="$slots.right">
<slot name="right"></slot>
</div>
<h1 class="mine-navbar-title" v-if="title">
<!-- 解决flex布局和ellipsis布局冲突的问题 -->
<!-- 外面控制flex布局,里面控制ellipsis隐藏 -->
<span class="mine-navbar-text" v-text="title"></span>
</h1>
</div>
</template>
<script>
export default {
name:"MeNavbar",
props:{//过滤器
title:{
type:String,
default:‘‘
}
}
}
</script>
<style lang="scss" scoped>
@import ‘~assets/scss/mixins‘;
.mine-navbar{
@include flex-between();
height:50px;
background:#fff;
position:relative;
// &指代父元素
&-left{
margin-left:10px;
// 当left和center都不存在,设置right为绝对定位,避免它跑到左边
// ~代表该元素之后的兄弟元素
~.mine-navbar-right{
position:static;
}
}
&-center{
flex:1;
margin:0 10px;
~.mine-navbar-right{
position:static;
}
}
&-right{
margin-right:10px;
position:absolute;
right:0;
}
&-title{
position:absolute;
top:0;
left:0;
left:20%;
right:20%;
@include flex-center();
text-align:center;
}
&-text{
width:100%;
line-height:1.5;// 因为设置了溢出隐藏,当英文字母过高时会显示不全
font-size:18px;
@include ellipsis();
}
}
</style>
首页home目录下的header.vue
<template>
<div>
<MeNavbar class="header">
<i class="iconfont icon-scan" slot="left"></i>
<div slot="center">搜索框</div>
<i class="iconfont icon-msg" slot="right"></i>
</MeNavbar>
</div>
</template>
<script>
import MeNavbar from ‘base/navbar‘;
export default {
name:"HomeHeader",
components:{
MeNavbar
}
}
</script>
<style lang="scss" scoped>
// 引入前面需要加波浪线,否则会报错
@import "~assets/scss/mixins";
.header{
&.mine-navbar{
background:transparent;
}
.iconfont{
font-size:$icon-font-size;
color:$icon-color-default;
}
}
</style>
在_mixins.scss中新增flex-between

现在的效果:

幻灯片组件--swiper:https://www.npmjs.com/package/vue-awesome-swiper
首先下载 cnpm install swiper vue-awesome-swiper --save

模拟服务器端提供的数据 http://www.imooc.com/api/home/slider

因为要使用ajax发送请求,因此需要安装axios
cnpm install --save axios

在api目录下创建config.js,用来存放常量
export const SUCC_CODE=0;
export const TIMEOUT=10000;
在api目录下创建home.js,用来使用axios模拟从服务器获取slider数据
import axios from ‘axios‘; import {SUCC_CODE,TIMEOUT} from ‘./config‘; //获取幻灯片数据 ajax export const getHomeSliders=()=>{ // es6使用promise代替回调 // axios返回的就是一个promise // return axios.get(‘http://www.imooc.com/api/home/slider‘).then(res=>{ // console.log(res); // if(res.data.code===SUCC_CODE){ // return res.data.slider; // } // throw new Error(‘没有成功获取到数据‘); // }).catch(err=>{ // console.log(err); // //错误处理 // return [{ // linkUrl:‘www.baidu.com‘, // picUrl:require(‘assets/img/404.png‘) // }] // }); //演示超时错误 return axios.get(‘http://www.imooc.com/api/home/slider‘,{ timeout:TIMEOUT }).then(res=>{ console.log(res); if(res.data.code===SUCC_CODE){ return res.data.slider; } throw new Error(‘没有成功获取到数据‘); }).catch(err=>{ console.log(err); //错误处理 return [{ linkUrl:‘www.baidu.com‘, picUrl:require(‘assets/img/404.png‘) }] }); }
在base目录下创建slider目录,里面创建index.vue,这是基础的slider组件样式(可多个项目通用)
<template>
<div class="mine-slider">
<!-- 动态的属性前面加冒号 -->
<swiper :options="swiperOption" class="swiper-container">
<slot></slot>
<div class="swiper-pagination" v-if="pagination" slot="pagination"></div>
</swiper>
</div>
</template>
<script>
import { Swiper } from ‘vue-awesome-swiper‘;
export default {
name:"MeSlider",
components: {
Swiper
},
props:{
direction:{
type:String,
default:‘horizontal‘,
validator(value){
// 返回true则验证通过
return [
‘horizontal‘,
‘vertical‘
].indexOf(value)>-1;
}
},
interval:{//自动轮播
type:Number,
default:3000,
validator(value){
return value>=0;
}
},
loop:{//无缝滚动
type:Boolean,
default:true
},
pagination:{//分液器
type:Boolean,
default:true
}
},
data(){
return{
swiperOption:{
watchOverflow:true,//只有一张图片时不设置滚动效果
direction:this.direction,//滚动方向
autoplay:this.interval?{
delay:this.interval,
disableOnInteraction:false//手指滑动时是否停止自动轮播
}:false,
slidesPerView:1,//同时显示几张图片
loop:this.loop,//是否开启无缝滚动
pagination:{//分页器
el:this.pagination?‘.swiper-pagination‘:null
}
}
}
}
}
</script>
<style lang="scss" scoped>
@import ‘~assets/scss/mixins‘;
.swiper-container{
width:100%;
height:100%;
}
</style>
在main.js中引入swiper的css文件

把图片复制到home目录下,然后创建slider.vue,这是首页中的slider组件
<template>
<div class="slider-wrapper">
<!-- 分开传才能分开校验,因此不直接传入对象 -->
<MeSlider
:direction="direction"
:loop="loop"
:interval="interval"
:pagination="pagination"
v-if="sliders.length"
>
<swiper-slide v-for="(item,index) in sliders" :key="index">
<a :href="item.linkUrl" class="slider-link">
<img :src="item.picUrl" class="slider-img">
</a>
</swiper-slide>
</MeSlider>
</div>
</template>
<script>
import MeSlider from ‘base/slider‘;
import { SwiperSlide } from ‘vue-awesome-swiper‘;
import { sliderOptions } from ‘./config‘;
import { getHomeSliders } from ‘api/home‘;
export default {
name:"HomeSlider",
components:{
MeSlider,
SwiperSlide
},
data(){
return{
direction:sliderOptions.direction,
loop:sliderOptions.loop,
interval:sliderOptions.interval,
pagination:sliderOptions.pagination,
sliders:[],//这是从服务器读取
//这是静态写入
// sliders:[
// {
// linkUrl:‘www.baidu.com‘,
// picUrl:require(‘./1.jpg‘) //js中本地图片引入必须加require
// },
// {
// linkUrl:‘www.baidu.com‘,
// picUrl:require(‘./2.jpg‘)
// },
// {
// linkUrl:‘www.baidu.com‘,
// picUrl:require(‘./3.jpg‘)
// },
// {
// linkUrl:‘www.baidu.com‘,
// picUrl:require(‘./4.jpg‘)
// }
// ]
}
},
created(){
//一般在created里获取远程数据
this.getSliders();
},
methods:{
getSliders(){
getHomeSliders().then(data=>{
console.log(data);
this.sliders=data;
});
}
}
}
</script>
<style lang="scss" scoped>
// 引入前面需要加波浪线,否则会报错
@import "~assets/scss/mixins";
.slider-wrapper{
width:100%;
height:183px;
}
.slider-link{
display:block;
}
.slider-link,
.slider-img{
width:100%;
height:100%;
}
</style>
修改home目录下的index.vue,现在首页已经引入了头部,轮播图,底部,返回箭头
<template>
<div class="home">
<header class="g-header-container">
<!-- 没有内容自闭合即可-->
<HomeHeader/>
</header>
<div>
<HomeSlider></HomeSlider>
</div>
<div class="g-backup-container"></div>
<!-- 当前页面存在二级页面时需要使用router-view -->
<router-view></router-view>
</div>
</template>
<script>
import HomeHeader from ‘./header‘;
import HomeSlider from ‘./slider‘;
export default {
name:"Home",
components:{
HomeHeader,
HomeSlider
}
}
</script>
<style lang="scss" scoped>
// 引入前面需要加波浪线,否则会报错
@import "~assets/scss/mixins";
.home{
overflow:hidden;
width:100%;
height:100%;
background:$bgc-theme;
}
</style>
在home目录下新建config.js,配置首页中的轮播图的配置参数
//暴露一个常量 export const sliderOptions={ direction:"horizontal", loop:"loop", interval:1000, pagination:"pagination" }
修改下_container.scss,增加一些样式
@import "mixins"; .g-container{ position: relative; width:100%; height:100%; max-width:640px; min-width:320px; margin:0 auto; overflow:hidden; } .g-view-container{ height:100%; padding-bottom:$tabbar-height; // 注意移动端在reset文件里要设置box-sizing:border-box } .g-header-container{ position:absolute; left:0; top:0; width:100%; z-index:$navbar-z-index; } .g-footer-container{ position:absolute; left:0; bottom:0; width:100%; box-shadow:0 0 10px 0 hsla(0,6%,58%,0.6); z-index:$tabbar-z-index; } .g-backup-container{ position: absolute; z-index:$backtop-z-index; right:10px; bottom:$tabbar-z-index+10px; }
index.scss里的代码:
@charset "UTF-8";
@import "reset";
@import "base";
@import "icons"; // 引入时不需要写_icons.scss
@import "containers";
@import "tabbar";
成功获取轮播图时的效果

获取轮播图失败的效果图

标签:注意 首页 pre 问题: new slide turn 本地 center
原文地址:https://www.cnblogs.com/chenyingying0/p/12612393.html