移动端固定头部和固定左边第一列的实现方案(Vue中实现demo)

最近移动端做一份报表,需要左右滚动时,固定左边部分;上下滚动时,固定头部部分。

代码在Vue中简单实现

主要思路是:

a.左边部分滚动,实时修改右边部分的滚动条高度

b.头部和内容部分都设置固定高度,当内容部分内容高度大于设置的高度时,产生滚动条

c.左右部分也设置固定宽度,左边设置固定宽度,右边设置成窗口的宽度减去左边部分的宽度,当右边部分的宽度大于设置的宽度时产生滚动条

扩展思路:

a.监控左右(x)滚动条滚动到右边边缘时,可以触发事件(如:加载下一批数据)

b.监控上下(y)滚动条滚动到下边边缘时,可以触发事件(如:加载下一页数据)

……

还可以定时器监控左右的滚动条高度是否一致,修改成一致(防止不同浏览器的兼容问题)

效果图如下:

代码如下:

<template>
    <div class="outermost-layer">
        <div class="left">
            <div class="left-head" :style="{height: `${headHeight}px`}">
                我是左head
            </div>
            <div  :style="{height: `${bodyHeight}px`}" class="left-body"  id="leftBodyId" onscroll="rightBodyId.scrollTop = this.scrollTop;console.log(rightBodyId.scrollTop);console.log(this.scrollTop)">
                <div v-for="i in 40" style="height: 20px">
                    「{{i}}」左b
                </div>
            </div>
        </div>
        <div class="right">
            <div class="right-head" :style="{height: `${headHeight}px`}">
                我是右head
            </div>
            <div  :style="{height: `${bodyHeight}px`}" class="right-body" id="rightBodyId" onscroll="leftBodyId.scrollTop = this.scrollTop;console.log(leftBodyId.scrollTop);console.log(this.scrollTop)">
                <div v-for="i in 40" style="height: 20px">
                    <span v-for="n in 5">「{{i}}」右「{{n}}」body</span>
                </div>
            </div>
        </div>
    </div>

</template>

<!--这里可以防止滚动到顶部时,整体往上偏移,底部出现空白-->
<style>
    #vux_view_box_body{
        padding:0px;
    }
</style>

<script>
    export default {
        name: "home",
        data(){
            return {
                headHeight: 50,
                bodyHeight: window.innerHeight - 50,
            }
        },
        methods:{

        }
    }
</script>

<style scoped>
    .outermost-layer {
        background-color: white;
        padding: 0px;
    }
    .left{
        width: 100px;
        height: 100%;
        background-color: orange;
        float: left;
        display: inline-block;
    }
    .left-head{
        width: 100%;
        /*height: 30px;*/
        clear: both;
    }
    .left-body{
        background-color: olive;
        clear: both;
        /*height: 617px;*/
        /*左边设置滚动条,系统监听左边的滚动条位置,保持高度一致*/
        overflow-y: scroll;
    }
    .right{
        width: calc(100% - 100px);
        height: 100%;
        float: left;
        overflow-x: scroll;
        display: inline-block;
    }
    .right-head{
        background-color: greenyellow;
        /*height: 30px;*/
        z-index: 10;
        clear: both;
    }
    .right-body{
        width: 1400px;
        /*height: 617px;*/
        clear: both;
        overflow: auto;
    }

</style>

原文地址:https://www.cnblogs.com/liugx/p/8961829.html

时间: 2024-11-07 21:18:59

移动端固定头部和固定左边第一列的实现方案(Vue中实现demo)的相关文章

comm命令——对已经有序的文件进行比较——第一列只在文件1中出现的文件,第二列只在文件2中出现的文件,第三列在文件1和文件2中同事出现的文件

请注意前提条件:             comm对文件进行处理时,要求文件已经有序,如果没有顺序,请使用sort进行排序后进行处理. 语 法: comm [-123][--help][--version][第1个文件][第2个文件]补充说明: 这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3行显示: 第1行仅是在第1个 文件中出现过的列: 第2行是仅在第2个文件中出现过的列: 第3行则是在第1与第2个文件里都出现过的列. 若给予的文件名称为

layui数据表格固定头部和第一列、colspan合并列

刚看到原型图的时候,纳尼?不是跟我开玩笑吧,小女子资历尚浅,还真没做过像这样的功能,然后就是各种找度娘,可是都没有找到合适的,很多都是行合并,真的是头疼呀!再纠结是用VUE实现还是用layui实现好,在最后挣扎下,还是选择了用layui.最后加上从各大神的demo中得到的灵感.在这里记录一下,希望可以帮助到有需要的人啦~ 移动端展示效果如下: 1 <script> 2 3 layui.use('table', function(){ 4 var table = layui.table; 5 /

使用css固定table第一列

.table{width:100%;overflow-x: scroll;background-color:#7c95b5;} .fixedTable{width:160%;text-align: center;color:#fff;font-size:14px; border-collapse:collapse;} .fixedTable tr{line-height: 30px;border:1px solid #fff;} .fixedTable tr:first-child{height

Midnight.js – 实现奇妙的固定头部切换效果

Midnight.js 是一款 jQuery 插件,在页面滚动的时候实现多个头设计之间的切换,所以你总是有一个头与它下面的内容层叠,看起来效果很不错. Midnight.js 可以让你轻松实现这种切换固定头的效果. 在线演示      插件下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQu

Jquery中,关于固定头部菜单条代码(摘)

$(function () { $(window).scroll(function () { if ($(window).scrollTop() >= 150) { //加入fixedNavCSS样式 $(".Dp-Navbar").addClass("fixedNav"); } else { //去除fixedNavCSS样式 $(".Dp-Navbar").removeClass("fixedNav");      

如何让DIV模块随着页面固定和不固定随意切换

最近做公司官网,左边文章列表,右边文章详情,要求左边文章列表随着页面向上滚动到某个位置时,固定在页面顶部,当滚动到footer出现时,div模块随页面滚动而不再固定在顶部. 思路: 1,给外层的div设置position:relative; 2,判断div块到达页面顶部时,设置fixed固定属性 3,判断左边div块的距离滚动条顶部的距离 + 左div块的高度 >= 右边文章详情距滚动条顶部的距离 + 详情页的高度, 改变div块的bottom  top设为auto 4,判断左边div块的距离滚

[JAVA] 冻结Excel的第一行或第一列

可以按照如下设置创建冻结窗口. sheet.createFreezePane( 3, 2, 3, 2 ); 前两个参数是你要用来拆分的列数和行数.后两个参数是下面窗口的可见象限,其中第三个参数是右边区域可见的左边列数,第四个参数是下面区域可见的首行. // 冻结第一行 sheet.createFreezePane( 0, 1, 0, 1 ); // 冻结第一列 sheet.createFreezePane( 1, 0, 1, 0 );

剑指 offer 第一题: 二维数组中的查找

打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣 ?? 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目分析 图 1 如果没有头绪的话,很显然使用 暴力解法 是完全可以解决该问题的. 即遍历二维数组中的每一个元素,时间复杂度:O(n^2). 其实到这里我们就可以发现,使用这种暴力解法并没有充分利用题目给出的信息.这

Neo4j 第一篇:在Windows环境中安装Neo4j

图形数据库(Graph Database)是NoSQL数据库家族中特殊的存在,用于存储丰富的关系数据,Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性.Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准. 关系型数据库只对单个Join操作进行优化查询,而多重Join操作查询的性