亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

響應式菜單 (mmenu) 導致 CLS 高

響應式菜單 (mmenu) 導致 CLS 高

瀟瀟雨雨 2023-11-02 16:59:26
我在我的網站上使用mmenu作為響應式菜單。我最近注意到,在 Google 搜索控制臺中,由于 CLS(累積布局偏移)較高而出現錯誤。我檢查了一下,確實如此,當我嘗試以“慢速”模式打開頁面半秒時,我看到原始菜單結構,然后加載菜單(在 jQuery 準備就緒等之后)并且頁面顯示正確。我的簡化頁面結構是: $(document).ready(function() {        $("#menu").mmenu({            "extensions": ["pageshadow"],            "header": {                "title": "Menu",                "add": true,                "update": true            }        }, {            // config            offCanvas: {                pageSelector: "#container"            }        });    });    <html>    <head>    </head>    <body>    <nav id="menu">        <ul>                        <li><a>Categories</a>            <ul>                <li>                    <a href="https://example.com/1">Link 1</a>                </li>                <li>                    <a href="https://example.com/2">Link 2</a>                </li>                <li>                    <a href="https://example.com/3">Link 3</a>                </li>            </ul>        </nav>        <div class="content">This is content</div>    </body>    </html>您認為,是否可以在此處應用任何快速修復來解決我的 CLS 問題?
查看完整描述

3 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

#menu沒有任何使用 mmenu 的經驗,使用 CSS 隱藏并僅在菜單初始化后才顯示它難道不就足夠了嗎?


這似乎對我有用:


<html>

<head>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery.mmenu/8.5.20/mmenu.js"></script>

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jQuery.mmenu/8.5.20/mmenu.min.css" />

</head>

<script type="text/javascript" data-no-instant>

$(document).ready(function() {

    $("#menu").mmenu({

        "extensions": ["pageshadow"],

        "header": {

            "title": "Menu",

            "add": true,

            "update": true

        }

    }, {

        // config

        offCanvas: {

            pageSelector: "#container"

        }

    }).css("display", "");

});

</script>

</head>

<body>

    <nav id="menu" style="display: none">

      <!-- <nav> content from your example -->

    </nav>

    <a href="#menu">open menu</a>

    <div class="content">This is content</div>

</body>

</html>


查看完整回答
反對 回復 2023-11-02
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

我處理這個問題的方法是使用一個與問題元素具有相同大小/形狀/顏色的虛擬元素來充當占位符,同時隱藏問題元素。加載 jQuery 后,我將刪除/隱藏虛擬元素并顯示問題元素。



查看完整回答
反對 回復 2023-11-02
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

如果沒有看到實際的代碼,很難回答,但是為了不必等待整個頁面準備好,您可以以不需要使用 jQuery 調用的方式定位腳本ready。

嘗試以下操作:
1 - 在本地加載 jQuery,而不是從 CDN
2 - 將 jQuery 腳本標記放在實際的正文 html 數據之前,并將該mmenu調用放在正文的 html 代碼之后,這樣在加載所有內容之前不會顯示內容

另一種選擇是讓你的主體顯示加載動畫,直到 jQuery 和其他 cdns 加載完畢,這樣你就能夠獲取所有內容,運行該 mmenu 調用,然后才向用戶顯示內容,這種方法有點多用戶友好然后是我建議的,因為它實際上不會顯示空白屏幕,而是顯示一些反饋,表明正在為連接速度較慢的用戶加載內容。


查看完整回答
反對 回復 2023-11-02
  • 3 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號