показать/спрятать слои, 2 простых вопроса от новичка

Старый mweb

Модератор: [mweb team]

показать/спрятать слои, 2 простых вопроса от новичка

Сообщение coldrain Вт апр 24, 2007 9:58

приветствую всех

нашел статейку про показать/спрятать слои для разных браузеров, и использовал ее для сайта.
линк тут - http://www.getinfo.ru/article138.html

сразу выкладываю скрипт, потому как у меня есть парочка вопросов.

Код:

Код: Выделить всё

<script language="JavaScript">
function init() {
IE = (document.all)
NC = (document.layers)
Opera = (document.getElementById)
}

function hiddenLayer() {
init();
if(IE) eval('document.all["descr"].style.visibility = "hidden"')
if(NC) eval('document.layers["descr"].visibility = "hidden"')
if(Opera) eval('document.getElementById("descr").style.visibility = "hidden"')
}

function showLayer() {
init();
if(IE) eval('document.all["descr"].style.visibility = "visible"')
if(NC) eval('document.layers["descr"].visibility = "visible"')
if(Opera) eval('document.getElementById("descr").style.visibility = "visible"')
}
</script>



1. можно ли как-то упростить код, если например у меня 50 слоев, которые надо прятать/показывать..? если я правильно понял, для каждого слоя придется писать отдельную функцию, а это делает код очень громоздким.

2. как можно ускорить загрузку этих 50 невидимых слоев? приходится ждать, пока они все загрузятся, чтобы код заработал.

возможно, это глупые вопросы, но не судите строго, я пока только учусь.
буду благодарен за любой продуктивный совет -03-
coldrain
Прохожий
 
Сообщения: 14
Зарегистрирован: Пн апр 23, 2007 22:37

Сообщение Muerto Вт апр 24, 2007 10:40

1. При передачи события на скрытие-показ определённого слоя передавать функции его ID.
В твоем случае:
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<script type="text/javascript">
function init() {
IE = (document.all)
NC = (document.layers)
Opera = (document.getElementById)
}

function hiddenLayer(descr) {
init();
if(IE) eval('document.all["'+descr+'"].style.visibility = "hidden"')
if(NC) eval('document.layers["'+descr+'"].visibility = "hidden"')
if(Opera) eval('document.getElementById("'+descr+'").style.visibility = "hidden"')
}

function showLayer(descr) {
init();
if(IE) eval('document.all["'+descr+'"].style.visibility = "visible"')
if(NC) eval('document.layers["'+descr+'"].visibility = "visible"')
if(Opera) eval('document.getElementById("'+descr+'").style.visibility = "visible"')
}
</script>
</head>

<body>
<div id="first" style="background-color:#FF0000">слой номер 1</div>
<a href="#" onmousedown="hiddenLayer('first')">скрыть первый слой</a><br />
<a href="#" onmousedown="showLayer('first')">показать первый слой</a>
<div id="second" style="background-color:#00FF00">слой номер 2</div>
<a href="#" onmousedown="hiddenLayer('second')">скрыть второй слой</a><br />
<a href="#" onmousedown="showLayer('second')">показать второй слой</a>
</body>
</html>

2) Затрудняюсь придумать способ ускорения загрузки слоев. Может только если кидать их в инклюд, который будет кешироваться на стороне пользователя.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Вт апр 24, 2007 13:01

ускорить загрузку слоев можно либо путем их максимального облегчения если это графика либо загружая каждый слой только когда он нужен. а лучше и то и другое -03- вобще нефиг мудрствовать лукаво графика она даже если у кого и быстро грузитцо так жрет трафик и посему может быть отключена. а я на дайлапе ваще валю с тяжелых сайтов если только мне нет настоятельной необходимости зайти именно на такой сайт. равно как и с флэш-сайтов. уверен что не я один так делаю потому что когда приходитцо ждать загрузки страницы минут 5 а то и дольше то уже всякая охота увидеть-таки загружаемый шедевр напрочь отпадает -08-
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение coldrain Вт апр 24, 2007 13:42

у меня получилось упростить код до такого уровня

Код: Выделить всё
function hiddenLayer(id) {
init();
if(IE) eval('document.all[id].style.visibility = "hidden"')
if(NC) eval('document.layers[id].visibility = "hidden"')
if(Opera) eval('document.getElementById(id).style.visibility = "hidden"')
}

function showLayer(id) {
init();
if(IE) eval('document.all[id].style.visibility = "visible"')
if(NC) eval('document.layers[id].visibility = "visible"')
if(Opera) eval('document.getElementById(id).style.visibility = "visible"')
}


свои 50 картинок оптимизировал, теперь они весят ок. 5 мб вместе.

думаю, что на примитивном уровне это вполне подходящее решение
coldrain
Прохожий
 
Сообщения: 14
Зарегистрирован: Пн апр 23, 2007 22:37


Вернуться в Архив

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron