首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >发布一个锁定行列的一种方法。(实现Excel里的冻结窗格的功能)

发布一个锁定行列的一种方法。(实现Excel里的冻结窗格的功能)

作者头像
用户1174620
发布于 2018-02-07 09:30:33
发布于 2018-02-07 09:30:33
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

功能介绍:

    可以实现锁定表格的行和列的功能,效果和Excel里的冻结窗格类似,当然没有Excel那么强大了,只是类似。

问题:

    当一个table太大而导致在屏幕里显示不下的时候,IE会出现滚动条,但是这时候就不好看了,对用户的操作也不是很方便。于是我们就想给他加一个限制,在制定的范围内滚动。

如何实现呢?网上也有不少实现方法了,效果如何就不发表意见了,这里主要是想说一下我的思路。

思路:

1、其实思路很简单,div有一个“功能”,给他的style 加上  "CLEAR: none; OVERFLOW: auto; WIDTH: 100px; HEIGHT:100px" 后,div就会出现滚动条(当然要在div里的内容超出div设置的时候)。这样div里的table 就可滚动了。但是行和列也以一起跟着动了起来。

2、行和列如何“锁定”呢?这里我用了一个笨招,用三个div来分别放置行和列,以及行列交叉的地方。这样看起来就像是别锁定住了。

3、当然行和列并不是不动就可以了,也要根据div的滚动条的滚动作出变化(移动)才可以,这里就要使用js来帮忙了。

优点:

1、侵入性小。只需要在.aspx页面里加几个div,引用一个.js文件就可以了。其他的文件里的代码都不用修改。

2、适用范围比较广:针对生成的 <table> 标签,而不针对服务器控件,所以DataGrd、GridView、DataList等都可以使用,只要输出的是 table 形式的html代码就可以。

3、可以同时锁定行和列,行数和列数可以自定义。“锁定”效果好,不会出现“跳动”的现象。

缺点:

1、占用客户端的资源比较大,行数多的时候会有一点点慢。

2、不支持ff。

js的能力还是不够强,目前只能这样了,但这不是最终的结果,还是要更新升级的。发出来也是想请各路高手指点一二。

说了这么多了,可能大家还是没有看明白,不好意思,表达能力比较差。发代码看看吧,呵呵。

.aspx文件里面需要加的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div onscroll="myScroll(this)" id="dMain" style="CLEAR: none; OVERFLOW: auto; WIDTH: 500px; HEIGHT: 150px">



你的控件控件



</div>

<div id="dTop" style="CLEAR: none; LEFT: 10px; OVERFLOW: hidden; WIDTH: 0px; POSITION: absolute; TOP: -10px; HEIGHT: 0px; BACKGROUND-COLOR: #ffffff">放置行</div>

<div id="dLeft" style="CLEAR: none; LEFT: 10px; OVERFLOW: hidden; WIDTH: 0px; POSITION: absolute; TOP: 10px; HEIGHT: 0px; BACKGROUND-COLOR: #ffffff">放置列</div>

<div id="dMid" style="CLEAR: none; LEFT: 10px; OVERFLOW: hidden; WIDTH: 0px; POSITION: absolute; TOP: 10px; HEIGHT: 0px; BACKGROUND-COLOR: #ffffff"></div>

js 文件里的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function myLoad()

{

    if (document.getElementById("dMain"))

        divInit();

        

}    



function myResize()

{

    if (document.getElementById("dMain"))

    {

        divInit();

    }

}



function divInit()

