欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS使用虛擬列表查看微信聊天記錄功能技巧實例

 更新時間:2023年10月31日 08:52:06   作者:HeiYanjing  
這篇文章主要為大家介紹了JS使用虛擬列表查看微信聊天記錄功能技巧實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

PC端 微信聊天記錄查看

這個功能是pc端程序,實現(xiàn)手機端微信聊天記錄查看功能

功能問題點

1,默認看到的記錄是倒序排列,頁面最底下一條是最近一條消息

2,聊天記錄可能存在無限往上翻閱的情況,dom無法承載如此多消息,需要使用虛擬列表

3, 向上向下翻閱過程中,滑動到上一頁或者下一頁如何定位當前頁面最后一條第一條在當前,絲滑加載,不出現(xiàn)‘閃跳’情況

4,動態(tài)加載,考慮接口性能,一次請求數(shù)據(jù)不能太多,如何維護整個消息列表信息

一,消息記錄數(shù)據(jù)結構

需要一個msgData字段來存儲所有從接口返回來的消息,{data,random}隨機數(shù)用于表示數(shù)據(jù)向下傳遞時表示是更新,初始值是0,每一條消息都有一個msgId字段,用于標識當前收到的消息記錄中歷史最遠的一條記錄id。消息上滑下滑根據(jù)滑動方向,以及msgId可以判斷是從內存取數(shù)據(jù)還是額外請求接口。

二,數(shù)據(jù)展示

傳入的random字段用于標識是第一次傳入還是數(shù)據(jù)更新,如果是第一次傳入,新建一個宏任務,計算傳入數(shù)據(jù)展示成相應元素之后的高度,

const virtualItems = document.getElementById('vir-scroll');
        virtualItems.scrollTop = timeFilter ? 0 : virtualItems.scrollHeight; // 如果timefilter 為真,scroll到頂部
        currentScroll = timeFilter ? 0 : virtualItems.scrollHeight;

如果是更新,需要計算目前內存中數(shù)據(jù)條數(shù)(數(shù)量小于顯示界面數(shù)據(jù)閾值就追加)以及滾動方向,來獲取相應的顯示數(shù)據(jù)。

計算過程中,累加元素的getBoundingClientRect().height來計算當前展示元素的高度,計算高度的同時,還需要把對應的dom元素渲染到頁面中。

滾動

const scrollTop = virtualRef.current.scrollTop;
  direction = scrollTop < currentScroll ? 'down' : 'up';
    currentDirection = direction;
    currentScroll = scrollTop;
    // 計算滾動條到底部距離,保證異步加載元素位置不變的關鍵
    bottomDistance = virtualRef.current.scrollHeight - virtualRef.current.clientHeight - virtualRef.current.scrollTop;
    const lastMsgId = direction === 'up' ? +items[items.length - 1]?.key : +items[0]?.key;
    const indx = wrapperData?.data?.findIndex((elm:any) => elm.msgTime === lastMsgId);

滾動時需要計算當前滾動方向,根據(jù)方向再進行下面的計算,這里需要分為上滑和下滑。

下滑到底時,如果距離頂部小于50,就要觸發(fā)計算,根據(jù)當前頁面元素第一條的索引值去內存中找15條,當前頁面元素尾部去掉15條重新拼湊成需要展示到頁面的完整數(shù)據(jù),然后計算出scrollHeight,實現(xiàn)順滑滑動。

上滑到頂,距離底部小于50,觸發(fā)計算,計算方式和下滑相反。

以上就是JS使用虛擬列表查看微信聊天記錄功能技巧實例的詳細內容,更多關于JS虛擬列表查看微信聊天記錄的資料請關注腳本之家其它相關文章!

相關文章

  • JavaScript如何對圖片進行黑白化

    JavaScript如何對圖片進行黑白化

    這篇文章主要介紹了JS對圖片進行黑白化的實現(xiàn)代碼,需要的朋友可以參考下
    2018-04-04
  • 使用tree?shaking?移除無用代碼

    使用tree?shaking?移除無用代碼

    這篇文章主要為大家介紹了使用tree?shaking?移除無用代碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 序列化模塊json代碼實例詳解

    序列化模塊json代碼實例詳解

    這篇文章主要介紹了序列化模塊json代碼實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 一個鼠標移動滑出層效果的實現(xiàn)代碼

    一個鼠標移動滑出層效果的實現(xiàn)代碼

    一個鼠標移動滑出層的代碼,根據(jù)網(wǎng)上的視頻教程學習的,這也算是第一次練手吧,鼠標靠近復選框的時候,就會顯示出一個層,移開則消失。
    2011-08-08
  • webpack-bundle-analyzer?插件配置使用方法

    webpack-bundle-analyzer?插件配置使用方法

    webpack-bundle-analyzer?是?webpack?的插件,需要配合?webpack?和?webpack-cli?一起使用,這篇文章主要介紹了webpack-bundle-analyzer?插件配置,需要的朋友可以參考下
    2023-02-02
  • JavaScript數(shù)組操作之旋轉二維數(shù)組

    JavaScript數(shù)組操作之旋轉二維數(shù)組

    這篇文章主要介紹了JavaScript數(shù)組操作之旋轉二維數(shù)組,主要從兩個方面展開文章介紹,一是通過對數(shù)組的操作熟練度;二是(鏡像反轉)比實現(xiàn)一更優(yōu),減少了空間復雜度,內容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • css如何讓浮動元素水平居中

    css如何讓浮動元素水平居中

    css中對于定寬的非浮動元素用margin:0 auto進行水平居中,對于不定寬的浮動元素也有一個常用技巧,這篇文章就給大家介紹下css如何讓浮動元素水平居中,需要的朋友可以來學習下
    2015-08-08
  • TypeScript接口和類型的區(qū)別小結

    TypeScript接口和類型的區(qū)別小結

    在 TypeScript 中,有兩種主要的定義自定義類型的方式,接口和類型,盡管它們在外觀上可能相似,但它們之間有一些關鍵的區(qū)別,本文就詳細的介紹一下,感興趣的可以了解下
    2023-05-05
  • 基于JavaScript實現(xiàn)手機短信按鈕倒計時(超簡單)

    基于JavaScript實現(xiàn)手機短信按鈕倒計時(超簡單)

    在淘寶等購物網(wǎng)站,我們都會看到一個發(fā)送短信倒計時的按鈕,究竟是如何實現(xiàn)的呢?下面小編通過本篇文章給大家分享一段代碼關于js實現(xiàn)手機短信按鈕倒計時,需要的朋友參考下
    2015-12-12
  • 自制簡易打賞功能的實例

    自制簡易打賞功能的實例

    下面小編就為大家?guī)硪黄灾坪喴状蛸p功能的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論