1. 创建新分支
码云上创建功能分支:index-icons
,把该分支拉到本地,然后切换到该分支:
在
components
下创建Icons.vue
,取名HomeIcons
,
在Home
组件中引入并注册Icons
组件:
设置元素icon的样式,高度自适应为父元素宽度的一半:
2. 显示八个小图标
– 先观察其中的一个小图标icon的位置和样式:
– 首先我们要了解在CSS
中,margin
和padding
的百分比数值总是相对于父元素的宽度来计算的。利用这个特性,只要将padding-top
或者padding-bottom
设置为与width
相同的百分比,再将height
设为0,最后通过定位实现自适应的正方形盒子:
– 复制八个相同的
icon
的效果:
– 最后实现图标的内容,每一个小方格里有一张图标和说明文字,先实现第一个:
– 相应的样式代码:
.icon
position: relative
overflow: hidden
float: left
width: 25%
height: 0
padding-bottom: 25%
.icon-img
position: absolute
top: 0
left: 0
right: 0
bottom: .44rem /*给p标签留出来的位置*/
box-sizing: border-box
padding: .1rem
.icon-img-content
display: block
margin: 0 auto /*图片实现自动居中*/
height: 100%
.icon-desc
position: absolute
right: 0
left: 0
bottom: 0
height: .44rem
line-height: .44rem
color: $darkTextColor
text-align: center
– 最后复制八个图标的效果:
3. 图标区域逻辑实现
- 想要实现当有多于八个图标的时候可以左右循环拖动,将
Swiper.vue
组件中的代码(黄色部分)拷贝粘贴到icons标签中,包裹icon元素:
- bug
在图标下侧难以拖动,原因是Swiper-container
的高度和图片一样高,没有将icons
的高度完全包裹在内;:
解决:
将icons之后的样式往前移一级,和icons平级。并改写icons的样式内容:
这样在icons范围内左右滑动都会引起轮播图的效果。 - 此时显示的数据实际上是我们写死的,而在实际中应该是由后端传递过来的。下面定义一组数据:
遍历数组,显示内容:
- 实现分页
– 现在我们的第九个图标在轮播图中显示不出来,通过computed
属性实现分页:
computed: {
pages(){
// 最终分页结果
const pages=[]
// 遍历icon列表
this.iconList.forEach((item,index) => {
// 每8条为一页;例:0-7为第一页
// page为当前页码;
const page =Math.floor(index/8)
// 判断pages中当前页的存储数组是否已声明,未声明则声明当前页为数组格式;
if(!pages[page]){
pages[page]=[]
}
// 将当前icon信息放入对应的页码数组中;
pages[page].push(item)
})
// 返回分页之后的icon集合;
return pages
}
}
在这里下载插件vue devtools
调试工具,能帮助我们直观地理解,打开Chrome
:
控制台有Vue这一选项:
我们就可以看到各组件的结构,以及分页效果:
– 接下来循环有多少个轮播页面:
同时遍历的元素也由item of iconList
变为item of page
。最后会实现根据数据项的不同,自动化的构建页码,可以实现多页切换的效果。
4. 优化
当icon-desc
文字较长时,由于盒子宽度限制显示不完全,我们要借助一个css样式完成文字的省略。text-overflow:ellipsis;
–当文本溢出时是否显示省略标记。并不具备其它的样式属性定义。要实现溢出时产生省略号的效果还须定义:强制文本在一行内显示white-space:nowrap
及溢出内容为隐藏overflow:hidden;
,只有这样才能实现溢出文本显示省略号的效果。
方便全局修改,将这三个属性封装在styles
下面的一个mixins.styl
的文件里:
首先引入该文件:
然后直接使用别名:
5. 提交到线上
git add .
git commit -m add_icons
放到暂存区
git push
本地的代码就同步到线上了
git checkout master
master
上放的是整个工程的最新代码
git merge origin/index-icons
合并master
和index-icons
分支
git push