Взлом в связанном вопросе - это, на мой взгляд, очень плохой совет.В этом случае лучше добавить несколько скриптов , следующих непосредственно за элементами аккордеона.
<div id="accordion">...</div>
<script type="text/javascript">...</script>
Однако встроенный скрипт, смешанный с разметкой HTML, является плохой идеей и должен бытьизбегать как можно больше.По этой причине идеально включать встроенный только вызов функции в функцию, объявленную в вашем внешнем файле сценария.(Когда вы ссылаетесь на внешний скрипт (<script src="...">
), визуализация вашей страницы приостанавливается до тех пор, пока она не загрузится.)
<html>
<head>
<script type="text/javascript" src="script.js"></script> <!-- renderAccordion() defined in this file -->
</head>
<body>
...
<div id="accordion">...</div>
<script type="text/javascript">renderAccordion();</script>
...
</body>
</html>
Конечно, правильный способ сделать этоэто просто присоединиться к событию DOM ready из script.js
и вообще не использовать встроенный скрипт.Это, однако, открывает возможность флэш-содержимого на очень медленных соединениях и / или очень больших документах, где загрузка всего самого HTML занимает несколько секунд.Это, однако, гораздо более чистый подход - ваш скрипт гарантированно будет загружен до того, как что-либо будет отображено;Вопрос только в том, сколько времени понадобится для DOM.Используя jQuery, в script.js
:
$(document).ready(function() {
// Do whatever with your accordion here -- this is guaranteed to execute
// after the DOM is completely loaded, so the fact that this script is
// referenced from your document's <head> does not matter.
});
Умное использование <style>
и <noscript>
делает хорошую работу, гарантируя, что в вашем контенте нет вспышки.аккордеон;однако, при использовании этого метода будет эффект напротив - будет вспышка содержимого .
По мере загрузки страницы ваш аккордеон будет полностью скрыт(display:none;
), затем, как только ваш скрипт наконец исполнится и вернет display
обратно к block
, аккордеон внезапно материализуется и оттолкнет все под ним.Это может или не может быть приемлемо - не будет столько же движения, но вещи все равно должны будут прыгать после того, как они изначально визуализированы.
В любом случае, не ждите, пока onload
отобразит ваш аккордеон. onload
не сработает, пока все - включая все изображения - не загрузятся полностью.Нет причин ждать загрузки изображений;Вы хотите сделать свой аккордеон как можно скорее.