最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用JS、CSS實(shí)現(xiàn)列表自動(dòng)滑動(dòng)滾動(dòng)效果實(shí)例

 更新時(shí)間:2024年07月06日 14:33:48   作者:是洋洋a  
這篇文章主要給大家介紹了關(guān)于利用JS、CSS實(shí)現(xiàn)列表自動(dòng)滑動(dòng)滾動(dòng)效果的相關(guān)資料,本人在項(xiàng)目中遇到這樣的需求,親自來做的,通過html頁面配合js,css來做出的列表自動(dòng)滑動(dòng),需要的朋友可以參考下

零.業(yè)務(wù)需求

這幾天在做大屏項(xiàng)目,對(duì)于大屏有很多信息需要實(shí)時(shí)滾動(dòng),廢了點(diǎn)力氣學(xué)的明明白白的,特來記錄供大家學(xué)習(xí)。

0.1實(shí)現(xiàn)效果

一.邏輯分析

1.1滑動(dòng)窗口和滾動(dòng)條

當(dāng)我們使用<table>或者<ul>標(biāo)簽時(shí),我們可以制作一個(gè)滾動(dòng)條,通過滾動(dòng)條來實(shí)現(xiàn)我們想要查看的內(nèi)容。

在滾動(dòng)窗口內(nèi),“已經(jīng)滾動(dòng)過去”的區(qū)域我們稱為:“scrollHeight”,“還未滾動(dòng)到”的 區(qū)域我們稱為:“scrollBottom”,“當(dāng)前顯示區(qū)域”稱為:“scrollNow”。

我們?cè)儆靡粡垐D來描述一下,上面三個(gè)概念

可能有點(diǎn)丑...

為方便,上面這一整個(gè)區(qū)域(scrollTop、scrollNow、scrollBottom),我們統(tǒng)稱為:“滑動(dòng)窗口

1.2邏輯構(gòu)思

如果我們有:“兩份一模一樣的數(shù)據(jù)順序排列在一起形成一份數(shù)據(jù)”,再將這一份數(shù)據(jù)中的“元素”挨個(gè)展示在我們的“scrollNow”區(qū)域中,當(dāng)這份數(shù)據(jù)的最后一個(gè)“元素”被展示時(shí),我們重新讓一整份數(shù)據(jù)從頭開始,這樣就在視覺上實(shí)現(xiàn)了滾動(dòng)的效果。

在這里,有一個(gè)關(guān)鍵性的問題:“兩份數(shù)據(jù)的長(zhǎng)度一定要大于顯示區(qū)域的長(zhǎng)度,否則將無法實(shí)現(xiàn)滑動(dòng)

至于為什么,大家思考一下就行,當(dāng)我們的數(shù)據(jù)滑動(dòng)時(shí),滑動(dòng)過去的數(shù)據(jù)被“隱藏”了,但并不是消失了!

如果我們的“可顯示區(qū)域”大于“數(shù)據(jù)”的長(zhǎng)度,那么就會(huì)出現(xiàn)下面的情況:

當(dāng)顯示區(qū)域的長(zhǎng)度足夠容納:“所有的數(shù)據(jù)”,此時(shí)還有“滑動(dòng)”的必要嗎???

我們“滑動(dòng)”的原因是因?yàn)椋?ldquo;數(shù)據(jù)量太大,展示區(qū)域有限,故讓它滑動(dòng)方便查看

1.3偽代碼實(shí)現(xiàn)

在js中,有幾個(gè)屬性:

scrollTop”用來“設(shè)置或者獲取”元素的已滾動(dòng)的上部不可見區(qū)域”的高度,這個(gè)概念就是我們上述講的“scrollTop”(已經(jīng)滾動(dòng)過的區(qū)域)

scrollHeight”用來“返回”元素所有內(nèi)容的“總高度”(包括折疊不見的),這個(gè)就是我們上述所說的(scrollTop+scrollNow+scrollBottom)

利用這幾個(gè)屬性,我們可以設(shè)定一個(gè)計(jì)時(shí)器用來計(jì)時(shí),每次計(jì)時(shí)器加值時(shí),scrollTop的值隨之加值(向上滾動(dòng)),從而實(shí)現(xiàn)了滾動(dòng)。

二.代碼實(shí)現(xiàn)

2.1創(chuàng)建骨架

