开始

好友列表组件。划分为左中右 三部分。
左边是一个头像,右边是一个按钮。中间分为上下两行,第一行是昵称,第二行是性别和年龄。

image.png
性别和年龄,之前开发过这个小组件。在动态页。
image.png

image.png

image.png

单独封装性别年龄组件

image.png
在common下继续新建组件。tag-sex-age.vue
image.png
复制过去
image.png
注意sex和age要改掉。改成当前自己组件内的变量

  1. <view class="tag-sex icon iconfont icon-nan"
  2. :class="[sex==0?'icon-nan':'icon-nv']">{{age}}</view>

复制css
image.png

  1. .tag-sex {
  2. background: #007AFF;
  3. color: #FFFFFF;
  4. font-size: 23upx;
  5. padding: 5upx 10upx;
  6. margin-left: 10upx;
  7. border-radius: 20upx;
  8. line-height: 22upx;
  9. }

image.png

  1. <script>
  2. export default{
  3. props:{
  4. sex:Number,
  5. age:Number
  6. }
  7. }
  8. </script>

引入组件
image.png

  1. import tagSexAge from '@/components/common/tag-sex-age.vue';
  2. tagSexAge

image.png

  1. <tag-sex-age :sex="item.sex" :age="item.age"></tag-sex-age>

原有动态页不影响
image.png

好友列表-结构

左边是头像,中间是上下两行
image.png

  1. <!-- 好友列表 -->
  2. <view class="user-list">
  3. <image src="../../static/demo/userpic/12.jpg" mode="widthFix"
  4. lazy-load="true"></image>
  5. <view>
  6. <view>昵称</view>
  7. <view></view>
  8. </view>
  9. </view>

中间第二行是性别和年龄的组件
image.png

  1. import tagSexAge from '@/components/common/tag-sex-age.vue';
  2. tagSexAge

年龄和岁数先写死。
image.png

  1. <tag-sex-age age="20" sex="0"></tag-sex-age>

最右侧的对号,
image.png

image.png
加个flex布局,横向排列
image.png

  1. <view class="user-list u-f-ac">

头像的宽度和高度,圆角
image.png

  1. .user-list>image{
  2. width: 100upx;
  3. height: 100upx;
  4. border-radius: 100%;
  5. }

向右的外边距。因为是flex布局,不希望它被压缩,所以使用flex-shrink
image.png

  1. .user-list>image{
  2. width: 100upx;
  3. height: 100upx;
  4. border-radius: 100%;
  5. margin-right: 20upx;
  6. flex-shrink: 0;
  7. }

最外层,一条线。上下都有内边距
image.png

image.png

  1. .user-list{
  2. padding: 20upx 0;
  3. border-bottom: 1upx solid #EEEEEE;
  4. }

最右侧,对号,固定的宽度80,中间用flex:1表示占剩余的宽度。
image.png
为了布局效果明显一点。都加上背景色。
image.png

  1. .user-list>view:first-of-type{
  2. flex: 1;
  3. background: #007AFF;
  4. }
  5. .user-list>view:last-of-type{
  6. width: 80upx;
  7. background: yellow;
  8. }

图标水平垂直居中。
image.png

  1. <view class="icon iconfont icon-xuanze-yixuan u-f-ajc"></view>

上下的内边距。
image.png
首先去掉颜色
image.png
这里漏了单位
image.png
和窗口也是有间距的
image.png

最外层的class加一个body
image.png

  1. <view class="body">

上下为0,左右为20upx
image.png

  1. .body{
  2. padding: 0 20upx;
  3. }

性别年龄组件的样式有点问题。
image.png
组件外层再嵌套一个view组件。
image.png

  1. <view>
  2. <tag-sex-age age="20" sex="0"></tag-sex-age>
  3. </view>

image.png
把这个view转成了行内快元素,不知道这里具体是为啥?。。。。
image.png

  1. <view style="display: inline-block;">

image.png

昵称字体字体调大
image.png
吸取对号图标的颜色
image.png

image.png

image.png

本节代码

  1. <template>
  2. <view class="body">
  3. <!-- tabbar切换 -->
  4. <swiper-tab-head
  5. :tabBars="tabBars"
  6. :tabIndex="tabIndex"
  7. @tabtap="tabtap"
  8. scrollStyle="border-bottom:0;"
  9. scrollItemStyle="width:33%;">
  10. </swiper-tab-head>
  11. <!-- 好友列表 -->
  12. <view class="user-list u-f-ac">
  13. <image src="../../static/demo/userpic/12.jpg" mode="widthFix"
  14. lazy-load="true"></image>
  15. <view>
  16. <view>昵称</view>
  17. <view style="display: inline-block;">
  18. <tag-sex-age age="20" sex="0"></tag-sex-age>
  19. </view>
  20. </view>
  21. <view class="icon iconfont icon-xuanze-yixuan u-f-ajc"></view>
  22. </view>
  23. </view>
  24. </template>
  25. <script>
  26. import swiperTabHead from '@/components/index/swiper-tab-head.vue';
  27. import tagSexAge from '@/components/common/tag-sex-age.vue';
  28. export default {
  29. components:{
  30. swiperTabHead,
  31. tagSexAge
  32. },
  33. data() {
  34. return {
  35. tabIndex: 0,
  36. tabBars: [{
  37. name: "互关",
  38. id: "huguan",
  39. num:10
  40. },
  41. {
  42. name: "关注",
  43. id: "guanzhu",
  44. num:20
  45. },
  46. {
  47. name: "粉丝",
  48. id: "fensi",
  49. num:30
  50. },
  51. ]
  52. }
  53. },
  54. onNavigationBarButtonTap(e) {
  55. if(e.index==0){
  56. uni.navigateBack({
  57. delta:1
  58. })
  59. }
  60. },
  61. methods: {
  62. // tabbar点击事件
  63. tabtap(index) {
  64. this.tabIndex = index;
  65. }
  66. }
  67. }
  68. </script>
  69. <style>
  70. .body{
  71. padding: 0 20upx;
  72. }
  73. .user-list{
  74. padding: 20upx 0;
  75. border-bottom: 1upx solid #EEEEEE;
  76. }
  77. .user-list>image{
  78. width: 100upx;
  79. height: 100upx;
  80. border-radius: 100%;
  81. margin-right: 20upx;
  82. flex-shrink: 0;
  83. }
  84. .user-list>view:first-of-type{
  85. flex: 1;
  86. /* background: #007AFF; */
  87. }
  88. .user-list>view:first-of-type>view:first{
  89. font-size: 35upx;
  90. }
  91. .user-list>view:last-of-type{
  92. width: 80upx;
  93. color: #CCCCCC;
  94. /* background: yellow; */
  95. }
  96. </style>

结束