封装返回顶部组件 vant-ui

vant居然没有返回顶部组件没办法自己封装一个

<template>
  <div>
    <van-button
      color="rgba(0,0,0,.3)"
      round
      class="backTop"
      size="mini"
      @click="backTop"
      v-show="scrollType"
    >
      <van-icon class="icon-backTop" name="arrow-up" size="15" />
    </van-button>
  </div>
</template>

<script>
export default {
  name: 'backTop',
  data () {
    return {
      scrollType: false, // 控制按钮显示和隐藏
      timerId: null,
      scrollTop: 0
    }
  },
  // 组件创建监听scroll此方法
  mounted () {
    window.addEventListener('scroll', this.handleScoll, true)
  },
  // 组件销毁移除监听
  destroyed () {
    window.removeEventListener('scroll', this.handleScoll)
    window.clearInterval(this.timerId)
  },
  methods: {
    backTop () {
      this.timerId = setInterval(() => {
        // 给返回增加动画效果
        const upSpeed = Math.floor(-this.scrollTop / 5)
        document.documentElement.scrollTop = this.scrollTop + upSpeed
        if (this.scrollTop === 0) {
          clearInterval(this.timerId)
        }
      }, 30)
    },
    handleScoll (ev) {
      // 当滚动的距离大于700 时出现该按钮
      this.scrollTop = window.pageYOffset
      if (window.pageYOffset / 100 > 7) {
        this.scrollType = true
      } else {
        this.scrollType = false
      }
    }
  }
}
</script>

<style scoped lang='less'>
.backTop {
  position: fixed;
  bottom: 0.4rem;
  right: 0.2rem;
  z-index: 999;
  border: none;
}
</style>

3.0版本

<template>
  <div class="backTop"  v-show="scrollType" @click.stop="backTop">
    <van-icon name="arrow-up" color="#fff" />
  </div>
</template>

<script>
import { reactive, toRefs } from '@vue/reactivity'
import { onBeforeUnmount, onMounted } from 'vue-demi'
export default {
  name: 'backTop',
  setup () {
    const state = reactive({
      scrollType: false, // 控制按钮显示和隐藏
      timerId: null,
      scrollTop: 0
    })
    function backTop () {
      state.timerId = setInterval(() => {
        // 给返回增加动画效果
        const upSpeed = Math.floor(-state.scrollTop / 5)
        document.documentElement.scrollTop = state.scrollTop + upSpeed
        if (state.scrollTop === 0) {
          clearInterval(state.timerId)
        }
      }, 30)
    }
    function handleScoll (ev) {
      // 当滚动的距离大于700 时出现该按钮
      state.scrollTop = window.pageYOffset
      if (window.pageYOffset / 100 > 7) {
        state.scrollType = true
      } else {
        state.scrollType = false
      }
    }
    onBeforeUnmount(() => {
      window.removeEventListener('scroll', handleScoll)
      clearInterval(state.timerId)
    })
    onMounted(() => {
      window.addEventListener('scroll', handleScoll)
    })
    return {
      ...toRefs(state),
      backTop
    }
  }
}
</script>

<style lang='less'>
.backTop {
  width: 30px;
  height: 30px;
  text-align: center;
  line-height: 30px;
  position: fixed;
  bottom: 60px;
  right: 10px;
  background-color: rgba(0, 0, 0, 0.2);
  border-radius: 50%;
  z-index: 999;
}
</style>
### 回答1: element-uivant-ui是两个不同的UI框架,它们的区别主要在以下几个方面: 1. 设计风格:element-ui的设计风格更加简洁、大气,适合企业级应用;vant-ui的设计风格更加轻盈、时尚,适合移动端应用。 2. 组件数量:element-ui组件数量较多,包括表单、布局、导航、数据展示等多个方面;vant-ui组件数量相对较少,主要集中在移动端的常用组件上。 3. 使用场景:element-ui适用于PC端的后台管理系统、企业级应用等;vant-ui适用于移动端的H5页面、小程序等。 总的来说,element-uivant-ui都是优秀的UI框架,选择哪一个要根据具体的项目需求和使用场景来决定。 ### 回答2: element-uivant-ui都是基于Vue框架的UI组件库,它们的共性在于提供了一系列常用的UI组件,为开发者提供了快速开发高质量Web应用的解决方案。由于二者都具有类似的作用,因此,这使得许多开发者困惑于在它们之间做出选择。 首先,element-ui是一个由饿了么前端团队开发的UI组件库,它包括了许多常用的UI组件如Button、Input、Select、Table等组件,这些组件都是组合在一起的,使得整个库看起来美观、简洁、易用。同时,element-ui也提供了丰富的主题定制功能,可以灵活地为网站或应用程序提供个性化界面。 相对于element-uivant-ui则倾向于提供更轻量、更加灵活的UI组件方案。vant-ui 提供的组件较少,但这些组件都设计得十分精简、轻快,能够快速响应用户操作。并且vant-ui支持按需加载,并有一个非常简单易懂的文档手册。 在UI组件库的功能性方面,element-ui更偏重于提供更丰富的UI组件组合、出色的主题美化和模板系统,它尤其适用于提供一些较为复杂的应用界面。而vant-ui更偏向于为主流应用场景提供快捷、便利、高效的解决方案。 总之,两个UI库各有所长,具体使用哪一个要根据具体应用场景、需求选择。 如果需要更加美观,复杂,大型的应用程序,element-ui会是一个更好的选择;而如果要开发更加轻便、快速、高效的应用,vant-ui也是不错的选择。 ### 回答3: Element-UIVant-UI都是比较成熟的UI组件库,用于构建各种Web应用。虽然它们都提供了类似的基本UI组件(比如按钮、表格、表单等),但是它们也有很多不同点。 1. 设计风格 Element-UI的设计风格比较扁平化,颜色使用比较鲜艳,真实感较强。它的设计着重于使页面的视觉效果更加直观、简洁、易于用户使用。 Vant-UI的设计风格较为简洁自然,是一种比较纯粹、未加工的设计风格。它的设计更加注重在产品美感和用户体验上。Vant-UI的颜色及元素的拼接让整个产品看起来自然,简洁美观。 2. 支持的组件 虽然Element-UIVant-UI都提供了大量的组件,但是它们的支持组件还是有一些区别的。 比如,Element-UI提供了比较成熟的富文本编辑器、时间轴、树形控件等组件;而Vant-UI则比较注重于移动端的UI组件,比如支持拖拽排序的宫格、下拉刷新、上拉加载等常见的控件。Element-UI从PC端出发,适配了大屏幕的设计,而Vant-UI从移动端出发,更注重于小屏幕的设计。 3. 性能 Element-UIVant-UI的性能也有所不同。在加载大量数据的情况下,Element-UIVant-UI缓存更好。但是在移动端,Vant-UI的性能比较卓越且稳定,体验非常流畅,而Element-UI的性能在移动端相对较差。 4. 社区支持 从社区支持来看,Element-UI提供的文档比Vant-UI更加完整。不仅提供了组件的API文档,还针对不同场景、不同组件提供了详细的示例代码,使开发人员可以更快速地上手使用组件Vant-UI虽然相对较新,但是更受年轻开发者的欢迎,由于Vant-UI比较注重移动端开发,所以社区用户更多的是移动端开发者。相比之下,Element-UI在PC端开发领域有更多的开发者。 综上所述,Element-UIVant-UI各有优缺点,开发人员可以根据自己的实际需求选择适合自己的UI组件库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值