利用jQuery製作簡易的table上下無縫輪播

来源:https://www.cnblogs.com/Z-HarOld/archive/2023/06/15/17483052.html
-Advertisement-
Play Games

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="wi ...


<!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>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從北京到新疆、從中國到南非,從奧運會場館的水泥混凝土到錢塘江畔拔地而起的高樓房產,無不存在著這個集團的身影。 歷經60多年滄桑巨變,某市屬大型國有控股建築產業集團已發展成為一家中國500強企業、A+H整體上市公司,然而,該集團的實力與決心,遠不限於此。 為讓數據更好支撐業務,該集團與袋鼠雲合作,通過 ...
  • 摘要:雲資料庫RDS for MySQL支持參數模板的導入和導出功能。 本文分享自華為雲社區《【雲小課】【第56課】RDS for MySQL參數模板一鍵導入導出,參數配置輕鬆搞定》,作者:資料庫的小雲妹。 雲資料庫RDS for MySQL支持參數模板的導入和導出功能。 導入參數模板:導入後會生成 ...
  • # 基於Elasticsearch 為電商提供商品數據大數據查詢 # 前言 對於現代電商的產品,維度的多員花,與一套強大的搜索引擎,那是非常必要的。今天我們主要是描述我們在從事電商搜索引擎過程中的遇到的一些問題和經驗分享。 # 過程 ### 數據準備 >> 1、我們準備為我們需要做查找的數據做好一張 ...
  • 消息推送作為App運營日常使用的用戶促活和召回手段,是與用戶建立持續互動和連接的良好方式。[推送服務](https://developer.huawei.com/consumer/cn/hms/huawei-pushkit?ha_source=hms1)(Push Kit)是華為提供的消息推送平臺, ...
  • > Kotlin的協程自推出以來,受到了越來越多Android開發者的追捧。另一方面由於它龐大的API,也將相當一部分開發者拒之門外。本篇試圖從協程的幾個重要概念入手,在複雜API中還原出它本來的面目,以全新的角度帶讀者走進Kotlin協程世界。 ### 什麼是協程 在很多有關協程的文章中,描述協程 ...
  • ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/44a0e0fd567c4421bc94be83e84f6dce~tplv-k3u1fbpfcp-zoom-1.image) ## 一、版本說明 XCode 15 beta 發佈於 2023 ...
  • # 一、需求 1、瞭解IMS相關知識體系 2、RILD 與 RILJ、IMS回調消息的機制 # 二、相關概念 ## 2.1 IMS IMS全稱是IP Multimedia Subsystem,中文意義為IP多媒體子系統。IMS是一種基於IP基礎結構,能夠融合數據、話音和移動等網路技術的系統。 **I ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 xlsx導出是比較前後端開發過程中都比較常見的一個功能。但傳統的二維表格可能很難能滿足我們對業務的需求,因為當數據的維度和層次比較多時,二維表格很難以清晰和壓縮的方式展現所有的信息,所以我們也就經常能碰到多級表頭開發了。 demo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...