实习日记---构建一个可以自动伸缩高度的组件

一、先说感悟

        这是我实习中第一次做一个c端的项目,是在原有的旧项目上,添设一个页面来作为导入口,将用户引导进入旧项目的首页中,来完成导流进而用户裂变。

        首先,我必须说,我很感谢我的主管,他能给我这样一个机会,我真的很感谢,尤其是我这样一个转行(想知道什么行,可以私信我~~)自学前端,没有任何真正的互联网项目经验,在做这个项目之前,我来到公司也已经一个月,主管王哥(下面为了亲切点,老说主管有点生疏,hhh,就叫王哥~~)为了让我熟悉Vue(入职前,自学的是react,Vue没学过hhh~~~感觉现在回头看好丢人~~),并且明白git操作流程(对,你没看错,野生的程序员真的~~~不会),工作时的前后端交流,与设计和产品的沟通,等等,所以先让我做了后台的项目,也就是在原有项目上,自己一边熟悉流程,一边自学Vue,然后实操到项目上。

        还好也就是,我在找实习之前,自己用react照猫画虎写过一个权限管理系统,所幸的是让我接手的项目也差不多是一个后台管理项目,代码逻辑上还是比较清晰,就是不会Vue的语法,而且是给内部人员用的,所以可能在css样式上要求不高,用公司原有写好的Vue组件,花了一点时间,静下心来理解了各个参数的意义,参照其他用过这个组件的页面,虽然过程比较艰辛,但是还是完成了交给我的任务,我觉得那一个月我的成长真的是每天的肉眼可见~~~啊啊啊。

        在慢慢熟悉了公司的流程之后,以及一系列的铺垫之后,正好那段时间项目多,组里其他的大佬们腾不出手,王哥就安排我和另一位实习生,去做我今天要将讲的这个项目,说实话我当时还是挺激动的,毕竟是第一次做一个真正的项目,而且还是联合某国际大品牌的全国所有线下店一起做的活动,我当时一想,回去又能和女票、兄弟们吹一波了!!!,狂笑~~~skr~。

        第一次写CSDN,突然一看标题,淦,有点偏,赶紧回归主题!!!

二、设计的起因

        做任何事情,说实话,就是某个大聪明的那句,我从哪来,我到哪去。

        这句话对应到制作一个组件我觉得也就是两句话,你为啥要做这个组件,你要啥效果。

2.1、为啥设计这个组件

        第一,节省后续的时间成本,第二,代码可复用,提高协作效率,第三也可以减少一部分css中background-img的url请求。

2.1.1、 节省后续的时间成本

        这一点,我真的是后知后觉,我也是现在回想起来,才对组件化有了很深的感知,在设计之初,当然要自己想很多,dom的结构以及与Vue语法的结合,设不设置props来接受参数,进而通过js来控制组件的高度(说白了就是js来计算得出高度,这个后面详细来说,当时的设计思路与难处)等,所以当时做的时候,还是比较疑惑的,觉得自己和设计商量一下,让设计小姐姐切一张底图,虽然每一个页面,每一个状态的底图可能宽高不一致,但是比较给一个div,加上一组background-img,repeat,size也可以很好的解决,就是多写点css,但是王哥给了我很大的帮助与鼓励,让我去尝试写,一方面锻炼自己,一方面真的就是我后来在使用中才发现,真香。

        当我写好了这个Frame组件后,并且以这个frame为基础,扩展出了一个固定头部的组件以及一个可以使用者自己传入avatar的AvatarFrame。这一下,就是三个组件,并且由于与设计小姐姐的沟通,在统一一个基本的样式之后,这三个组件就已经全部覆盖了所有需要替换底图的新页面与旧页面,极大的节省与设计沟通的时间,降低了设计突然更换样式后,还需要全部换底图的风险与时间成本。

        这样的一个基本Frame框架,再依次为基础,发展出了可以放用户头像的AvatarFrame以及换了头部但是固定的SelectFrame等等Frame类组件,节省了大量时间。

        在后面的使用中,与我的小伙伴们,进行简单的沟通之后,就可以让使用者很快地上手,而不用为了一张张的底图去和设计商量,宽高等,很浪费时间,也很消耗效率和开发体验!!

