Element UI 表格某行突出悬浮效果

Element UI 表格某行突出悬浮效果

代码

html 复制代码
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">

<title>Element UI 2 浮层高亮行</title>

<!-- Element UI 2 CDN -->
<link rel="stylesheet"
href="https://unpkg.com/element-ui@2.15.14/lib/theme-chalk/index.css">

<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui@2.15.14/lib/index.js"></script>

<style>

body {
    padding: 40px;
    background: #f5f7fa;
}

/* 容器 */
.wrapper {
    position: relative;
    width: 700px;
    margin: auto;
    padding-left: 13px;
}

/* 浮层 */
.floating-row {

    position: absolute;

    left: 0;
    right: 0;

    height: 48px;

    display: flex;

    align-items: center;

    background: linear-gradient(
        to right,
        #cfeeff,
        #e8f7ff
    );

    border: 2px solid #66b1ff;

    border-radius: 6px;

    box-shadow:
        0 4px 12px rgba(0,0,0,0.15);

    font-weight: bold;

    z-index: 999;

    pointer-events: none;

}

/* 星标 */
.star {

    position: absolute;

    left: 16px;

    font-size: 18px;

    color: #409EFF;

}

/* 模拟列对齐 */
.floating-cell {

    flex: 1;

    text-align: center;

}

</style>

</head>

<body>

<div id="app">

<div class="wrapper">

<el-table
    ref="table"
    :data="tableData"
    border
    height="400"
    style="width: 100%">

    <el-table-column
        prop="rank"
        label="年达成率排名">
    </el-table-column>

    <el-table-column
        prop="org"
        label="机构">
    </el-table-column>

    <el-table-column
        prop="rate"
        label="年达成率">
    </el-table-column>

</el-table>

<!-- 浮层 -->
<div
    v-show="floatingTop !== null"
    class="floating-row"
    :style="{ top: floatingTop + 'px' }">

    <span class="star">★</span>

    <div class="floating-cell">
        {{ currentRow.rank }}
    </div>

    <div class="floating-cell">
        {{ currentRow.org }}
    </div>

    <div class="floating-cell">
        {{ currentRow.rate }}
    </div>

</div>

</div>

</div>

<script>

new Vue({

    el: "#app",

    data() {

        return {

            targetIndex: 5,

            floatingTop: null,

            currentRow: {},

            tableData: []

        };

    },

    mounted() {

        // 生成数据
        for (let i = 1; i <= 20; i++) {

            this.tableData.push({

                rank: i,

                org: "北京",

                rate: "125.25%"

            });

        }

        this.$nextTick(() => {

            this.updateFloating();

            // 监听滚动
            const body =
                this.$refs.table.$el.querySelector(
                    ".el-table__body-wrapper"
                );

            body.addEventListener(
                "scroll",
                this.updateFloating
            );

            window.addEventListener(
                "resize",
                this.updateFloating
            );

        });

    },

    methods: {

        updateFloating() {

            const table =
                this.$refs.table.$el;

            const rows =
                table.querySelectorAll(
                    ".el-table__body tbody tr"
                );

            const target =
                rows[this.targetIndex];

            if (!target) return;

            const wrapperRect =
                table.getBoundingClientRect();

            const rowRect =
                target.getBoundingClientRect();

            this.floatingTop =
                rowRect.top -
                wrapperRect.top +
                table.scrollTop;

            this.currentRow =
                this.tableData[
                    this.targetIndex
                ];

        }

    }

});

</script>

</body>
</html>
相关推荐
shmily麻瓜小菜鸡1 小时前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
萧鼎1 小时前
Python 高性能Web框架神器 FastAPI:自动生成API文、基于Pydant、异步请求处理全搞定
前端·python·fastapi
IT_陈寒2 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
计算机魔术师2 小时前
5000亿估值冲刺科创板,DeepSeek 为何急着上市?
前端
我血条子呢2 小时前
前端解析word方案
前端·word
kyriewen2 小时前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
申行2 小时前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端
两只羊ovo2 小时前
Vue 3 + DeepSeek 流式输出实战:从“干等”到“打字机”体验
前端·vue.js
Yeyu2 小时前
车载多 App 同屏渲染(二):SurfaceControlViewHost 跨进程
前端
樊小肆2 小时前
离谱,每轮请求 25% 的 token,竟在重发模型想完就扔的内心独白
前端·人工智能·agent