我們先創(chuàng)建一個(gè)div盒子,作為整個(gè)列表的骨架:

    <div id="review_box">
            <ul id="comment1">
                <li>第一條</li>
                <li>第二條</li>
                <li>第三條</li>
                <li>第四條</li>
                <li>第五條</li>
                <li>第六條</li>
            </ul>
            <ul id="comment2"></ul>
    </div>

其中“comment1<ul>原數(shù)據(jù),“comment2<ul>原數(shù)據(jù)的副本,這兩部分?jǐn)?shù)據(jù)組合在一起形成我們的“一整個(gè)數(shù)據(jù)

<li>就是我們的“元素”,方便起見我這里內(nèi)置數(shù)據(jù),后面根據(jù)需要可以自己再寫一個(gè)函數(shù)添加數(shù)據(jù)。

2.2創(chuàng)建樣式

只有骨架是不行的,沒有用到CSS美觀是很丑的,如果不使用CSS,那么就是下圖這個(gè)樣子:

為此我們使用如下代碼:

    <style>
        div {
            width: 100px;
            height: 100px;      /*列表的長(zhǎng)度*/
            overflow: hidden;/* 必須 */
            margin: 50px auto;
            border: 1px solid red;
            text-align: center;
        }
        ul {
            margin: 0;
            padding: 0;         /*元素居中*/
            list-style: none;   /*去掉元素前面的標(biāo)簽*/
        }
        li{
            height: 20px;  /*元素高度,數(shù)據(jù)的高度等于元素個(gè)數(shù)乘元素高度*/
        }
    </style>

2.3JS代碼

我們先創(chuàng)建一個(gè)“roll”滾動(dòng)函數(shù),用來實(shí)現(xiàn)控制“鼠標(biāo)懸停在列表上時(shí)暫停滾動(dòng)”、“鼠標(biāo)離開列表時(shí)繼續(xù)滾動(dòng)

我們分別使用:“onmouseover”和“onmouseout兩個(gè)事件來完成。

實(shí)現(xiàn)“向上滾動(dòng)”和“向下滾動(dòng)”在js中有些許不同,這里先以“向上滾動(dòng)”為例

        function roll(t) {
            var ul1 = document.getElementById("comment1");
            var ul2 = document.getElementById("comment2");
            var ulbox = document.getElementById("review_box");
            ul2.innerHTML = ul1.innerHTML;
            ulbox.scrollTop = 0; // 開始無滾動(dòng)時(shí)設(shè)為0
            var timer = setInterval(rollStart, t); // 設(shè)置定時(shí)器,參數(shù)t用在這為間隔時(shí)間(單位毫秒),參數(shù)t越小,滾動(dòng)速度越快
            // 鼠標(biāo)移入div時(shí)暫停滾動(dòng)
            ulbox.onmouseover = function () {
                clearInterval(timer);
            }
            // 鼠標(biāo)移出div后繼續(xù)滾動(dòng)
            ulbox.onmouseout = function () {
                timer = setInterval(rollStart, t);
            }
        }

我們?cè)賱?chuàng)建一個(gè)“rollStart”函數(shù),用來啟動(dòng)“自動(dòng)滑動(dòng)

        function rollStart() {
            // 上面聲明的DOM對(duì)象為局部對(duì)象需要再次聲明
            var ul1 = document.getElementById("comment1");
            var ul2 = document.getElementById("comment2");
            var ulbox = document.getElementById("review_box");
            // 正常滾動(dòng)不斷給scrollTop的值+1,當(dāng)滾動(dòng)高度大于列表內(nèi)容高度時(shí)恢復(fù)為0
            if (ulbox.scrollTop >= ul1.scrollHeight) {
                ulbox.scrollTop = 0;
            } else {
                ulbox.scrollTop += 1;
            }
    }

最后,在代碼的最前面加一句:

         window.onload = roll(20);

用來代碼在頁面加載完畢時(shí)自動(dòng)啟動(dòng),一切就完成啦??!

附:

如果想要列表向下滾動(dòng),我們只改動(dòng)三處數(shù)值即可:

ulbox.scrollTop = ul1.scrollHeight; // 開始無滾動(dòng)時(shí)設(shè)列表最長(zhǎng)高度,用來表示到底了

 上面將初始“scrollTop”置為最大值,表示此時(shí)數(shù)據(jù)底部到底了,即無法繼續(xù)向下滑動(dòng),只能向上滑動(dòng)