2.1.2、 代码复用,提升效率

        对于我这样的一个新手来说,对于业务的不理解,对于原来代码的阅读的恐惧,还有就是比较拉跨的就是,毕竟其实也就是刚刚接触前端半年,Vue满打满算也就是一个月,所以编程的效率很低,而能够提前完成一个之后可以完全放心复用的组件,真的可以让你很放心,而且其他小伙伴在开发其他页面时,可以先跳过带有底图边框的部分,进行开发,等我做好以后直接放进去,也对于团队协作的效率有很大的提高。

2.1.3、 减少一部分css中background-img的url请求

        这个应该是我的粗鄙之见,前端优化,一直是一个热门的话题,减少url请求,就是其中优化的一部分,当时在工作中要的底图都是切好后,内部网站进行处理并且压缩后发给你一个url,你来请求它,如果,是多个不同url,浏览器就会多次请求,而如果是同一个Frame下的url都是一样,并且我们都知道get请求url,会缓存起来,如果相同的请求发生后,会直接走缓存,也算是意外的优化吧!!!

2.2、 组件的效果

<div class="container">
  <div class="header"></div>
  <div class="mid">
     <slot></slot> <!-- 这是放入需要底图内部内容 -->
  </div>
  <div class="down"></div>
</div>
// 这是Frame组件
<style lang="sass" scoped>
  .container {
    position: relative;
    .header {
      position: relative;
      padding-top: 22%;
      background-size: 100% 100%;
      background-image: url(//你的图片地址);
    }
    .mid {
      // 中间放置一px的线就好了,通过slot可以自动撑开
      position: relative;
      background-repeat: repeat-y;
      background-image: url(//你的图片地址);
      z-index: 2; // 这个是为了你插入的元素块设置 上下margin时 不被上下的dom盖住
    }
    .down {
      position: relative;
      padding-top: 22%;
      background-size: 100% 100%;
      background-image: url(//你的图片地址);
    }
  }
 // Frame的css
</style>

        在高度方面,我设计的是上图的dom结构,当Frame中传入一个大的div(里面放入你需要的结构),可以自动撑开这个Frame,原因是.mid的div没有设置height由其中的子元素撑开。当然,如果与设计小姐姐的沟通没有到位(~~~怕被打)或者是底图中的头部元素中必须包含一部分无法剪切的部分,导致传给你的header与footer的上底图与下底图的原始高度比较高也就是paddingTop的百分比要很大,会导致出现一种上底图与下底图的高度很高,就会显得很傻,这时候就可以给class为mid这个dom设置margin-top,margin-bottom为负值,来控制中间部分与上顶部、下底部的距离,如此基本上就可以实现高度的自动适应。而宽度,由于.container的width的default值为auto(没有设置border、padding、margin),也就是给这个Frame包一个div,并且设置其宽度就可以间接控制Frame组件的宽度!!!

        只要使用者把事先写好的一个div放入,就可以通过一个依据你的内容的height+你的内容的margin-top、bottom的负值或者(没有也可以,如果你的Frame组件的中header、footer的底图高度比例很合理,看着不怪)来控制你的高度。

        而宽度直接可以通过你的包裹的width来控制。

<div class="你的包裹">
  <Frame> <!-- 你的Frame -->
    <div class="你的内容"></div>
  </Frame>
</div>

三、最后

        感觉还是实习快乐啊,而且学东西就能用得上,就算是不会,也必须硬着头皮上,虽然这个过程你可能头皮发麻,四肢发冷,腰部发酸,但是做出来了之后的感觉还真是非常的好啊!不能再打字了,为了打字,总结,分享,女朋友的视频电话忘接了,估计一会,又不免一场王老师大课堂了!!!

        希望大家都可以快乐学习,快乐工作呀!!!加油!

  

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值