element-plus [Component] [backtop] el-backtop 组件的 target 属性问题

q1qsirdb  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(71)

Bug Type: Component

Environment

  • Vue Version: 3.2.37
  • Element Plus Version: 2.2.18
  • Browser / OS: Chrome
  • Build Tool: Vite

Reproduction

  • el-backtop

Element Plus Playground

Steps to reproduce

<script setup lang="ts">
import { ref, version as vueVersion } from 'vue'
import { version as EpVersion, ElBacktop } from 'element-plus'

const msg = ref('Hello World!')
</script>

<template>
  <p>
    <el-icon color="var(--el-color-primary)"><ElementPlus /></el-icon>
    Element Plus {{ EpVersion }} + Vue {{ vueVersion }}
  </p>
  <div id="doc-editor-main" style="height: 30vh; overflow: auto">
  	<div style="height: 200vh; background: rgba(0,0,0,0.3)">
  		<el-backtop target="#doc-editor-main" :right="100" :bottom="100" />
  	</div>
  </div>
  
  <div id="doc-editor-main" style="height: 30vh; overflow: auto">
  	<div style="height: 200vh; background: rgba(0,0,255,0.3)">
  		<el-backtop target="#doc-editor-main" :right="100" :bottom="100" />
  	</div>
  </div>
  
  <div id="doc-editor-main" style="height: 30vh; overflow: auto">
  	<div style="height: 200vh; background: rgba(255,0,0,0.3)">
  		<el-backtop target="#doc-editor-main" :right="100" :bottom="100" />
  	</div>
  </div>
</template>

假设3个 id 相同的 div 为组件,循环复用后,返回顶部只有第一个生效。

What is Expected?

target 属性不应该用 querySelector 去查询触发滚动的对象,应该用 ref 去查询触发滚动的对象。

What is actually happening?

target 属性用 querySelector 去查询触发滚动的对象,从而导致 id 相同时候只有第一个生效。

Additional comments

(empty)

ttygqcqt

ttygqcqt1#

你是说target直接传入dom避免id冲突?
还是你要一个el-backtop控制多个dom元素?

nwo49xxi

nwo49xxi3#

id不应该重复

理论上不应该重复,但如果是团队组件化开发除非规范id命名,不然谁也保证不了不会和别人同一个id

unftdfkk

unftdfkk4#

你是说target直接传入dom避免id冲突? 还是你要一个el-backtop控制多个dom元素?

@Simon-He95 理论是不应该重复,但是有个场景:A组件使用backtop组件,页面循环使用A组件,此时所有的backtop组件只对第一个A组件有效。所以我想可否更改下:target属性不应该用querySelector去查询触发滚动的对象,应该用ref去查询触发滚动的对象。

lpwwtiir

lpwwtiir5#

in Nuxt3(Version 3~), if use pageTransition , el-backtop was not found target

相关问题