閒雲旅遊專案開發-(第一篇:使用Element-ui實現主頁輪播圖)
業務需求:
- 初始化佈局
- 頁頭頁尾公共元件
- 首頁輪播圖
一 初始化預設全域性佈局
nuxtjs 提供了一個公共元件 layouts/default.vue,相當於以前的 app.vue 。該佈局元件預設作用於所有的頁面,所以我們可以再這裡加上一些公共的樣式
layouts/default.vue
程式碼如下:
<template>
<div>
<!-- 這裡相當於我們以前的app.vue -->
<pageHeader></pageHeader>
<!-- <Nuxt /> 相當於 <router-view></router-view> -->
<Nuxt />
<pageFooter></pageFooter>
</div>
</template>
<script>
import pageHeader from "@/components/pageHeader.vue";
import pageFooter from "@/components/pageFooter.vue";
export default {
components: {
pageHeader,
pageFooter
}
};
</script>
<style>
html {
font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
word-spacing: 1px;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
}
.button--green {
display: inline-block;
border-radius: 4px;
border: 1px solid #3b8070;
color: #3b8070;
text-decoration: none;
padding: 10px 30px;
}
.button--green:hover {
color: #fff;
background-color: #3b8070;
}
.button--grey {
display: inline-block;
border-radius: 4px;
border: 1px solid #35495e;
color: #35495e;
text-decoration: none;
padding: 10px 30px;
margin-left: 15px;
}
.button--grey:hover {
color: #fff;
background-color: #35495e;
}
</style>
二 新建公共元件
1.思路
1.在components 資料夾中新建所有頁面統一的頭部元件和頁尾元件
2.在預設佈局中 layouts/default.vue中 匯入公共元件並使用
元件約定:公共元件不需要放到子資料夾中:如下圖
頭部下拉選單元件文件:https://element.eleme.cn/#/zh-CN/component/dropdown#ji-chu-yong-fa
2.實現步驟
2.1 頭部元件
components/pageFooter.vue 檔案程式碼如下:
<template>
<header class="header">
<el-row type="flex" justify="space-between" class="main">
<!-- logo -->
<div class="logo">
<nuxt-link to="/">
<img src="http://157.122.54.189:9093/images/logo.jpg" alt />
</nuxt-link>
</div>
<!-- 選單欄 -->
<el-row type="flex" class="navs">
<nuxt-link to="/">首頁</nuxt-link>
<nuxt-link to="/post">旅遊攻略</nuxt-link>
<nuxt-link to="/hotel">酒店</nuxt-link>
<nuxt-link to="/air">國內機票</nuxt-link>
</el-row>
<!-- 登入/使用者資訊 -->
<el-row type="flex" align="middle">
<el-dropdown v-if="false">
<el-row type="flex" align="middle" class="el-dropdown-link">
<nuxt-link to="#">
<img src="http://157.122.54.189:9093/images/pic_sea.jpeg" />
使用者名稱
</nuxt-link>
<i class="el-icon-caret-bottom el-icon--right"></i>
</el-row>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>
<nuxt-link to="#">個人中心</nuxt-link>
</el-dropdown-item>
<el-dropdown-item>
<div>退出</div>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!-- 不存在使用者資訊展示登入註冊連結 -->
<nuxt-link to="/user/login" class="account-link" v-else>登入 / 註冊</nuxt-link>
</el-row>
</el-row>
</header>
</template>
<script>
export default {
computed: {
};
</script>
<style scoped lang="less">
.header {
height: 60px;
line-height: 60px;
background: #fff;
border-bottom: 1px #ddd solid;
box-shadow: 0 3px 0 #f5f5f5;
box-sizing: border-box;
.main {
width: 1000px;
margin: 0 auto;
}
.logo {
width: 156px;
padding-top: 8px;
img {
display: block;
width: 100%;
}
}
.navs {
margin: 0 20px;
flex: 1;
a {
display: block;
padding: 0 20px;
height: 60px;
box-sizing: border-box;
&:hover,
&:focus,
&:active {
border-bottom: 5px #409eff solid;
color: #409eff;
}
}
// 選單高亮時的顏色
/deep/ .nuxt-link-exact-active {
background: #409eff;
color: #fff !important;
}
}
.message {
height: 36px;
line-height: 1;
cursor: pointer;
.el-icon-bell {
margin-right: 2px;
font-size: 18px;
}
}
.el-dropdown-link {
margin-left: 20px;
&:hover {
img {
border-color: #409eff;
}
}
a {
display: block;
}
img {
width: 32px;
height: 32px;
vertical-align: middle;
border: 2px #fff solid;
border-radius: 50px;
}
}
.account-link {
font-size: 14px;
margin-left: 10px;
color: #666;
&:hover {
color: #409eff;
text-decoration: underline;
}
}
}
</style>
2.2 頁尾元件
在components/pageFooter.vue的程式碼如下:
<template>
<div class="footer-wrapper">
<div class="footer">
<el-row class="info-list">
<el-col :span="6" :offset="1">
<h5>閒雲旅遊旅遊網</h5>
<p>上億旅行者共同打造的"旅行神器"</p>
<p>
<span>60,000</span> 多個全球旅遊目的地
</p>
<p>
<span>600,000</span> 個細分目的地新玩法
</p>
<p>
<span>760,000,000</span> 次攻略下載
</p>
<p>
<span>38,000</span> 家旅遊產品供應商
</p>
</el-col>
<el-col :span="5">
<h5>關於我們</h5>
<p>隱私政策 商標宣告</p>
<p>服務協議 遊記協議</p>
<p>商城平臺服務協議</p>
<p>網路資訊侵權通知指引</p>
<p>閒雲旅遊旅遊網服務監督員</p>
<p>網站地圖加入閒雲旅遊</p>
</el-col>
<el-col :span="5">
<h5>旅行服務</h5>
<p>旅遊攻略 酒店預訂</p>
<p>旅遊特價 國際租車</p>
<p>旅遊問答 旅遊保險</p>
<p>旅遊指南 訂火車票</p>
<p>旅遊資訊 APP下載</p>
</el-col>
<el-col :span="6" class="scan">
<p>
<img src="http://157.122.54.189:9093/images/1556522965.png" alt />
</p>關注我們
</el-col>
</el-row>
<div
class="licence"
>京ICP備08001421號 京公網安備110108007702 Copyright © 2016-2019 博學谷 All Rights Reserved</div>
</div>
</div>
</template>
<script>
export default {};
</script>
<style scoped lang="less">
.footer-wrapper {
background: #333;
color: #ccc;
min-width: 1000px;
}
.footer {
padding-top: 30px;
margin: 0 auto;
width: 1000px;
}
.info-list {
h5 {
font-weight: normal;
font-size: 16px;
margin-bottom: 10px;
}
p {
font-size: 12px;
line-height: 1.8;
span {
color: orange;
}
}
}
.scan {
text-align: center;
img {
width: 140px;
height: 140px;
}
font-size: 12px;
}
.licence {
border-top: 1px #666 solid;
margin-top: 20px;
padding: 50px 0;
text-align: center;
font-size: 12px;
}
</style>
3 總結:
- layouts.default.vue 是預設的佈局元件,會作用於任何頁面
- 在layouts/default.vue 中匯入全域性的頭部元件和頁尾元件,就可以檢視到基本的頁面效果了
三 首頁輪播圖
1. 思路
- 使用 Element-ui 的幻燈片元件 el-carousel,新增首頁的輪播圖佈局
- 請求後端介面替換靜態圖片資料
2.實現步驟
2.1 新增輪播圖佈局
- 首頁的輪播圖佈局,pages/index.vue 是在 layouts/default.vue 中的 </nuxt>中渲染
- banners 是我們自己構建的一個死資料陣列, 用來遍歷之後生成多張圖片進行輪播
<template>
<div class="container">
<!-- 幻燈片 -->
<el-carousel
:interval="5000"
arrow="always">
<el-carousel-item
v-for="(item, index) in banners"
:key="index">
<div class="banner-image"
:style="`
background:url(${item.url}) center center no-repeat;
background-size:contain contain;
`">
</div>
</el-carousel-item>
</el-carousel>
</div>
</template>
<script>
export default {
data(){
return {
// 輪播圖資料
banners: [
{
url: "http://157.122.54.189:9095/assets/images/th03.jfif",
},
{
url: "http://157.122.54.189:9095/assets/images/th04.jfif",
}
]
}
}
}
</script>
<style scoped lang="less">
.container{
min-width:1000px;
margin:0 auto;
position:relative;
/deep/ .el-carousel__container{
height:700px;
}
.banner-image{
width:100%;
height:100%;
}
}
</style>
2.2 請求後端介面資料
<script>
export default {
data(){
return {
banners: [] //輪播圖資料存放
}
},
mounted(){
this.$axios({
url:"/scenics/banners"
}).then(res=>{
const {data} = res.data;
})
}
}
</script>
this.$axios能使用 是因為 nuxt 已經幫我們繫結了
2.3 修改 template 的圖片地址,新增 $axios.defaults.baseURL,因為介面返回的圖片連結時相對連結
<!-- 首頁輪播圖 -->
<template>
<el-carousel :interval="5000" arrow="always">
<el-carousel-item v-for="(item,index) in banners" :key="index">
<div
class="banner-image"
:style="`
background:url(${$axios.defaults.baseURL}${item.url}) center center no-repeat;
background-size:contain contain;
`"
>{{$axios.defaults.baseURL}}{{item.url}}</div>
</el-carousel-item>
</el-carousel>
</template>
3.總結
- 使用Element-ui的幻燈片元件 el-carousel 實現輪播圖,開始顯示固定資料,固定的圖片
- 使用this.$axios 請求後臺輪播圖介面 獲取資料
- 在模板中使用$axios.defaults.baseURL 補全圖片地址進行顯示
相關文章
- 直播app開發,首頁輪播圖效果實現APP
- Vue專案中使用better-scroll實現一個輪播圖Vue
- 網頁佈局------輪播圖效果實現網頁
- ViewPage實現輪播圖View
- Banner實現輪播圖
- js實現輪播圖JS
- HBuilder開發詞典app(三)--主頁圖文輪播和新聞列表UIAPP
- vue專案中使用swiper實現中間大,兩邊小的輪播圖Vue
- Vue+Django 旅遊網專案 首頁前端實現VueDjango前端
- Luffy /3/ 前臺主頁搭建&輪播圖介面
- 直播平臺開發,使用swiper實現輪播效果
- 如何使用RecyclerView打造首頁輪播圖View
- 原生js實現輪播圖JS
- JavaScript實戰專案:移動端 Touch 輪播圖JavaScript
- 使用jQuery實現的平滑滾動輪播圖jQuery
- 兩種方式實現輪播圖
- 原生JS實現輪播圖的效果JS
- vue元件之輪播圖的實現Vue元件
- 用CSS實現一個輪播圖CSS
- [分享會]只用CSS實現輪播圖CSS
- 短視訊軟體開發,實現簡單的輪播圖效果
- 直播app開發,實現輪播圖上下自動滑動展示效果APP
- ViewFlipper探索與使用——順便實現Android圖片輪播ViewAndroid
- java學習---前端---使用JavaScript和jQuery實現圖片輪播圖前端JavaScriptjQuery
- Vue之網易雲音樂PC版輪播圖的實現Vue
- 用原生js實現圖片輪播器JS
- vue元件之路之輪播圖的實現Vue元件
- luffy04-首頁輪播圖介面
- 景點旅遊專案深入開發精品夜間旅遊文化藝術
- jQuery輪播圖之上下輪播jQuery
- 基於 flex 的 order 實現 carousel 輪播圖Flex
- 仿小米官網輪播圖(Banner)的實現
- 藉助 :has 實現3d輪播圖3D
- 直播app原始碼,HTML + jQuery 實現輪播圖APP原始碼HTMLjQuery
- JQuery實現圖片輪播無縫滾動jQuery
- 輪播圖
- Axure實現輪播效果
- jQuery實現輪播效果jQuery