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

代码在Vue中简单实现

主要思路是:

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

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

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

扩展思路:

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

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

……

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

效果图如下:

代码如下:

  1. <template>
  2. <div class="outermost-layer">
  3. <div class="left">
  4. <div class="left-head" :style="{height: `${headHeight}px`}">
  5. 我是左head
  6. </div>
  7. <div :style="{height: `${bodyHeight}px`}" class="left-body" id="leftBodyId" onscroll="rightBodyId.scrollTop = this.scrollTop;console.log(rightBodyId.scrollTop);console.log(this.scrollTop)">
  8. <div v-for="i in 40" style="height: 20px">
  9. 「{{i}}」左b
  10. </div>
  11. </div>
  12. </div>
  13. <div class="right">
  14. <div class="right-head" :style="{height: `${headHeight}px`}">
  15. 我是右head
  16. </div>
  17. <div :style="{height: `${bodyHeight}px`}" class="right-body" id="rightBodyId" onscroll="leftBodyId.scrollTop = this.scrollTop;console.log(leftBodyId.scrollTop);console.log(this.scrollTop)">
  18. <div v-for="i in 40" style="height: 20px">
  19. <span v-for="n in 5">「{{i}}」右「{{n}}」body</span>
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24.  
  25. </template>
  26.  
  27. <!--这里可以防止滚动到顶部时,整体往上偏移,底部出现空白-->
  28. <style>
  29. #vux_view_box_body{
  30. padding:0px;
  31. }
  32. </style>
  33.  
  34. <script>
  35. export default {
  36. name: "home",
  37. data(){
  38. return {
  39. headHeight: 50,
  40. bodyHeight: window.innerHeight - 50,
  41. }
  42. },
  43. methods:{
  44.  
  45. }
  46. }
  47. </script>
  48.  
  49. <style scoped>
  50. .outermost-layer {
  51. background-color: white;
  52. padding: 0px;
  53. }
  54. .left{
  55. width: 100px;
  56. height: 100%;
  57. background-color: orange;
  58. float: left;
  59. display: inline-block;
  60. }
  61. .left-head{
  62. width: 100%;
  63. /*height: 30px;*/
  64. clear: both;
  65. }
  66. .left-body{
  67. background-color: olive;
  68. clear: both;
  69. /*height: 617px;*/
  70. /*左边设置滚动条,系统监听左边的滚动条位置,保持高度一致*/
  71. overflow-y: scroll;
  72. }
  73. .right{
  74. width: calc(100% - 100px);
  75. height: 100%;
  76. float: left;
  77. overflow-x: scroll;
  78. display: inline-block;
  79. }
  80. .right-head{
  81. background-color: greenyellow;
  82. /*height: 30px;*/
  83. z-index: 10;
  84. clear: both;
  85. }
  86. .right-body{
  87. width: 1400px;
  88. /*height: 617px;*/
  89. clear: both;
  90. overflow: auto;
  91. }
  92.  
  93. </style>

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

  1. (转)supertable像excel那样固定table的表头和第一列

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <title> ...

  2. 固定Table的头部和左边的列-在Knockout Js使用场景下

    要求:固定Table的头部和左边的列 场景:Knockout Js被用于绑定Table的数据源. 固定HTML表格的头部和列是一个很常见的需求.此文:http://www.cnblogs.com/so ...

  3. 使用css固定table第一列

    .table{width:100%;overflow-x: scroll;background-color:#7c95b5;} .fixedTable{width:160%;text-align: c ...

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

    Midnight.js 是一款 jQuery 插件,在页面滚动的时候实现多个头设计之间的切换,所以你总是有一个头与它下面的内容层叠,看起来效果很不错. Midnight.js 可以让你轻松实现这种切换 ...

  5. css3 的 calc()函数在布局中的使用----头部高度固定,页面正好占满一屏

    最近项目遇到一个布局需求,头部高度固定,页面需要刚好占满一屏幕. 如下示意图: 方法:使用calc .wrap{ position: relative; margin-left: 24px; marg ...

  6. easyui datagrid 表头固定(垂直滚动条)、列固定(水平滚动条)

    easyui datagrid 表头固定(垂直滚动条).列固定(水平滚动条),每页显示1000行 最近用多了easyui 之后还是觉得它的功能还是很强大的.它原有的功能就已经能够满足90%以上的界面需 ...

  7. css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style

    css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style .con1{ width: 100p ...

  8. MATLAB:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位

    问题:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位.上一行溢出时,上上一行的1移动一位, ...

  9. 一、简单的移动端tab头部二级下拉导航栏,向下弹出,向上隐藏

    一.简单的移动端tab头部二级下拉导航栏,向下弹出,向上隐藏 <html lang="en"> <head> <meta charset=" ...

随机推荐

  1. 华硕笔记本开机直接进入bios解决方法

    1.开机按esc键或F12,进入bios,打开BOOT标签,将Launch CSM改为Enabled,但此时的Launch CSM是Disabled,并且是灰色不可编辑状态. 2.按方向键切换到Sec ...

  2. cocos对象池的使用

    enemy.js cc.Class({ extends: cc.Component, properties: { enemySpeed: 0, //设置加速度 }, //初始化当前节点的y坐标 ini ...

  3. 验证email是否合法

    https://buluo.qq.com/p/detail.html?bid=339910&pid=6675390-1514450689&from=grp_sub_obj 场景1:验证 ...

  4. Algorithm1: 全排列

    全排列 思想:      这是一个全排列问题,需要使用递归实现,将数组中的所有元素和第一个元素交换,求后面n-1个元素的全排列.      按照这个条件递归下去,知道元素的个数只有一个的时候,输出所有 ...

  5. linux系统挂载NTFS移动硬盘

    有时候做大数据量迁移时,为了快速迁移大数据,有可能在Linux服务器上临时挂载NTFS格式的移动硬盘, 一般情况下,Linux是识别不了NTFS格式移动硬盘的(需要重编译Linux核心才能,加挂NTF ...

  6. ubuntu15.10运行android studio出错unable to run mksdcard sdk tool

    问题:ubuntu运行android studio出错unable to run mksdcard sdk tool 系统版本:系统是ubuntu 15.10 64位 确认原因:缺少lib 解决方法: ...

  7. Shell学习笔记——算数运算与条件测试

    算数运算 1. 使用let命令 #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不需要加$号 只用于整数运算,不适 ...

  8. L156

    China has specified the definition and diagnosis standard for internet addiction in its latest adole ...

  9. ADO Recordset 对象链接

    http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...

  10. 提高你的javascript代码逼格系列之函数与数组

    不知道大家有没有一种感觉,那就是自己写的javascript代码虽然能完全解决工作上的需要,但是,一眼望去,too simple!!!简直就是一个傻子都能看懂的水平,于是,在工作之余,我开始去收集一些 ...