Vue学习笔记-项目开发2.3icon组件的分页

1、组件分页效果的实现
①在轮播图的基础上将Swiper.vue组件中的Swiper标签复制到icon中

<swiper>
   <swiper-slide>
     <div class="icon">
       <div class="icon-img">
         <img class='icon-img-content' src='XXX'>
       </div>
       <p class="icon-desc">
       </p>
     </div>
   </swiper-slide>
 </swiper>

②然后在组件中添加data数据: iconList数组 数据量自己加

<script>
export default {
  name: 'HomeIcons',
  data: () => {
    return {
      iconList: [{
        id: '001',
        imgUrl: 'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
        desc: '热门景点'
      }, {
        id: '002',
        imgUrl: 'http://img1.qunarzz.com/piao/fusion/1804/5a/13ceb38dcf262f02.png',
        desc: '一日游'
      }, {
        id: '003',
        imgUrl: 'http://img1.qunarzz.com/piao/fusion/1804/ff/fdf170ee89594b02.png',
        desc: '厦门必游'
      }, {
        id: '004',
        imgUrl: 'http://img1.qunarzz.com/piao/fusion/1803/97/02f5043b51b2102.png',
        desc: '鼓浪屿'
      }, {
        id: '005',
        imgUrl: 'http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png',
        desc: '热门景点'
      }]
    }
  },

③然后使用v-for循环

  <div class="icons">
    <swiper>
      <swiper-slide>
        <div class="icon" v-for="item of iconList" :key="item.id">
          <div class="icon-img">
            <img class='icon-img-content' :src='item.imgUrl'>
          </div>
          <p class="icon-desc">
            {{item.desc}}
          </p>
        </div>
      </swiper-slide>
    </swiper>
  </div>

2、分页效果(计算属性)
按照上述编码,基本可以实现组件轮播效果,但是当图标数量超过当前位置的布局之后,会将图标隐藏,即如目前项目中当出现第9个图标的时候,会再另起一行(被隐藏起来,但是F12那边是可以看得到位置是在第三行)而不是到第二个分页

 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
    }
  }

通过计算函数,计算出分页效果,将每一页的组件放在一个list中,然后循环显示页再循环显示每一页中的图标即可

  <div class="icons">
    <swiper>
      <swiper-slide v-for="(page, index) of pages" :key="index">
        <div class="icon" v-for="item of page" :key="item.id">
          <div class="icon-img">
            <img class='icon-img-content' :src='item.imgUrl'>
          </div>
          <p class="icon-desc">
            {{item.desc}}
          </p>
        </div>
      </swiper-slide>
    </swiper>
  </div>

3、图标名称长度超限设置成…
在这里插入图片描述
如图中rrrrrrrrrrrr,显示成rrrrrr… 我要咋做?
我只需要在.icon-desc类中添加CSS样式:

  overflow: hidden
  white-space: nowrap
  text-overflow: ellipsis

【注】:如果这个样式在别的地方也想用到,但是又不想重复写代码
以目前项目为例
》新建src/assets/style/mixins.styl
》然后新建函数,将此样式写进函数中

ellipsis()
  overflow: hidden
  white-space: nowrap
  text-overflow: ellipsis

》然后在.Icons.vue的< style>中导入该文件
@import ‘~styles/mixins.styl’
》然后在.icon-desc中添加ellipsis()函数即可

    .icon-desc
      position: absolute
      left: 0
      right: 0
      bottom: 0
      height: .44rem
      line-height: .44rem
      text-align: center
      color: $darkTextColor
      ellipsis()

最终样式:
在这里插入图片描述
3A、CSS样式和JS函数的作用
》js: forEach(function()):迭代数组。每迭代一次就执行后面的函数。并且能够传值给后面的函数。
》Math.floor(x):返回小于或等于x的最大整数(简称向下取整)
比如:
Math.floor(44.333) 返回44
Math.floor(56.99) 返回56
》white-space: nowrap: 设定文本不换行,直到
》text-overflow: ellipsis:当文本溢出包含元素时使用…来替代

发布了26 篇原创文章 · 获赞 1 · 访问量 765

猜你喜欢

转载自blog.csdn.net/Kasey_L/article/details/104653093