首页 > 其他分享 >利用jQuery制作简易的table上下无缝轮播

利用jQuery制作简易的table上下无缝轮播

时间:2023-06-15 15:47:04浏览次数:52  
标签:jQuery body 轮播 top tr tbody let table

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>

    <style>
        .box {
            /* 最外层可显示的高度 */
            height: 200px;
            overflow: hidden;
        }

        .table {
            width: 600px
        }

        .thead,
        .tbody {
            position: relative;
        }

        .thead {
            z-index: 1;
            background: darkgray;
        }

        .tbody {
            z-index: 0;
        }
    </style>
</head>

<body>
    <div class="box">
        <table class="table" border=1 cellspacing=0>
            <thead class="thead">
                <tr>
                    <th>序号</th>
                    <th>名字</th>
                    <th>年龄</th>
                    <th>性别</th>
                    <th>测试1</th>
                </tr>
            </thead>
            <tbody class="tbody">

            </tbody>
        </table>
    </div>
    <script>

        // 加载数据
        for (let i = 0; i < 20; i++) {
            var row = [
                '<tr>',
                '<td title="' + i + 1 + '">' + i + 1 + '</td>',
                '<td>' + '名字' + i + '</td>',
                '<td>' + '年龄' + i + '</td>',
                '<td>' + '性别' + i + '</td>',
                '<td>' + '测试1--' + i + '</td>',
                '</tr>'
            ].join('')
            console.log(row)
            $('.box tbody').append(row)
        }

        startRoll(50)  //50为时间
        function startRoll(time) {
            let timer = null
            //默认初始值为自己本身的top
            let top = $(".tbody").css('top')
            let offsetTop = top.substring(0, top.indexOf('px'))
            startFun(time)
            function startFun(time) {
                timer = setInterval(() => {
                    //比较数据的长度是否超过div的高度,没超过不开始轮播
                    if (!heightComparison()) {
                        clearTimeout(timer)
                        return false
                    }
                    offsetTop -= 1

                    let body_tbody = $("tbody")   //定义 tbody为body_tbody
                    let scrollHeight = body_tbody.find("tr").outerHeight(true);   //获取  tr的高度
                    
                    let tbodyTopPX = body_tbody.css('top');      // 获取tbody的top值
                    let tbodyTop = tbodyTopPX.substring(0, tbodyTopPX.indexOf('px'))
                    
                    body_tbody.css({ 'top': offsetTop + 'px' })     //改变tbody的top    令tbody向上移动
                    
                    if (tbodyTop != 0 && parseInt(tbodyTop) % Math.ceil(scrollHeight) === 0) {         //  tbodyTop的top值是 tr高度的倍数时    将第一个tr移动到最后并让tbodyTop的top值减去tr的高度
                        body_tbody.find("tr:first").appendTo(body_tbody);
                        offsetTop += scrollHeight
                        body_tbody.css({ 'top': offsetTop + 'px' })
                    }

                }, time)
            }
            $(".box").mouseover(function () {
                // 鼠标移入  关闭轮播
                clearTimeout(timer)
            });
            $(".box").mouseout(function () {
                // 鼠标移出  重新开启轮播
                startFun(time)
            });
        }

        function heightComparison() {
            let divHeight = $(".box").height();    //最外层div的高度  用来比较数据的长度是否超过div的高度,没超过不开始轮播
            let tbodyHeight = $(".tbody").height();
            let tHeadHeight = $(".thead").height();
            return tbodyHeight > divHeight - tHeadHeight
        }

    </script>
</body>

</html>

 

标签:jQuery,body,轮播,top,tr,tbody,let,table
From: https://www.cnblogs.com/Z-HarOld/p/17483052.html

相关文章

  • jquery语法总结与注意事项
    1、关于页面元素的引用通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。2、jQuery对象与dom对象的转换只有jquery对象才能使用jquery定义的方法。注意dom对象和......
  • [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
    jQuery片段:1.(function(){2.//这里忽略jQuery所有实现3.})();当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!真神奇哦!嘿嘿!胡闹到此为止。在这一节,我们碰到的jQuery片段是一组立即运行的匿名函数。而这种用法在论坛上也曾引起过激辩......
  • [从jQuery看JavaScript]-数据类型和对象(Type and Object)(一)
    jQuery片段:1.var2.//Willspeedupreferencestowindow,andallowsmungingitsname.3.window=this,4.//Willspeedupreferencestoundefined,andallowsmungingitsname.5.undefined,6.//MapoverjQueryincas......
  • VUE使用Element-ui表达式拼接字符串 el-table-column的prop拼接字符串 拼接table 使
    VUE使用Element-ui表达式拼接字符串el-table-column的prop拼接字符串使用<templateslot-scope="scope">更改td里面值https://blog.csdn.net/WindNolose/article/details/125422409描述VUE中的标签属性,可以在属性前使用:,让属性绑定到data中的动态数据el-table-column标......
  • Wtm layui add form pop out and dispaly in tables
    #regionAddChargeItem[AllRights]//useineditpagepublicIActionResultAddChargeJob(stringid){varvm=Wtm.CreateVM<tbl_ma_dbn_jobListVM>();vm.SearcherMode=ListVMSearchModeEnum......
  • AdPlayBanner:功能丰富、一键式使用的图片轮播插件
    概述AdPlayBanner:功能丰富、一键式使用的图片轮播插件详细AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresco、Picasso、Glide等图片加载方式供用户使用,以及多种图片切换动画,设置轮播时间,设置数据源顺序,提......
  • Oracle drop table ... purge
    https://www.cnblogs.com/hider/p/12194675.html操作Oracle时,经常会删除一个表,当删除错误后,希望能够恢复该表,有时也希望删除表之后能够立刻释放表的空间。通过purge的使用可以在Oracle中删除表、恢复表和空间释放。droptable当在Oracle中删除(drop)一个表时,数据库不......
  • jqtreetable jquery-treeview
    jqtreetable[img]http://dl.iteye.com/upload/attachment/466717/80fc34ec-ed82-3c04-b2f4-5de688bbf990.jpg[/img]jquery-treeview[img]http://dl.iteye.com/upload/attachment/466715/3c0521cb-37e0-3fc6-8dfc-f438b48e8569.jpg[/img]......
  • mysql-主从数据一致性检查工具 pt-table-checksum
    pt-table-checksum工具介绍pt-table-checksum是PerconaToolkit的一个组件,用于检测MySQL主、从库的数据是否一致。它的原理是在主库执行基于statement的SQL语句来生成主库数据块的checksum,把相同的SQL语句传递到从库执行,并在从库上计算相同数据块的checksum,最后,比......
  • How many ways of selecting/referring to a column in data.table?
    Loaddemodatalibrary(data.table)flights=fread("https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv")flightsSelectonesinglecolumnSupposeIwanttoselectthefirstcolumnyear.flights[,1]#retu......