// 正常滾動(dòng)不斷給scrollTop的值減一,當(dāng)滾動(dòng)高度小于等于0時(shí),需要重新為最大高度
if (ulbox.scrollTop > 0) {
    ulbox.scrollTop = ul1.scrollHeight;
}
else {
    ulbox.scrollTop -= 1;
}

上面控制“scrollTop”的值每次減一,如果小于等于0了,說明此時(shí)數(shù)據(jù)頂部到底了,即無法繼續(xù)向上滑動(dòng),只能向下滑動(dòng)

值得注意:

若向下滑動(dòng),對(duì)應(yīng)的數(shù)據(jù)也應(yīng)是逆置的,否則將會(huì)出現(xiàn)部分?jǐn)?shù)據(jù)無法正?;瑒?dòng):

    <div id="review_box">
            <ul id="comment1">
                <li>第六條</li>
                <li>第五條</li>
                <li>第四條</li>
                <li>第三條</li>
                <li>第二條</li>
                <li>第一條</li>
            </ul>
            <ul id="comment2"></ul>
    </div>

 不過若此時(shí)(列表長(zhǎng)度等于原數(shù)據(jù)長(zhǎng)度[不是整個(gè)數(shù)據(jù)]的高度,那么數(shù)據(jù)可以不用逆置)

三.全部代碼

下面代碼,復(fù)制粘貼即可使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;      /*列表的長(zhǎng)度*/
            overflow: hidden;/* 必須 */
            margin: 50px auto;
            border: 1px solid red;
            text-align: center;
        }
        ul {
            margin: 0;
            padding: 0;         /*元素居中*/
            list-style: none;   /*去掉元素前面的標(biāo)簽*/
        }
        li{
            height: 30px;  /*元素高度,數(shù)據(jù)的高度等于元素個(gè)數(shù)乘元素高度*/
        }
    </style>
</head>
<body>
    <div id="review_box">
            <ul id="comment1">
                <li>第一條</li>
                <li>第二條</li>
                <li>第三條</li>
                <li>第四條</li>
                <li>第五條</li>
                <li>第六條</li>
            </ul>
            <ul id="comment2"></ul>
    </div>
    <script>
         window.onload = roll(20);
  
        function roll(t) {
            var ul1 = document.getElementById("comment1");
            var ul2 = document.getElementById("comment2");
            var ulbox = document.getElementById("review_box");
            ul2.innerHTML = ul1.innerHTML;
            ulbox.scrollTop = 0; // 開始無滾動(dòng)時(shí)設(shè)為0
            var timer = setInterval(rollStart, t); // 設(shè)置定時(shí)器,參數(shù)t用在這為間隔時(shí)間(單位毫秒),參數(shù)t越小,滾動(dòng)速度越快
            // 鼠標(biāo)移入div時(shí)暫停滾動(dòng)
            ulbox.onmouseover = function () {
                clearInterval(timer);
            }
            // 鼠標(biāo)移出div后繼續(xù)滾動(dòng)
            ulbox.onmouseout = function () {
                timer = setInterval(rollStart, t);
            }
        }
 
        // 開始滾動(dòng)函數(shù)
        function rollStart() {
            // 上面聲明的DOM對(duì)象為局部對(duì)象需要再次聲明
            var ul1 = document.getElementById("comment1");
            var ul2 = document.getElementById("comment2");
            var ulbox = document.getElementById("review_box");
            // 正常滾動(dòng)不斷給scrollTop的值+1,當(dāng)滾動(dòng)高度大于列表內(nèi)容高度時(shí)恢復(fù)為0
            if (ulbox.scrollTop >= ul1.scrollHeight) {
                ulbox.scrollTop = 0;
            } else {
                ulbox.scrollTop += 1;
            }
    }
    </script>
</body>
</html>

總結(jié) 

