网页制作中在头部固定悬浮table表头(thead)的方法

这两天接了一个需求,页面是这样的

然后需求是页面中的这个表格当页面向上滚动,且表格的表头到达窗口上方时,表头悬浮在页面的上方,表格正常滚动,这样表格内的数据可以随时看到表头内容。

一开始我认为这是极简单的,就当页面滚动,判断表头到窗口的距离,当=0的时候触发事件然后让表头position:fixed不就万事大吉了吗?于是我对漂亮又萌萌哒的产品妹子说,放心吧,这个简单的很一会就能完事,当时我的表情是这样的

但是当我开始写(首先你要知道,我是个js小白,表问我为什么。。。),问题就来了。首先,这个页面滚动应该用$(window).scroll,那么我怎么去判断表头到窗口的距离呢?我立马想到了offset,这里正好温习一下offset()和position()的区别,首先呢他们确实都代表位置,不过呢 ,offset().top是元素到文档顶部的距离,意思就是这个值呢如果你没操作dom正常来说,是不会发生变化滴,position是元素相对于父元素的距离就更别想了。。。没有一个对劲。。。然后我又想到了scrollTop(),你看这个跟scroll长得那么像肯定没问题!不过等我仔细看了一下API就傻了,"获取匹配的元素集合中第一个元素的当前垂直滚动条的位置或设置每个匹配元素的垂直滚动条位置",读了一遍没读明白,但是我理解的是元素在该区域内的滚动条的滚动距离,比如说你写了一个div,高度固定,然后overflow:scroll,那么该div的scrollTop就是这个内容超出后出现的滚动条的垂直距离,说了一堆感觉好像也没啥用。。。。总之就是不能单纯用scrollTop()来获取这个表头到窗口顶部的距离了。

一时间陷入了僵局。。。怎么办呢,我去厕所思考人生了。。。

嗯,经过在马桶上的思想斗争,我的思路无比开朗。既然单个不行就组合吧,使用$(‘body‘).scrollTop()与表头的offset().top差值,因为页面打开默认滚动条是在顶部的,如果要将表头滚到窗口的顶部那么,滚动条就要滚动表头的offset().top的距离,当大于这个值那么表头肯定就已经在顶部的负值区域看不到了,嗯。。。

解决了这个问题之后,我为自己欢欣鼓舞,然而,还有一个问题在等着我。那就是表头直接position:fixed的话,实际上此时表头已经脱离了正常的文档流。除了里面的内容样式都已经没了啊,我摔!就算勉强加上了样式,因为表格的内容是自由扩展的,所以每一列的列宽是由表头和表内的元素共同决定的,单独把表头拿出来是不行不行滴啊!!

然后,嗯,我动态生成了一个div,clone了整个表,获取表头的高给这个div,然后让这个div overflow:hidden了!天阿鲁,我简直就是个天才。不再废话了,献上源码~

