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>
相关推荐
用户新3 小时前
V8引擎 精品漫游指南--Ignition篇(下 一) 动态执行前的事情
前端·javascript
@PHARAOH5 小时前
WHAT - GitLens vs Fork
前端
yqcoder5 小时前
前端性能优化:如何减少重绘与重排?
前端·性能优化
洋子6 小时前
Yank Note 系列 13 - 让 AI Agent 进入笔记工作流
前端·人工智能
wenzhangli78 小时前
Ooder A2UI 核心架构深度解析:WEB 拦截层的设计与实现
前端·架构
前端百草阁8 小时前
【前端性能优化全链路指南】从开发编写到构建运行的多维度实践
前端·性能优化
神探小白牙8 小时前
eCharts 多系列柱状图增加背景图
javascript·ecmascript·echarts
女生也可以敲代码8 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
ZhengEnCi9 小时前
M5-markconv自定义CSS样式指南 📝
前端·css·python
IT_陈寒9 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端