国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

JS 簡(jiǎn)單實(shí)現(xiàn)公告消息自動(dòng)逐條切換

levius / 2334人閱讀

摘要:實(shí)現(xiàn)公告消息滾動(dòng)因?yàn)橐m配前端,所以在想最簡(jiǎn)實(shí)現(xiàn)一個(gè)靜態(tài)數(shù)據(jù)的抽獎(jiǎng)滾動(dòng)欄,研究時(shí)直接用了當(dāng)前運(yùn)行的框架實(shí)現(xiàn),于是昨天先打了個(gè)草稿。經(jīng)測(cè)試在上顯示正常。

JS實(shí)現(xiàn)公告消息滾動(dòng)

因?yàn)橐m配iOS前端,所以在想最簡(jiǎn)實(shí)現(xiàn)一個(gè)靜態(tài)數(shù)據(jù)的抽獎(jiǎng)滾動(dòng)欄,研究時(shí)直接用了當(dāng)前運(yùn)行的ReactJS框架實(shí)現(xiàn),于是昨天先打了個(gè)草稿。經(jīng)測(cè)試在iPhone6S Plus A1699 Version 12.1.2上顯示正常。

import React from "react"
 
class ScrollMessagePage {
 
    componentDidMount() {
        //消息關(guān)鍵字?jǐn)?shù)據(jù)
        const loanUserList = ["趙", "錢(qián)", "孫", "宋", "王", "徐", "丘", "駱", "高", "夏", "蔡", "田", "樊", "胡", "陳", "霍", "潘", "萬(wàn)", "李", "洪", "莫", "王"]
        const loanMoneyList = [10, 12, 8, 5, 8, 7, 6, 23, 18, 10, 2, 1]
        const loanSexList = ["先生", "先生", "先生", "女士", "女士"]
 
        function getText() {
            const randomSex = loanSexList[parseInt(Math.random() * loanSexList.length)]
            const randomName = loanUserList[parseInt(Math.random() * loanUserList.length)]
            const randomMoney = loanMoneyList[parseInt(Math.random() * loanMoneyList.length)]
            return randomName + randomSex + "獲得" + randomMoney + "元紅包"
        }
 
        let messageList = []
        for (let i = 0; i < 3; i++) {
            messageList.push(getText())
        }
        let box = document.getElementById("scroll-message")
        box.style.height = "30px"
        box.style.overflow = "hidden"
 
        function createElement(text) {
            let Text = document.createElement("div")
            Text.style.height = "30px"
            Text.style.transition = "margin-top 1s"
            Text.innerText = text
            box.appendChild(Text)
        }
 
        messageList.map(text => {
            createElement(text)
        })
        this.timer = setInterval(() => {
            createElement(getText())
            box.childNodes[1].style.marginTop = "-30px"
            box.removeChild(box.childNodes[0])
        }, 3000)
    }
 
    componentWillUnMount() {
        clearInterval(this.timer)
    }
 
    render() {
        return (
            
) } } export default ScrollMessagePage

經(jīng)過(guò)今天的測(cè)試發(fā)現(xiàn),在第一次加載計(jì)時(shí)器的時(shí)候滾動(dòng)條會(huì)將滾動(dòng)數(shù)據(jù)第二條數(shù)據(jù)快速跳過(guò),造成不好的用戶(hù)體驗(yàn),另外頻繁的操作DOM也會(huì)造成性能損耗,于是使用了文檔碎片對(duì)滾動(dòng)條進(jìn)行優(yōu)化

        let box = document.getElementById("scroll-message")
        let fragement = document.createDocumentFragment("div")
        let message = document.createElement("div")
        message.style.height = "30px"
        message.style.overflow = "hidden"
        fragement.appendChild(message)

        function createElement(text, style, ele = message) {
            let Text = document.createElement("div")
            Text.style.height = "30px"
            Text.style.lineHeight = "30px"
            Text.style.transition = "margin-top 1s"
            style && Object.keys(style).map(key => Text.style[key] = style[key])
            Text.innerText = text
            ele.appendChild(Text)
        }

        let messageList = []
        for (let i = 0; i < 2; i++) {
            messageList.push(getText())
        }
        messageList.map((text, index) => createElement(text, index===0?{marginTop:"-30px"}:null))
        this.timer = setInterval(() => {
            createElement(getText())
            message.childNodes[1].style.marginTop = "-30px"
            message.removeChild(message.childNodes[0])
        }, 3000)
        box.appendChild(fragement)

