zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    pyecharts包学习笔记
    敏捷测试关键成功因素
    JMeter—常见问题(十四)
    性能测试面试题
    python-Tkinter整理总结
    JMeter—系统性能分析思路(十三)
    JMeter—监听器(十二)
    JMeter—断言(十一)
    yii2.0 的数据的 增
    Windows下安装 使用coreseek
  • 原文地址:https://www.cnblogs.com/joe235/p/12467743.html
Copyright © 2011-2022 走看看