<script src="js/jquery-latest.js"></script>
<script>
    $(function(){
        var scroll_bar = $("#scroll_bar");//表格的id
        var bar_head = $("#bar_head");//表头
        var bar_height = bar_head.height();//表头高
        var sroll_header= scroll_bar.clone().attr(‘id‘,‘bb‘);//更改复制的表格id
        $(window).scroll(function(){
            var scroll_top = $(‘body‘).scrollTop() - scroll_bar.offset().top;//判断是否到达窗口顶部

            if (scroll_top > 0) {
                $(‘body‘).append(‘<div id="shelter"></div>‘);//复制的表格所在的容器
                $("#shelter").css({‘height‘:bar_height,‘position‘:‘fixed‘,‘top‘:‘0‘,‘overflow‘:‘hidden‘,‘width‘:‘1200px‘,‘margin‘: ‘0 auto‘,‘left‘:‘0‘,‘right‘:‘0‘,‘border-bottom‘:‘1px solid #c8c8c8‘});
                sroll_header.appendTo(‘#shelter‘);
                $(‘#shelter table‘).removeClass(); //删除table原来有的默认class,防止margin,padding等值影响样式
                $(‘#shelter table‘).css({‘width‘:‘100%‘,‘background-color‘:‘#f0f0f0‘});
                $(‘#shelter table tr th‘).css({‘height‘: bar_height,‘width‘:‘140px‘,‘border‘:‘1px solid #c8c8c8‘});//此处可以自行发挥
                $(‘#shelter table tr td‘).css({‘padding‘:‘10px‘,‘text-align‘:‘center‘});

                $(‘#shelter‘).show();

            }else {
                $(‘#shelter‘).hide();
            }
        });

    });

</script>

另外附上一个我找的其他实现方法,但是我觉得太重,所以放弃了,还是把链接放下大家自己参考吧

http://www.uedsc.com/sticky-table-headers-columns.html

就这么多吧,欢迎各位童鞋批评质疑~

时间: 2024-10-08 15:59:22

网页制作中在头部固定悬浮table表头(thead)的方法的相关文章

bootstrap table 实现固定悬浮table 表头并可以水平滚动

在开发项目中,需要将表格头部固定,而且表格大多数情况下是会水平滚动的.项目的css框架是bootstrap 3,故也可以叫做bootstrap table. 需要实现的是:表格头部固定,并且支持水平滚动 html code(source table): <table id="top_fix_table" border="0" cellpadding="4" cellspacing="0" class="tabl

HTML、DIV+CSS网页制作中排版混乱的几种常见的情况

对于Web前端初学者或者经验不够丰富的人来说,出现页面排版布局混乱的情况并不罕见,有时候明明前面部分的网页都很整齐美观,可是在接下来的部分中经常会出现网页布局混乱,比如content无法调整到开发者需要的位置,或者出现页面重叠的现象.以下内容是我个人在网页制作过程中关于网页排版混乱及其解决办法的一些经验总结,不足之处,希望大家互相补充学习. )DIV+CSS网页错位的原因与解决方法 常常我们会遇到我们要设置在一行显示的布局,却因为种种原因造成了错位,看到结果是在一行的最后一个盒子布局错位掉下去了

《SEO在网页制作中的应用》视频笔记

学习了慕课网<SEO在网页制作中的应用>视频,今天将里面的知识整理一下. 一.SEO介绍 1.  搜索引擎工作原理 搜索引擎现在主流有百度.谷歌.360,他们都有庞大的搜索引擎数据库,每个关键字对应很多网址,搜索引擎爬虫从一个链接到另一个链接,分析提炼其中的内容,找到关键字,如果是重要的或是首次出现的内容,就会添加到搜索引擎数据库,如果是垃圾内容或是重复内日你给,爬虫就会略过.当用户(比如在百度)搜索信息时,搜索引擎就从数据库检索出与之相关的网址,然后展示给用户,因为一个关键字可以对应很多网址

网页制作中的背景处理

在制作网页过程中,经常需要考虑页面中的留白问题,因为我们设计时,按大多数用户显示器的设置来制作内容区,即横向分辨率的设置是1024像素,可是用户设置是多样化的比如有的用户是1280.1440.1600.1680等,内容区之外会有很多的留白,为了美观起见,不可避免地需要对留白区进行一些处理. 下面是一般的做法. 1.用一个图片来做背景,其余的地方填充颜色. ①背景图很大,不铺: ②背景图片很长,只是横向铺而纵向不铺: ③一张图片横向纵向都铺. 根据效果选择,关键是背景图片的处理. 2.留白的地方要

网页制作中绝对路径和相对路径的区别

网页制作中绝对路径和相对路径的区别 http://www.veryhuo.com 烈火网 2012-10-10 投递稿件 做个开发的人,对于文件或者文件夹的定义都是有一定的规范的,比如建立一个网站前端设计,要建立的文件夹有css,js,images,swf等等,如图: 很多文件之下单个页面的连接,文件引用的时候就需要对路径这个问题有一定的了解:或者对php 网络程序开发有了解的程序员都会对define和include结合定义变量路径和引用的有很多见解. 比如: define('ROOT_PATH

SEO在网页制作中的应用

SEO由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”.SEO是指从自然搜索结果获得网站流量的技术和过程,是在了解搜索引擎自然排名机制的基础上, 对网站进行内部及外部的调整优化, 改进网站在搜索引擎中的关键词自然排名, 获得更多流量, 从而达成网站销售及品牌建设的目标. SEO的主要工作: 一.内部优化,内容为王 (1)meta标签优化:例如:title,keywords,description等的优化 (2)内部链接的优化,包括相关性链接(Tag

头部固定的table

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>头部固定table</title> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta name="viewport

网页制作中,有哪些可以快速应急的技巧?

作为网页设计师,想要保证设计水准的前提下完成客户的“年底上线”心愿,你能想到的唯一办法就是…昏天黑地的加班!这对设计师来说是一种很煎熬的折磨,今天我们在年末特别呈现网页设计的应急小方法,希望能把设计师从水生火热中解救出来.虽然客户主观缩短了设计时间,但他们对网页的要求却不会因此降低一分一毫,要在短时间内设计出能让客户接受的设计稿,你也许需要一些小技巧! 1.让几何元素提升网页层次 一个简单的几何元素在网页设计中起到的作用绝对能让你出乎意料,尤其在应对极简风格的网站时效果更佳.设计,无非是点.线.

在网页制作中,初学者经常犯的那些小迷糊

对于web初学者来说,在网页的制作过程中经常会出现一些小Bug,这些问题的看似很小很小,却影响我们网页设计的正常完成,下面是我个人学习过程中出现过的一些小问题,在此做一个总结. 1,很多设计师把握不好承载信息的空间与留白之间的平衡.文本.图片和菜单应放在能与之形成足够反差的背景上,通过调整各元素之间的间距来营造干净整洁的外观,拥挤的页面是不能抓住访客注意力的.创建网站的过程中记得检查页边距和padding样式 2.网络用图应调整尺寸或压缩大小,以节省空间和加载时间.若非如此,加载图片需要很长的时