Vue2.5 旅游项目实例5 首页-图标区域的布局代码

还是在远程创建分支 :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
原文地址:https://www.cnblogs.com/joe235/p/12467743.html