【如何修復(fù)數(shù)據(jù)跳過(guò)BUG】此次更新修復(fù)了滾動(dòng)條在第一次計(jì)時(shí)器運(yùn)行時(shí)跳過(guò)第二條數(shù)據(jù)的問(wèn)題,發(fā)生問(wèn)題的原因是因?yàn)槌跏蓟鏅跀?shù)據(jù)的時(shí)候并未添加marginTop,在計(jì)時(shí)器執(zhí)行之后第二條數(shù)據(jù)原本會(huì)替換第一條數(shù)據(jù)的位置,然而因?yàn)榈谝粭l數(shù)據(jù)被刪除所以跑到第一條數(shù)據(jù)位置上面,我通過(guò)直接將第二條數(shù)據(jù)初始化到第一條數(shù)據(jù)的位置解決了該問(wèn)題。

【處理性能損耗】使用計(jì)時(shí)器頻繁對(duì)dom進(jìn)行操作,會(huì)使整個(gè)頁(yè)面頻繁進(jìn)行DOM渲染,解決性能損耗的問(wèn)題我參考 createDocumentFragment();方法實(shí)現(xiàn),將該公告欄DOM插入到該方法創(chuàng)建的文檔碎片,將子元素插入到文檔片段時(shí)不會(huì)引起頁(yè)面回流。

小結(jié)

初次向大家分享我的想法,有更好的實(shí)現(xiàn)方法可以評(píng)論留言,關(guān)于性能損耗的問(wèn)題我認(rèn)識(shí)有些不足,請(qǐng)大家多多指教。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/101438.html

相關(guān)文章

  • 路由

    摘要:由命名路由與子路由構(gòu)成整體結(jié)構(gòu),我們用它構(gòu)建如下頁(yè)面。以下兩張圖說(shuō)明路由和子路由是如何工作的。繼續(xù)修改好友信息的路由部分添加好友信息為組件添加動(dòng)態(tài)路由為動(dòng)態(tài)路由添加為路徑參數(shù)添加數(shù)據(jù)下發(fā)為組件添加,并使用它。 不使用vue-router的情況 代碼官方給出下面的例子在不使用vue-router的情況下來(lái)實(shí)現(xiàn)一個(gè)路由。該示例結(jié)合了H5歷史管理API、單文件組件、JS模塊相關(guān)內(nèi)容來(lái)實(shí)現(xiàn)路由...

    Aklman 評(píng)論0 收藏0
  • 10行js代碼搞定滾動(dòng)公告

    摘要:先初始化一下默認(rèn)樣式單行顯示,超出隱藏固定公告欄顯示區(qū)域的高度以下為了單行顯示,超出隱藏封裝函數(shù)使用方法改變列表的值來(lái)實(shí)現(xiàn)滾動(dòng)效果知識(shí)點(diǎn)回調(diào)函數(shù)函數(shù)執(zhí)行完之后,要執(zhí)行的函數(shù)。 需求 最近項(xiàng)目中需要實(shí)現(xiàn)公告欄滾動(dòng)顯示效果如下 showImg(https://segmentfault.com/img/bVZJSE?w=400&h=53); 解決方案 1、 HTML 先建一個(gè)div層作為公告...

    curried 評(píng)論0 收藏0
  • 10行js代碼搞定滾動(dòng)公告

    摘要:先初始化一下默認(rèn)樣式單行顯示,超出隱藏固定公告欄顯示區(qū)域的高度以下為了單行顯示,超出隱藏封裝函數(shù)使用方法改變列表的值來(lái)實(shí)現(xiàn)滾動(dòng)效果知識(shí)點(diǎn)回調(diào)函數(shù)函數(shù)執(zhí)行完之后,要執(zhí)行的函數(shù)。 需求 最近項(xiàng)目中需要實(shí)現(xiàn)公告欄滾動(dòng)顯示效果如下 showImg(https://segmentfault.com/img/bVZJSE?w=400&h=53); 解決方案 1、 HTML 先建一個(gè)div層作為公告...

    TesterHome 評(píng)論0 收藏0
  • 10行js代碼搞定滾動(dòng)公告

    摘要:先初始化一下默認(rèn)樣式單行顯示,超出隱藏固定公告欄顯示區(qū)域的高度以下為了單行顯示,超出隱藏封裝函數(shù)使用方法改變列表的值來(lái)實(shí)現(xiàn)滾動(dòng)效果知識(shí)點(diǎn)回調(diào)函數(shù)函數(shù)執(zhí)行完之后,要執(zhí)行的函數(shù)。 需求 最近項(xiàng)目中需要實(shí)現(xiàn)公告欄滾動(dòng)顯示效果如下 showImg(https://segmentfault.com/img/bVZJSE?w=400&h=53); 解決方案 1、 HTML 先建一個(gè)div層作為公告...

    Imfan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<