Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][JavaScript] Menu otwierane po kliknięciu., --optymalizacja--
KsaR
post
Post #1





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Menu:
  1. <div id="menu" onclick="changeMenu()"><span style="color:#45494D">[#]</span>Menu</div>
  2. <div id="menu2">
  3. <ul>
  4. <li><a href="/">Strona główna</a></li>
  5. <li><a href="/chat/">Czat</a></li>
  6. </ul>
  7. </div>

Skrypt:
[JAVASCRIPT] pobierz, plaintext
  1. function changeMenu()
  2. {
  3. var d=document, m=d.getElementById('menu'), m2=d.getElementById('menu2')
  4. if (m2.style.display=='block')
  5. {
  6. m.innerHTML='<span style="color:#45494D">[#]</span>Menu'
  7. m2.style.display='none'
  8. }
  9. else
  10. {
  11. m.innerHTML='<span style="color:#45494D">[^]</span>Menu'
  12. m2.style.display='block'
  13. m2.style.border='2px solid #3C434A'
  14. }
  15. m.id='menu'
  16. }
[JAVASCRIPT] pobierz, plaintext


Jestem raczej początkujący w JS bo nie spędziłem nad im dużo czasu, max. kilka godzin.
Czy da się przyspieszyć ten kod z tym samym efektem?

Chodzi mi o efekt ala znaczniki html (details, summary) < bo działa to z 4x szybciej, a menu wręcz lekko zamula na niektórych przeglądarkach.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Cytat
Zamula na starszych operach

Jak starszych? 12 czy trochę wyższych? Jak 12, to nawet nie ma sensu nad tym siedzieć… Wszak to już kilkuletnie trupy - nie oszukujmy się.

Co do sposobu - nie wiem czy bym nie szedł po prostu w zabawę klasą.
Kod
<!DOCTYPE html>
    <html lang="pl" dir="ltr" class="no-js">
        <head>
            <meta charset="UTF-8">
            <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
            <title>Ehhhh</title>
            <style>
            .no-js #menu > button
            {
                display: none;
            }
            #menu > button:before
            {
                content: '[#]';
            }
            #menu.open > button:before
            {
                content: '[^]';
            }
            #menu > ul
            {
                display: none;
            }
            #menu.open > ul, .no-js #menu > ul
            {
                display: block;
            }
            </style>
        </head>
        <body>
            <nav id="menu">
                <button>Menu</button>
                <ul>
                    <li><a href="/">Strona główna</a></li>
                    <li><a href="/chat/">Czat</a></li>
                </ul>
            </nav>
            
            <script>
            (function(menu)
            {
                var button = menu.getElementsByTagName('button')[0];

                button.addEventListener('click', function(e)
                {
                    if(menu.className.indexOf('open') === -1)
                        menu.className += ' open';
                    else
                        menu.className = menu.className.replace(/[s]*open/, '');
                });
            }(document.getElementById('menu')));
            </script>
        </body>
    </html>


W tym kodzie menu jest rozwinięte zawsze, gdy user nie ma JS + dodatkowo wszystkie zmiany związane z jego wyglądem odgrywają się poprzez zmianę klasy.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 07:23