还是在远程创建分支 :index-icons
拉到本地并切换分支:
git pull
git checkout index-icons
在homecomponents目录下新建Icons.vue文件,
然后在Home.vue文件中引用:
<template> <div> <home-header></home-header> <home-swiper></home-swiper> <home-icons></home-icons> </div> </template> <script> import HomeHeader from './components/Header' import HomeSwiper from './components/Swiper' import HomeIcons from './components/Icons' export default { name: 'Home', components: { HomeHeader, HomeSwiper, HomeIcons }, data () { return { } } } </script>
回到Icons.vue继续编辑代码:
<template> <div class="icons"> <div class="icon"> <div class="icon-img"> <img src="https://imgs.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png" /> </div> <p class="icon-desc">热门景点</p> </div> </div> </template> <style lang="stylus" scoped> @import '~styles/varibles.styl'; .icons 100% height:0 overflow: hidden padding-bottom: 50% .icon position: relative overflow: hidden float: left 25% padding-bottom: 25% .icon-img position :absolute top:0 left:0 right:0 bottom:.44rem box-sizing: border-box padding :.1rem img height:100% display:block margin: 0 auto .icon-desc position :absolute left:0 right:0 bottom:0 height: .44rem line-height: .44rem text-align:center color: $darkTextColor </style>
下面实现循环,超出8个图标时,可以实现左右拖动效果。
先把swiper.vue的代码拷贝过来:
<template> <div class="icons"> <swiper> <swiper-slide> <div class="icon"> <div class="icon-img"> <img src="https://imgs.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png" /> </div> <p class="icon-desc">热门景点</p> </div> </swiper-slide> <swiper-slide> <div class="icon"> <div class="icon-img"> <img src="https://imgs.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png" /> </div> <p class="icon-desc">热门景点</p> </div> </swiper-slide> </swiper> </div> </template> <style lang="stylus" scoped> @import '~styles/varibles.styl'; .icons >>> .swiper-containter 100% height:0 padding-bottom: 50% .icon position: relative overflow: hidden float: left 25% padding-bottom: 25% .icon-img position :absolute top:0 left:0 right:0 bottom:.44rem box-sizing: border-box padding :.1rem img height:100% display:block margin: 0 auto .icon-desc position :absolute left:0 right:0 bottom:0 height: .44rem line-height: .44rem text-align:center color: $darkTextColor </style>
现在可以实现左右滑动功能了,下面来实现数据循环
要写一个计算属性来实现页码的展示:
// 计算属性 computed: { pages () { const pages = [] this.iconList.forEach((item, index) => { const page = Math.floor(index / 8) if (!pages[page]) { pages[page] = [] } pages[page].push(item) }) return pages } }
实现循环:
<template> <div class="icons"> <swiper> <swiper-slide v-for="(page, index) in pages" :key="index"> <div class="icon" v-for="item in page" :key="item.id"> <div class="icon-img"> <img :src="item.imgUrl" /> </div> <p class="icon-desc">{{item.desc}}</p> </div> </swiper-slide> </swiper> </div> </template> <script> export default { name: 'HomeIcons', data () { return { iconList: [ { id: '0001', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png', desc: '热门景点' }, { id: '0002', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/76/eb88861d78fb9902.png', desc: '北海公园' }, { id: '0003', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/6c/9e54a8540fee0102.png', desc: '故宫' }, { id: '0004', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/4c/eac47dd8def8de02.png', desc: '北京园博园' }, { id: '0005', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1804/5a/13ceb38dcf262f02.png', desc: '一日游' }, { id: '0006', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/67/9a1678221b8e0e02.png', desc: '古北水镇' }, { id: '0007', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/fc/b10a6b2e4f0fe102.png', desc: '北京滑雪' }, { id: '0008', imgUrl: 'https://mp-piao-admincp.qunarzz.com/mp_piao_admin_mp_piao_admin/admin/20193/a40ee278d67000f2a29d2e20f6a029b3.png', desc: '凤凰岭' }, { id: '0009', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/ab/6f7d6e44963c9302.png', desc: '泡温泉' }, { id: '0010', imgUrl: 'https://imgs.qunarzz.com/piao/fusion/1803/47/c2b659e048b11602.png', desc: '中国马镇' } ] } }, // 计算属性 computed: { pages () { const pages = [] this.iconList.forEach((item, index) => { const page = Math.floor(index / 8) if (!pages[page]) { pages[page] = [] } pages[page].push(item) }) return pages } } } </script> <style lang="stylus" scoped> @import '~styles/varibles.styl'; .icons >>> .swiper-containter 100% height:0 padding-bottom: 50% .icon position: relative overflow: hidden float: left 25% padding-bottom: 25% .icon-img position :absolute top:0 left:0 right:0 bottom:.44rem box-sizing: border-box padding :.1rem img height:100% display:block margin: 0 auto .icon-desc position :absolute left:0 right:0 bottom:0 height: .44rem line-height: .44rem text-align:center color: $darkTextColor overflow :hidden white-space: nowrap text-overflow :ellipsis </style>
文字超出隐藏在别的地方也会经常使用,所以我们需要封装下,在assetsstyles下新建一个mixins.styl文件:
ellipsis()
overflow :hidden
white-space: nowrap
text-overflow :ellipsis
然后在Icons.vue中引用和使用:
@import '~styles/mixins.styl'
、、、
.icon-desc
position :absolute
left:0
right:0
bottom:0
height: .44rem
line-height: .44rem
text-align:center
color: $darkTextColor
ellipsis()
此时效果:
下面提交代码:
git add .
git commit -m "图标区域代码"
git push
合并到master:
git checkout master
git merge index-icons
git push