到此這篇關(guān)于利用JS、CSS實(shí)現(xiàn)列表自動(dòng)滑動(dòng)滾動(dòng)效果的文章就介紹到這了,更多相關(guān)JS實(shí)現(xiàn)列表自動(dòng)滑動(dòng)滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)的技巧

    JavaScript中將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)的技巧

    在JavaScript中,parseFloat是一個(gè)內(nèi)置函數(shù),用于將一個(gè)字符串解析成浮點(diǎn)數(shù),這個(gè)方法對(duì)于處理用戶輸入、從文本文件讀取數(shù)據(jù)或者在Web API中獲取數(shù)值尤其重要,本文將詳細(xì)介紹parseFloat的工作原理、使用方法以及通過代碼案例展示其在實(shí)際開發(fā)中的應(yīng)用
    2025-02-02
  • 如何計(jì)算Web動(dòng)畫幀率FPS

    如何計(jì)算Web動(dòng)畫幀率FPS

    我們知道,動(dòng)畫其實(shí)是由一幀一幀的圖像構(gòu)成的。有Web動(dòng)畫那么就會(huì)存在該動(dòng)畫在播放運(yùn)行時(shí)的幀率。而幀率在不同設(shè)備不同情況下又是不一樣的。有的時(shí)候,一些復(fù)雜或者重要?jiǎng)赢?,需要?shí)時(shí)監(jiān)控它們的幀率,從而更好的優(yōu)化它們,本文就是介紹Web動(dòng)畫幀率(FPS)計(jì)算方法。
    2021-05-05
  • JS+CSS實(shí)現(xiàn)自適應(yīng)選項(xiàng)卡寬度的圓角滑動(dòng)門效果

    JS+CSS實(shí)現(xiàn)自適應(yīng)選項(xiàng)卡寬度的圓角滑動(dòng)門效果

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)自適應(yīng)選項(xiàng)卡寬度的圓角滑動(dòng)門效果,通過簡(jiǎn)單的css設(shè)置實(shí)現(xiàn)圓角滑動(dòng)門功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-09-09
  • js函數(shù)模擬顯示桌面.scf程序示例

    js函數(shù)模擬顯示桌面.scf程序示例

    這篇文章主要介紹了一個(gè)模擬顯示桌面.scf程序的JS小函數(shù),需要的朋友可以參考下
    2014-04-04
  • 根據(jù)服務(wù)器時(shí)間作為起始,顯示時(shí)鐘的小程序

    根據(jù)服務(wù)器時(shí)間作為起始,顯示時(shí)鐘的小程序

    一般的網(wǎng)頁都有這種功能:在頁面上動(dòng)態(tài)顯示當(dāng)前時(shí)間,這個(gè)的實(shí)現(xiàn)也很簡(jiǎn)單,基本上一行代碼就實(shí)現(xiàn)了
    2009-06-06
  • javascript生成隨機(jī)數(shù)的方法

    javascript生成隨機(jī)數(shù)的方法

    這篇文章主要介紹了javascript生成隨機(jī)數(shù)的方法,需要的朋友可以參考下
    2014-05-05
  • 使用Javascript開發(fā)sliding-nav帶滑動(dòng)條效果的導(dǎo)航插件

    使用Javascript開發(fā)sliding-nav帶滑動(dòng)條效果的導(dǎo)航插件

    這篇文章主要介紹了使用Javascript開發(fā)sliding-nav帶滑動(dòng)條效果的導(dǎo)航插件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法

    js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法

    這篇文章主要介紹了js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法,結(jié)合實(shí)例較為詳細(xì)的分析了JavaScript與jQuery針對(duì)checkbox復(fù)選框全選與反選的操作技巧,需要的朋友可以參考下
    2016-01-01
  • 換膚測(cè)試程序js腳本

    換膚測(cè)試程序js腳本

    換膚測(cè)試程序js腳本...
    2007-01-01
  • js原生日歷的實(shí)例(推薦)

    js原生日歷的實(shí)例(推薦)

    下面小編就為大家?guī)硪黄猨s原生日歷的實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10

最新評(píng)論

辉县市| 石棉县| 化隆| 红河县| 洛川县| 苏尼特右旗| 玉溪市| 双牌县| 昌邑市| 长宁区| 香港 | 禄劝| 景德镇市| 长汀县| 鹤岗市| 进贤县| 建德市| 红河县| 太仓市| 苏尼特右旗| 石家庄市| 岑溪市| 永新县| 卓尼县| 西昌市| 伊通| 兴安盟| 扶余县| 清丰县| 习水县| 开远市| 会宁县| 龙岩市| 济宁市| 鹰潭市| 肇庆市| 通榆县| 泸溪县| 阳春市| 定陶县| 鄄城县|