無縫單條新聞滾動效果---原生JavaScript 手作

前端入坑紀(jì) 03

讓假期來得更猛烈些吧!今天假期第一天,來個(gè)新聞滾動!

今天總感覺直接切換過來太突兀,想想還是這樣做個(gè)無縫的好!

頭等大事:項(xiàng)目鏈接

HTML 結(jié)構(gòu)
    <div class="ulwrp">
        <ul id="oul">
            <li>新聞標(biāo)題內(nèi)容示例001</li>
            <li>新聞標(biāo)題內(nèi)容示例002</li>
            <li>新聞標(biāo)題內(nèi)容示例003</li>
            <li>新聞標(biāo)題內(nèi)容示例004</li>
            <li>新聞標(biāo)題內(nèi)容示例005</li>
            <li>新聞標(biāo)題內(nèi)容示例006</li>
        </ul>
    </div>
CSS 結(jié)構(gòu)
        ul,
        li {
            text-align: center;
            padding: 0;
            margin: 0;
        }
        
        .ulwrp {
            height: 35px;
            line-height: 35px;
            overflow: hidden;
        }
        ul>li {
            height: 35px;
            line-height: 35px;
        }
        ul>li:nth-child(even) {
            color: #666;
            background: lightyellow;
        }
        
        ul>li:nth-child(odd) {
            color: #fff;
            background: lightskyblue;
        }
關(guān)鍵的JavaScript
        var oul = document.getElementById('oul');
        var olis = oul.getElementsByTagName('li');
        var indexNum = 0;
        // 創(chuàng)建個(gè)新的li,里面包含第一個(gè)li的內(nèi)容
        var ofst = document.createElement("li");
        ofst.innerText = olis[0].innerText;
       // 將新的li添加到ul里
        oul.appendChild(ofst);
      // 獲取當(dāng)前最新的長度
        var liLens = olis.length;

        function sclNews() {
            indexNum++;
            //判定是否到達(dá)最后行
            if (indexNum < liLens) {
                oul.style.transition = "transform .5s ease-in"; //添加css過渡時(shí)的效果
                // 每次滾動的距離是 單行高*行數(shù)
                oul.style.transform = "translateY(-" + 35 * indexNum + "px)";
            } else {
                indexNum = 0;
                oul.style.transition = ""; //去除css過渡效果
                oul.style.transform = "translateY(-" + 35 * indexNum + "px)";
                // 當(dāng)從列表底部回到頭部時(shí),立馬切換到第二個(gè)li,預(yù)留了100毫秒給js處理,所以這里花費(fèi)的總時(shí)間是1900ms
                setTimeout(function() {
                    indexNum = 1;
                    oul.style.transition = "transform .5s ease-in";
                    oul.style.transform = "translateY(-" + 35 * indexNum + "px)";
                }, 100)
            }
        }
        // 每隔1800ms執(zhí)行
        setInterval(sclNews, 1800)

其實(shí)這里的過渡效果可以直接寫在 css 對應(yīng)的 class 里面。筆者這么寫,只是為了滾到底部時(shí),效果不要重新又滾動回去,而是直接切換。簡單來說就是把最后行到第一行的過渡效果取消了。

Ps:My skill's not better enough! 如有錯漏,還請不吝賜教

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,741評論 25 709
  • 秋天都要末了。 整日忙得不可開交,竟不知自己在忙些什么。不經(jīng)意的抬頭,發(fā)現(xiàn)整個(gè)校園都被火熱的紅和熱情的黃占據(jù)了。那...
    瘋狂的阿jiang閱讀 714評論 2 0
  • 目錄: 方法遞歸方法:方法重載:變量 方法 方法的所屬性 從語法定義的角度來看,方法必須定義在類中。 方法到底是屬...
    Ansaxnsy閱讀 461評論 0 0
  • 避世山中住, 流沙入谷來。 揮毫潑墨間, 白玉劍中開。 (五絕 仄起 新韻 四開) 回贈白玉公子 原詩鏈接:輕塵
    李宛宸679閱讀 579評論 22 25
  • 哈嘍,是我。 昨晚上更了十二章以后覺得我還是有些心事,想再說一說。 我也不知道你們看沒看出來我一直想讓馬克哥對有謙...
    zeta的芒果很甜閱讀 359評論 0 0

友情鏈接更多精彩內(nèi)容