{

    var dMain = document.getElementById("dMain");        //主Div

    var dTop = document.getElementById("dTop");            //锁定行的Div

    var dLeft = document.getElementById("dLeft");        //锁定列的Div

    var dMid = document.getElementById("dMid");            //左上角的Div

    

    var windowWidth = document.body.scrollWidth;

    var windowHeight = document.body.clientHeight;

    //alert(windowWidth);

    

    dMain.style.background="#ffffff";

    //alert(windowHeight);

    dMain.style.width = windowWidth - ;

    

    //修正

    var sch = document.getElementById("div_Search");

    //alert(sch.scrollHeight);

    if (sch.style.display == "")

    {

        dMain.style.height = windowHeight -  - sch.scrollHeight;

    }

    else

    {

        dMain.style.height = windowHeight - ;

    }    

    //dMain.style.display = "none";

    

    //寻找Top 和 Left

    var tt = dMain;            //    寻找左上角的坐标,代码来自梅花雪的日期控件

    

    var th = tt;

    var ttop  = tt.offsetTop;

    var thei  = tt.clientHeight;  

    var tleft = tt.offsetLeft;  

    var ttyp  = tt.type;        

    while (tt = tt.offsetParent){ttop+=tt.offsetTop; tleft+=tt.offsetLeft;}

    

    var myTop  = (ttyp=="image")? ttop+thei : ttop+thei+;    //左上角的坐标

    var myLeft = tleft;                                        //左上角的坐标

    //===================================寻找完毕===============

    

    

    hh = dMain.style.height;            //修正

    hh = hh.replace("px","");

    

    myTop = myTop - hh + ;

    

    

    var dg = document.getElementById("DG");        //显示数据的表格

    

    var RowsCount = "";    //锁定行数

    var LineCount = "";    //锁定列数

    

    //锁定行的高度

    var RowsHeight = dg.rows[RowsCount].cells[].offsetTop - dg.rows[].cells[].offsetTop + 

    //锁定列的宽度

    var LineWidth =  dg.rows[].cells[LineCount].offsetLeft - dg.rows[].cells[].offsetLeft + 

    

    //锁定列的高度

    var LineHeight = dMain.style.height;

    LineHeight = LineHeight.replace("px","");

    //锁定行的宽度

    var RowsWidth = dMain.style.width;

    RowsWidth = RowsWidth.replace("px","");

    

    //hh = parseint(hh);

    

    //赋值

    divResize(dMain,dTop,dLeft,dMid);

    

    if (RowsHeight <)

        RowsHeight = ;

    if (LineWidth <)

        LineWidth = ;

        

    dTop.style.width = RowsWidth - ;

    dTop.style.height = RowsHeight;

    

    dLeft.style.width = LineWidth;

    dLeft.style.height = LineHeight - ;

    

    dMid.style.width = LineWidth ;

    dMid.style.height = RowsHeight;

    

    //设置左上角的位置

    dTop.style.top = myTop ;

    dTop.style.left = myLeft ;

    dLeft.style.top = myTop;

    dLeft.style.left = myLeft;

    dMid.style.top = myTop;

    dMid.style.left = myLeft;

    

}



function divResize(dMain,dTop,dLeft,dMid)

{

    

    dTop.innerHTML = dMain.innerHTML;

    dMid.innerHTML = dMain.innerHTML;

    dLeft.innerHTML =  dMain.innerHTML;

    dLeft = dMain;

}



function divResize2(dMain,dLeft)

{

    dLeft.innerHTML = dMain.innerHTML;

}



function myScroll(me)

{

    var dTop = document.getElementById("dTop");

    var dLeft = document.getElementById("dLeft");

    var dMid = document.getElementById("dMid");            //左上角的Div



    

    dTop.scrollLeft = me.scrollLeft;

    dLeft.scrollTop = me.scrollTop;

    //dMid.scrollLeft = me.scrollLeft;

    //dMid.scrollTop = me.scrollTop;

}

