Bug Type: Component
Environment
- Vue Version:
3.2.37
- Element Plus Version:
2.2.18
- Browser / OS:
Chrome
- Build Tool:
Vite
Reproduction
Related Component
el-backtop
Reproduction Link
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)
5条答案
按热度按时间ttygqcqt1#
你是说target直接传入dom避免id冲突?
还是你要一个el-backtop控制多个dom元素?
uelo1irk2#
id不应该重复
nwo49xxi3#
id不应该重复
理论上不应该重复,但如果是团队组件化开发除非规范id命名,不然谁也保证不了不会和别人同一个id
unftdfkk4#
你是说target直接传入dom避免id冲突? 还是你要一个el-backtop控制多个dom元素?
@Simon-He95 理论是不应该重复,但是有个场景:A组件使用backtop组件,页面循环使用A组件,此时所有的backtop组件只对第一个A组件有效。所以我想可否更改下:target属性不应该用querySelector去查询触发滚动的对象,应该用ref去查询触发滚动的对象。
lpwwtiir5#
in Nuxt3(Version 3~), if use
pageTransition
,el-backtop
was not found target