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>
相关推荐
恋猫de小郭3 小时前
你的代理归我了:AI 大模型恶意中间人攻击,钱包都被转走了
前端·人工智能·ai编程
xiaokuangren_4 小时前
前端css颜色
前端·css
Huanzhi_Lin4 小时前
关于V8/MajorGC/MinorGC——性能优化
javascript·性能优化·ts·js·v8·新生代·老生代
hoiii1874 小时前
C# 基于 LumiSoft 实现 SIP 客户端方案
前端·c#
anOnion4 小时前
构建无障碍组件之Meter Pattern
前端·html·交互设计
小码哥_常5 小时前
Spring Boot配置diff:解锁配置管理新姿势
前端
小码哥_常5 小时前
告别onActivityResult!Android数据回传的3大痛点与终极解决方案
前端
hhcccchh5 小时前
1.2 CSS 基础选择器、盒模型、flex 布局、grid 布局
前端·css·css3
专吃海绵宝宝菠萝屋的派大星6 小时前
使用Dify对接自己开发的mcp
java·服务器·前端