代码比较乱,最近打算简化一下代码,换一个更高效的方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【云原生技术研究】 从bpftrace看如何利用eBPF实现内核追踪
bpftrace提供了一种快速利用eBPF实现动态追踪的方法,可以作为简单的命令行工具或者入门级编程工具来使用。本文以bpftrace为例,介绍如何利用eBPF实现内核的动态追踪。
绿盟科技研究通讯
2020/09/01
2.5K0
【云原生技术研究】 从bpftrace看如何利用eBPF实现内核追踪
Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2024/01/17
7690
Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知
BPF:BCC(BPF Compiler Collection)工具集认知
不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树
山河已无恙
2024/06/21
4470
BPF:BCC(BPF Compiler Collection)工具集认知
eBPF 入门开发实践教程一:介绍与快速上手
Linux内核一直是实现监控/可观测性、网络和安全功能的理想地方, 但是直接在内核中进行监控并不是一个容易的事情。在传统的Linux软件开发中, 实现这些功能往往都离不开修改内核源码或加载内核模块。修改内核源码是一件非常危险的行为, 稍有不慎可能便会导致系统崩溃,并且每次检验修改的代码都需要重新编译内核,耗时耗力。
云微
2023/02/24
1.6K0
技术分享 | 如何使用 bcc 工具观测 MySQL 延迟
爱可生测试团队成员,主要负责 TXLE 开源项目相关测试任务,擅长 Python 自动化测试开发,最近醉心于 Linux 性能分析优化的相关知识。
爱可生开源社区
2020/03/26
1.7K0
技术分享 | 如何使用 bcc 工具观测 MySQL 延迟
eBPF 概述:第 3 部分:软件开发生态
在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究。阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别的工具。为了理解这些工具是如何工作的,我们先定义一下 eBPF 程序的高层次组件:
用户7686797
2021/11/24
7370
eBPF 概述:第 3 部分:软件开发生态
eBPF技术简介
“eBPF 是我见过的 Linux 中最神奇的技术,没有之一,已成为 Linux 内核中顶级子模块,从 tcpdump 中用作网络包过滤的经典 cbpf,到成为通用 Linux 内核技术的 eBPF,已经完成华丽蜕变,为应用与神奇的内核打造了一座桥梁,在系统跟踪、观测、性能调优、安全和网络等领域发挥重要的角色。为 Service Mesh 打造了具备 API 感知和安全高效的容器网络方案 Cilium,其底层正是基于 eBPF 技术”
CNCF
2020/08/24
17.8K1
eBPF技术简介
基于ebpf的性能工具-bpftrace
在现代计算机系统中,了解系统的内部运行情况对于诊断问题、优化性能以及进行安全监控至关重要。bpftrace作为一款强大的跟踪工具,为开发人员和系统管理员提供了一种独特的方式来监视和分析Linux系统的内部运行。本文描述bpftrace的原理和使用。
Rice加饭
2023/09/02
9290
基于ebpf的性能工具-bpftrace
eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
在本篇博客中,我们将深入探讨eBPF(Extended Berkeley Packet Filter)的基本框架和开发流程。eBPF是一种在Linux内核上运行的强大网络和性能分析工具,它为开发者提供了在内核运行时动态加载、更新和运行用户定义代码的能力。这使得开发者可以实现高效、安全的内核级别的网络监控、性能分析和故障排查等功能。
云微
2023/08/14
1.5K0
BPF 之巅:洞悉 Linux 系统和应用性能
BPF 是近年来Linux 系统技术领域一个巨大的创新。作为 Linux 内核的一个关键发展节点,其重要程度不亚于虚拟化、容器、SDN 等技术。
博文视点Broadview
2021/04/29
3.2K0
BPF 之巅:洞悉 Linux 系统和应用性能
强劲的Linux Trace工具:bpftrace (DTrace 2.0) for Linux 2018
译者注:原作者是大名鼎鼎的性能分析专家:Brendan Gregg,现在工作在Netflix,之前工作在Sun,在Sun公司的时候,他就做了大量的性能分析和tracing相关的工作,在Sun的Solaris上存在一种传说中的性能分析和Debug神器: Dtrace,然而,可惜的是,在我们现在的Linux操作系统上并没有Dtrace神器(这可能是因为Dtrace是从Soloris操作系统的衍生品无法迁移到别的操作系统上),Brendan Gregg 在Netflix后,继续利用他的业余时间,利用他曾经在Soloris上的性能分析经验,和对Dtrace工具的理解,研发基于Linux操作系统上的上类似于Dtrace的工具,曾经他在早期的kernel版本上基于perf研发了perf-tools工具,后面在eBPF进入kernel后,开始基于eBPF做性能工具研发的工作,比如bcc工具集,最近又参与了bpftrace的工具。本文主要是Brendan Gregg在介绍 bpftrace在2018年的开发进展,以及对bpftrace的介绍和对Dtrace的区别介绍。
Linux阅码场
2019/06/04
6.2K0
强劲的Linux Trace工具:bpftrace (DTrace 2.0) for Linux 2018
eBPF 入门开发实践指南一:介绍 eBPF 的基本概念、常见的开发工具
Linux内核一直是实现监控/可观测性、网络和安全功能的理想地方,但是直接在内核中进行监控并不是一个容易的事情。在传统的Linux软件开发中,实现这些功能往往都离不开修改内核源码或加载内核模块。修改内核源码是一件非常危险的行为,稍有不慎可能便会导致系统崩溃,并且每次检验修改的代码都需要重新编译内核,耗时耗力。
云微
2023/02/24
8220
eBPF 概述:第 3 部分:软件开发生态
在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究。阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别的工具。为了理解这些工具是如何工作的,我们先定义一下 eBPF 程序的高层次组件:
233333
2023/11/27
3270
eBPF 概述:第 3 部分:软件开发生态
eBPF学习 – 入门
BPF是Berkeley Packet Filter(伯克利数据包过滤器)得缩写,诞生于1992年,其作用是提升网络包过滤工具得性能,并于2014年正式并入Linux内核主线。 BPF提供一种在各种内核事件和应用程序事件发生时允许运行一小段程序的机制,使得内核完全可编程,允许用户定制和控制他们的系统以解决相应的问题。 BPF是一项灵活而高效的技术,由指令集、存储对象和辅助函数等几部分组成。其采用了虚拟指令集规范,运行时BPF模块提供两个执行机制:解释器和即时编译器(JIT)。在实际执行前,BPF指令必须通过验证器(verifer)的安全性检查以确保BPF程序自身不会崩溃或者损坏内核。 扩展后的BPF通常缩写为eBPF,但是官方的说法仍然是BPF,并且内核中也只有一个执行引擎即BPF(扩展后的BPF)。
全栈程序员站长
2022/11/08
1.1K0
eBPF学习 – 入门
eBPF原理介绍与编程实践
注:本文包括了ebpf的原理介绍、流程分析、相关资料链接、工具编写实战等,可以选择感兴趣的部分直接阅读;鉴于作者语文水平有限,很多地方描述可能不清楚,有错误或疑问欢迎指出交流
johnazhang
2022/07/18
2.7K1
eBPF 入门开发实践教程零:介绍 eBPF 的基本概念、常见的开发工具
eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。eBPF 通过允许在操作系统内运行沙盒程序,应用程序开发人员可以在运行时,可编程地向操作系统动态添加额外的功能。然后,操作系统保证安全和执行效率,就像在即时编译(JIT)编译器和验证引擎的帮助下进行本地编译一样。eBPF 程序在内核版本之间是可移植的,并且可以自动更新,从而避免了工作负载中断和节点重启。
云微
2023/08/12
2.9K0
eBPF 入门开发实践教程零:介绍 eBPF 的基本概念、常见的开发工具
好技能 | 如何开发第一个 eBPF 程序
理解了整个收包过程以后,我们就能明确知道Linux收一个包的CPU开销了。首先第一块是用户进程调用系统调用陷入内核态的开销。第二块是CPU响应包的硬中断的CPU开销。第三块是ksoftirqd内核线程的软中断上下文花费的。
穿过生命散发芬芳
2024/11/22
1180
好技能 | 如何开发第一个 eBPF 程序
【eBPF笔记前篇】介绍、开发环境搭建、原理简介、case
之前一个老板说“xxx组的同学是一定要把eBPF用到得心应手”,因为之前是做性能压测相关工作,个人感觉压测其实并不复杂,复杂的是压测后的问题定位,而eBPF则是定位问题的有效工具,我们可以透过eBPF去洞悉内核的运行状态,帮助我们去做故障诊断、网络优化、性能监控、以及安全控制等生产环境中的各种问题。
历久尝新
2022/02/11
5.7K0
【eBPF笔记前篇】介绍、开发环境搭建、原理简介、case
LINUX 性能专家 Brendan Gregg博文拜读系列<1>-附九张性能图片
在深入Linux系统的复杂世界中,性能优化始终是SRE关注的热点。最近在拜读国际著名的 LINUX 性能专家 Brendan Gregg 的个人博客和技术书籍。他的工作不仅涵盖了系统性能的监控和分析,还深入探讨了性能问题的根源及其解决方案。通过他的个人博客和技术书籍,我们可以窥见Linux性能优化的精髓,学习到如何利用各种工具和方法来提升系统效率,确保应用的顺畅运行。将会结合 Brendan Gregg博文与个人理解 出一个拜读系列博文。
五分钟学SRE
2024/04/10
8640
LINUX 性能专家 Brendan Gregg博文拜读系列<1>-附九张性能图片
BPF 和 Go: Linux 中的现代内省形式
本文将向你介绍为什么我们需要像 BPF 这样的东西,并帮助你了解何时及如何使用它,以及它是如何帮助作为工程师的你改进你正在进行的项目的。我们还将研究它与 Go 相关的一些详细信息。
深度学习与Python
2021/12/28
7760
BPF 和 Go: Linux 中的现代内省形式
推荐阅读
相关推荐
【云原生技术研究】 从bpftrace看如何利用eBPF实现内核追踪
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档