Element-ui 遇到的坑之返回顶部Backtop组件的target如何设置正确的值的问题。

89 篇文章 7 订阅
35 篇文章 1 订阅

问题描述:

element-ui 的Backtop属性中有target的值是需要设置的。设置错了,不仅没有效果,反而还可以导致报错。

官方文档说明的是,target触发滚动的对象,String类型。

查看示例,是传一个css选择符。

查看官方源码,我们会发现,

  init() {
      this.container = document;
      this.el = document.documentElement;
      if (this.target) {
        this.el = document.querySelector(this.target);
        if (!this.el) {
          throw new Error(`target is not existed: ${this.target}`);
        }
        this.container = this.el;
      }
    },

target是有默认值的,默认值是document.documentElement对象。我们传入一个css选择器进去后,就会替换为document.querySelector(this.target)选择的dom节点。

废话不多说,重点说一下解决方法。

解决方案一:什么都不传,用默认值。

<template>
  <div class="appmain-wrap">
    <!-- 返回顶部 -->
    <el-backtop></el-backtop>
     <!-- 其他代码-->
</template>

这个时候,backtop拿到的是document.documentElement对象,它上面有滚动条就会触发返回顶部。

解决方案二:传入正确的target的值。

譬如我是在一个tabs页面使用的示例。

<template>
  <div class="appmain-wrap">
	<el-tabs v-model="activeName" @tab-click="handleClick">
	  <el-tab-pane label="用户管理" name="first">用户管理
	  	<el-backtop target=".appmain-wrap"></el-backtop>
	  	<!-- 其他代码-->
	  </el-tab-pane>
    <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
  </el-tabs>
  </div>
</template>

这个时候,还是不行,需要给.appmain-wrap加一个样式

.appmain-wrap {
  height: 100vh;
  overflow: scroll;
}

给这个target的壳,设置height高度,然后设置overflow:scroll,这样才可以。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要修改Element UI源码,以便控制Backtop组件的滚动时长,可以按照以下步骤进行: 1. 克隆Element UI的源码仓库到本地。可以在GitHub上找到Element UI的仓库,并使用git命令或其他工具将其克隆到本地。 2. 进入克隆的Element UI源码目录,并找到Backtop组件的源码文件。通常在`packages/backtop`目录下可以找到。 3. 打开Backtop组件的源码文件,通常是`index.vue`或类似的文件。在该文件中,你将看到与Backtop组件相关的代码。 4. 在该文件中找到处理点击事件的代码块。通常会有一个像`handleClick`这样的方法来处理点击事件。 5. 在`handleClick`方法中,可以使用`requestAnimationFrame`来实现滚动动画并控制滚动时长。你可以修改该方法中的代码如下: ```javascript handleClick() { const el = document.documentElement || document.body const start = el.scrollTop const end = 0 const duration = 200 // 设置滚动时长,单位为毫秒 let current = start const step = () => { const timestamp = Date.now() const progress = Math.min((timestamp - start) / duration, 1) const easeInOutQuad = (t) => t<.5 ? 2*t*t : -1+(4-2*t)*t current = start + (end - start) * easeInOutQuad(progress) el.scrollTop = current if (progress < 1) { requestAnimationFrame(step) } } requestAnimationFrame(step) } ``` 在上述代码中,我们使用了`requestAnimationFrame`来实现滚动动画。通过计算当前时间与开始时间的差,以及设置的滚动时长,可以得到滚动的进度。然后使用缓动函数(这里使用了`easeInOutQuad`)计算当前滚动位置,并设置`el.scrollTop`来实现滚动效果。 6. 保存修改并重新构建Element UI。根据Element UI的构建和打包方式,你可能需要运行一些命令来重新构建Element UI,以使你的修改生效。 请注意,修改Element UI源码并重新构建可能会带来一些风险和维护问题。建议在修改之前备份源码,并确保理解修改的影响。另外,当Element UI更新时,你可能需要重新应用你的修改。 希望以上步骤可以帮助你修改Element UI源码,实现对Backtop组件滚动时长的控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值