自己封装一个公共组件,多配置。怎么拥有一个属于自己的组件轮子,并且是可复用的。例子为:返回顶部按钮组件

每个人都会拥有属于自己的轮子,如果你还不会,或者封装的不够好,看了接下来的文章,对你或许有帮助,你也试着封装一个复用高效的轮子


文章目录

  • 一、为什么要封装组件?
    • 组件是什么
  • 二、怎么封装一个复用组件?
    • 效果图展示
    • js核心代码
  • 总结


为什么要封装组件?

现在工作,不会封装组件都不好意思说自己是前端了,面试基本也是必问的。写移动端,开发经验丰富的老手,基本都不会使用ui库,例如vant,antd这些。因为他们已经拥有了属于自己的一套轮子库,毕竟自己写的用起来方便,虽然说性能可能会差一点,但是现在手机和电脑的性能,这些都看不出来


提示:以下是本篇文章正文内容,下面案例可供参考

一、组件是什么?

其实组件就是一个html文件,只不过在框架的作用下,写法bu'yu。

A页面,引入了B页面,B页面就是子页面,A就是父组件。

B页面就相当于appendChaild("body")到A页面的body里面

其实就是两段html,合并到了成了一个文件,引入在哪个DOM下就

appendChild()到对应的父级下面。相当于插入一段html文件

二、怎么封装一个复用组件

1.举例为返回顶部按钮

这里以返回顶部案例为例,因为在很多地方都会使用到返回顶部,尤其时移动端在做列表的时候,

产品经理都会让你价格按钮点击回到顶部,如果你不满意ui的样式,就可以自己封装一个。

具体效果图如下:

html + css 代码如下 : 结构非常简单

<template>
  <div class="content">
    // style样式为动态配置,src为动态配置 这样可以实现图片,样式,大小的自由控制
    // 一般返回顶部都是一个icon图片,如果有文字或者别的,可以自己更改样式 
    <img v-show="showTopImg" :style="[myStyle]"  @click.stop="backTop" 
        :src="backIcon" :stopHeight="0" class="backTop"
    >
  </div>
</template>

//代码过多放在下面,对应是写在这里
<script><script>

//css样式 默认position定位
<style lang="scss" scoped>
    .backTop{
      position: fixed;
    }
</style>

2.js核心部分

组件封装的核心就是考虑到使用情况,所以我接收了四个参数,增加复用性

1、多少高度显示按钮

2、返回到多少高度停止

3、图片自定义

4、样式大小,位置自定义

5、每个赋值个默认值

6、做了一个防抖优化

代码如下(示例):

<script>
import icon from '@/assets/icon/backTop.png' //一般返回顶部是个图片
export default {
  data() {
    return {
      showTopImg: false, //控制按钮显示
      timer: null, //方便退出时清除定时器事件
      timerId: null, //方便退出时清除定时器事件
      scrollTop: 0  //滚动高度

    }
  },
  props: {
    // 触底显示返回高度,默认2500
    backHeight: {
      typeof: Number,
      default: 2500
    },
    //返回到多少高度, 默认为0,返回顶部
    stopHeight: {
      typeof: Number,
      default: 0
    },
    // 父组件传下来的图片,没有取默认值
    backIcon: {
      typeof: String,
      default: icon
    },
    // 父组件传下来的样式,必须是对象,没有取默认值
    myStyle: {
      typeof: Object,
      default: () => {
        return {
          width: '66px',
          height: '66px',
          right: '10px',
          bottom: '68px'
        }
      }
    }
  },
  mounted() {
    //注册监听滚动事件
    window.addEventListener('scroll', this.debounce, true)
  },
  destroyed() {
    // 退出时清除监听事件
    window.removeEventListener('scroll', this.debounce)
    window.clearInterval(this.timerId)
    window.clearTimeout(this.timer)
  },
  methods: {
    backTop() {
      this.timerId = setInterval(() => {
        // 给返回增加动画效果
        const speed = Math.floor(-document.documentElement.scrollTop / 5)
        document.documentElement.scrollTop = document.documentElement.scrollTop + speed
        // 返回顶部时清除定时器
        if (document.documentElement.scrollTop <= this.stopHeight) {
          clearInterval(this.timerId)
        }
      }, 30)
    },
    // 防抖函数
    debounce(ev) {
      if (this.timer) {
        clearTimeout(this.timer)
      }
      this.timer = setTimeout(() => {
        // 当滚动的距离大于时出现该按钮
        this.scrollTop = window.pageYOffset
        this.scrollTop > this.backHeight ? 
        this.showTopImg = true : this.showTopImg = false
      }, 200)
    }
  }
}
</script>

到这儿组件就写好逻辑了,可能有写的不好的地方,借鉴一下就可以了。

3.其他页面进行引用, 导入进来就可以了

<template>
  <div class="content">
    //  到一定距离显示出来        自定义图片                自定义样式
    <backTop :backHeight="2000" :icon="https://xxxx.com" :myStyle="style"/>
  </div>
</template>

<script>
// 引入对应的组件路径
import backTop from '@/components/backTop'
export default {
  name: 'demo',
  // 局部注册组件
  components: {  backTop },

  data() {
    return {
       style:{
          width:"80px",
          hieght:"80px",
          right:"20px",
          bottom:"50px",
          backgroundColor:""
       {
    }
  },
  created() {},
  methods: {}
}
</script>

<style lang="scss" scoped>

</style>

总结

返回顶部按钮就是一个复用的公共组件,可以配置大小,样式,位置。因为很多地方会使用到,

适当的封装一下,就会使得代码简洁许多。

在项目中,还会有许多公共的方法,组件。如果抽离封装的话,项目结构会更加清晰,也容易维护。不然每人都写个方法,大家写法不一样,定位问题会很麻烦,也容易出现问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue的组件是可重用的UI元素,可以封装为公共组件供其他组件和应用程序使用。下面是一个简单的步骤来封装一个Vue的公共组件。 1. 创建组件文件:在项目中创建一个组件文件,命名为Example.vue。 2. 编写组件内容:在Example.vue文件中定义组件的模板、样式和行为。 3. 导出组件:在Example.vue文件中使用export default将组件导出,以便其他组件和应用程序可以使用它。 4. 引入组件:在需要使用该组件的文件中,使用import Example from './Example.vue'导入该组件。 5. 注册组件:在需要使用该组件的Vue实例中,使用Vue.component('example', Example)注册该组件,其中'example'是组件的名称,可以在模板中使用该名称来引用该组件。 6. 使用组件:在该Vue实例的模板中使用<example></example>标签来使用该组件。 下面是一个简单的示例,演示如何封装一个Vue的公共组件: Example.vue文件: ``` <template> <div class="example"> <h2>{{ title }}</h2> <p>{{ content }}</p> </div> </template> <script> export default { name: 'Example', props: { title: String, content: String } } </script> <style> .example { border: 1px solid #ccc; padding: 10px; } .example h2 { margin-top: 0; } </style> ``` 在需要使用该组件的文件中: ``` <template> <div> <example title="Hello" content="This is an example component"></example> </div> </template> <script> import Example from './Example.vue' export default { components: { Example } } </script> ``` 在Vue实例中注册组件: ``` Vue.component('example', Example) ``` 使用组件: ``` <example title="Hello" content="This is an example component"></example> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值