БРАУЗЕР, СКРИПТЫ: синхронизация прокрутки во фреймах

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

БРАУЗЕР, СКРИПТЫ: синхронизация прокрутки во фреймах

Сообщение gor » 10.12.2003 (Ср) 11:35

Кто из вас сталкивался с проблемой горизонтального и вертикального скроллинга широкой и высокой таблицы в браузере? Кто-нибудь знает: как скриптами поочередно синхронизировать лифты прокрутки в браузере при наличии трех фреймов (то левый фрейм с главным фреймом, то верхний фрейм с главным фреймом), подобно закреплению областей в MS Excel? Спасибо.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 10.12.2003 (Ср) 14:31

Код: Выделить всё
<html>
<head>
<title></title>

<script language="javascript" type="text/javascript">
<!--
function scrollMain() {
   var x=frames["mainFrame"].document.body.scrollLeft;
   var y=frames["mainFrame"].document.body.scrollTop;
   frames["topFrame"].window.scrollTo(x, 0);
   frames["leftFrame"].window.scrollTo(0, y);
}
function scrollTop() {
   var x=frames["topFrame"].document.body.scrollLeft;
   var y=frames["mainFrame"].document.body.scrollTop;
   frames["mainFrame"].window.scrollTo(x, y);
}
function scrollLeft() {
   var x=frames["mainFrame"].document.body.scrollLeft;
   var y=frames["leftFrame"].document.body.scrollTop;
   frames["mainFrame"].window.scrollTo(x, y);
}
//-->
</script>

</head>

<frameset rows="71,*" border=1>
   <frameset cols="20%,*" border="0">
      <frame scrolling="auto" src="empty.html">
      <frame name="topFrame" scrolling="auto" target="mainFrame" src="TopFrame.html">
   </frameset>
   <frameset cols="20%,*" border="0">
      <frame name="leftFrame" scrolling="auto" target="mainFrame" src="LeftFrame.html">
      <frame name="mainFrame" scrolling="auto" src="MainFrame.html">
   </frameset>
</frameset>

<noframes>
<body>
<p>This page uses frames, but your browser doesn't support them.</p>
</body>
</noframes>

</html>


Код: Выделить всё
<body onscroll="parent.scrollMain();">
<body onscroll="parent.scrollTop();">
<body onscroll="parent.scrollLeft();">

Соответственно для MainFrame.html, TopFrame.html и LeftFrame.html

PS: Работает только под IE, т.к. в NS, видимо, не обрабатывается событие onscroll.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.12.2003 (Чт) 20:51

Ну и гиде пасибы или "чого ви тут мене понаписували, москалi кляти, що нiчого не працює"? Я спрашиваю: где? Вопрос накатать у него время есть, а сообщить о результатах - уже нет. Ганьба тобi!

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 11.12.2003 (Чт) 20:56

skiperski, да не расстраивайся ты так... нормальная ситуация... если молчит, значит работает...
вот если бы не работало, тогда бы ты огреб по самое "не хочу".
хотя, кто его знает. мож у человека инет кончился... или, не дай бог, комп не работает...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 12.12.2003 (Пт) 13:05

Я не расстраиваюсь, а возмущаюсь таким потребительским отношением. :evil:

gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

Сообщение gor » 12.12.2003 (Пт) 16:00

:D
Последний раз редактировалось gor 12.12.2003 (Пт) 16:37, всего редактировалось 1 раз.

gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

Сообщение gor » 12.12.2003 (Пт) 16:11

Большое спасибо. Предварительная благодарность была в вопросе.
Собрал только вчера. Все работает. Прилагаю результат. :D
Последний раз редактировалось gor 16.04.2006 (Вс) 0:28, всего редактировалось 2 раз(а).

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 12.12.2003 (Пт) 16:43

Э-э-э... Собственно, результаты имелись в виду: работает - не работает. Ну ладно, работает и хорошо.

А симпатично получилось!

gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

Сообщение gor » 12.12.2003 (Пт) 17:02

Спасибо. :D Остается тяжелый подол таблицы, причем его приходится перекрашивать из VB-программы в зависимости от цвета последнего участника. Как обратиться в parent и считать ширину ячейки из фрейма-заголовка? Пока названия полей заводятся в footer и закрашиваются от просмотра пользователем (их все равно видно после выделения содержимого). Не лишит ли таблицу жесткости отказ от лже-footerа в пользу прописывания ширины ячейки?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 12.12.2003 (Пт) 21:00

Вот пример, надо только адаптировать.
Код: Выделить всё
<HTML>
<HEAD>
</HEAD>

<BODY>

<table id="t0" border="12" cellspacing="3" cellpadding="5"><tr>
   <td>xaxaxaxax axaxaxa xaxaxaxaxa</td>
   <td>xycdfv</td>
</tr></table>

<table id="t1"><tr>
   <td>1sdgkj</td>
   <td>2</td>
</tr><tr>
   <td>1</td>
   <td>2</td>
</tr><tr>
   <td>1</td>
   <td>2</td>
</tr></table>


<script>

var t0=document.all["t0"]; //TABLE
var t1=document.all["t1"]; //TABLE
resizeTable(t0, t1);

function resizeTable(t0, t1) {

   t1.attributes["border"].value=t0.attributes["border"].value;
   t1.attributes["cellSpacing"].value=t0.attributes["cellSpacing"].value;
   t1.attributes["cellPadding"].value=t0.attributes["cellPadding"].value;
   t1.attributes["width"].value=t0.attributes["width"].value;

   var bw=(Number(t0.attributes["border"].value) ? 2 : 0);
   bw+=Number(t0.attributes["cellPadding"].value)*2;

   t0=t0.childNodes[0]; //TBODY
   t0=t0.childNodes[0]; //TR first

   t1=t1.childNodes[0]; //TBODY
   t1=t1.childNodes[0]; //TR first

   for(var i=0; i<t0.childNodes.length; i++)
      if(t1.childNodes[i]!=null) {
         t1.childNodes[i].style.width=t0.childNodes[i].offsetWidth-bw;
         if(t1.childNodes[i].offsetWidth>t0.childNodes[i].offsetWidth)
            t0.childNodes[i].style.width=t1.childNodes[i].offsetWidth-bw;
      }
}

</script>

</BODY>
</HTML>


t0 в твоём случае будет parent.frames["topFrame"].document.all[table_id]

gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

Сообщение gor » 13.12.2003 (Сб) 10:46

Спасибо skiperski. Буду пробовать. Результаты в среду, 17-го. :D

gor
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 05.09.2002 (Чт) 11:08

Сообщение gor » 19.12.2003 (Пт) 10:23

К сожалению, не удалось в примере разогнать ячейки во второй таблице.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 19.12.2003 (Пт) 18:50

Странно, у меня с твоими исходниками всё получилось.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 5

    TopList  
cron