成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS 簡單實現公告消息自動逐條切換

levius / 2336人閱讀

摘要:實現公告消息滾動因為要適配前端,所以在想最簡實現一個靜態(tài)數據的抽獎滾動欄,研究時直接用了當前運行的框架實現,于是昨天先打了個草稿。經測試在上顯示正常。

JS實現公告消息滾動

因為要適配iOS前端,所以在想最簡實現一個靜態(tài)數據的抽獎滾動欄,研究時直接用了當前運行的ReactJS框架實現,于是昨天先打了個草稿。經測試在iPhone6S Plus A1699 Version 12.1.2上顯示正常。

import React from "react"
 
class ScrollMessagePage {
 
    componentDidMount() {
        //消息關鍵字數據
        const loanUserList = ["趙", "錢", "孫", "宋", "王", "徐", "丘", "駱", "高", "夏", "蔡", "田", "樊", "胡", "陳", "霍", "潘", "萬", "李", "洪", "莫", "王"]
        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

經過今天的測試發(fā)現,在第一次加載計時器的時候滾動條會將滾動數據第二條數據快速跳過,造成不好的用戶體驗,另外頻繁的操作DOM也會造成性能損耗,于是使用了文檔碎片對滾動條進行優(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)

【如何修復數據跳過BUG】此次更新修復了滾動條在第一次計時器運行時跳過第二條數據的問題,發(fā)生問題的原因是因為初始化公告欄數據的時候并未添加marginTop,在計時器執(zhí)行之后第二條數據原本會替換第一條數據的位置,然而因為第一條數據被刪除所以跑到第一條數據位置上面,我通過直接將第二條數據初始化到第一條數據的位置解決了該問題。

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

小結

初次向大家分享我的想法,有更好的實現方法可以評論留言,關于性能損耗的問題我認識有些不足,請大家多多指教。

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

轉載請注明本文地址:http://systransis.cn/yun/101438.html

相關文章

  • 路由

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

    Aklman 評論0 收藏0
  • 10行js代碼搞定滾動公告

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

    curried 評論0 收藏0
  • 10行js代碼搞定滾動公告

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

    TesterHome 評論0 收藏0
  • 10行js代碼搞定滾動公告

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

    Imfan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<