Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как определить есть ли скролл у страницы или нет?
 
 автор: jeans1986   (02.07.2007 в 19:35)   письмо автору
 
 

Как определить есть ли скролл у страницы или нет? Нужно чтоб работало как минимум в IE и в Mozilla. Заранее благодарю.

   
 
 автор: CNT   (02.07.2007 в 20:41)   письмо автору
 
   для: jeans1986   (02.07.2007 в 19:35)
 

<html><head>
<style>
html, body {height: 100%; width: 100%}
</style>
<script>
function aS ()
{
var usAg = navigator.userAgent;
if (usAg.indexOf ('MSIE') >= 0 || usAg.indexOf ('Opera') >= 0  ) with (document.body) alert ('VER:\t' + scrollTop + '\nGOR:\t' + scrollLeft);
if (usAg.indexOf ('Gecko') >= 0) with (window) alert ('VER:\t' + scrollY   + '\nGOR:\t' + scrollX)
}
</script>
</head>
<body onclick="aS ()">
<div style="width: 200%; height: 200%">
Если VER и GOR оба равны нулю, то страница не проскроллена.<br>
VER показывает - на сколько пикселей "уехал" вниз вертикальный скроллбар<br>
GOR, соответсвенно, равен количеству пикселей, на которые сместился вправо горизонтальный скроллбар.
</div>
</body></html>

   
 
 автор: jeans1986   (02.07.2007 в 22:53)   письмо автору
 
   для: CNT   (02.07.2007 в 20:41)
 

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

   
 
 автор: CNT   (03.07.2007 в 05:59)   письмо автору
 
   для: jeans1986   (02.07.2007 в 22:53)
 

Вы придуриваетесь, или на самом деле полагаете, что в этом демонстрационном скрипте самое главное - клик по странице?

Если не придуриваетесь, а на самом деле не понимаете, то тогда объясняю:
1. берёте функцию aS () и в коде её убираете оба alert'a
2. вместо alert'ов прописываете with (document.body) var re = (!scrollTop && !scrollLeft); (для MSIE и Opera) и with (window) var re = (!scrollX && !scrollY); (для FireFox)
3. в самом конце функции (перед закрывающей скобкой }) добавляете строчку return re;
4. прописываете полученный код функции на вашу страницу (куда-либо между тегами <script></script>)

Теперь, в нужном вам месте внутри вашего скрипта пишете:
if (aS ()) "делаете то, что вам нужно делать, если НЕТ скролла";
else "делаете то, что вам нужно делаеть, если ЕСТЬ скролл";

   
 
 автор: jeans1986   (03.07.2007 в 07:25)   письмо автору
 
   для: CNT   (03.07.2007 в 05:59)
 

Я зделал как и вы сказали но не работает. МОжет гдн то я ошибаюсь. По написанному вами выше указанию в этой странице должно отображатся "YES" т.к есть скролл. Но почему то есть скролл или нету его отображается "NO". Заранее благодарю вас.

<html><head> 
<style> 
html, body {height: 100%; width: 100%} 
</style> 
<script> 
function aS () 

var usAg = navigator.userAgent; 
if (usAg.indexOf ('MSIE') >= 0 || usAg.indexOf ('Opera') >= 0  ) with (document.body) var re = (!scrollTop && !scrollLeft); 
if (usAg.indexOf ('Gecko') >= 0) with (window) var re = (!scrollX && !scrollY); 
return re;

</script> 
</head> 
<body> 
<script language="javascript">
if(aS()){alert("NO");}
else{alert("YES");}
</script>
<div style="width: 200%; height: 200%;"> 
Если VER и GOR оба равны нулю, то страница не проскроллена.<br> 
VER показывает - на сколько пикселей "уехал" вниз вертикальный скроллбар<br> 
GOR, соответсвенно, равен количеству пикселей, на которые сместился вправо горизонтальный скроллбар. 
</div> 
</body></html> 

   
 
 автор: CNT   (03.07.2007 в 08:34)   письмо автору
 
   для: jeans1986   (03.07.2007 в 07:25)
 

Да... вы действительно не придуриваетесь, а просто не понимаете.

Объясняю:
1. Браузер воспринимает и обрабатывает HTML-код (и включённый в него Javascript) последовательно. Т.е., загрузилась строчка кода - браузер её обработал и тут же исполнил и пошёл дальше - читать и исполнять следующие строчки кода.

2. В вашем коде сразу после тега <body> следует тег <script> с вызовом функции as (). Браузер открывает тело документа <BODY> и, прочитав строчку эту строчку javascript'a, тут же проверяет - есть ли скролл? А скролла-то и нетути - ведь никто ещё и не успел никуда скроллбары передвинуть, да и сами скроллбары ещё и не успели отобразиться, потому как браузер ещё не прочитал строчку HTML-кода о том, что в документе есть <DIV> (с размерами, дважды превышающими размер <body>). Вот вам браузер честно и пишет - скролла в этот момент НЕТУ.
А затем браузер исполняет следующие строчки кода вплоть до последней </html>. Выполнив последнюю строку кода, браузер делает "Уф!", вытирает пот со лба и отдыхает - он свою работу завершил. Причём завершил окончательно, ибо в коде ему не даны инструкции - в каком случае ему ещё раз обращаться к функции aS (). Один раз вы ему указали - он обратился и честно ответил - "скролла нет!". После этого - двигаете вы там скроллбары или не двигаете - ему всё-равно, ибо никаких инструкций у него нету.


PS. У меня в демонстрационном скрипте таковая инструкция была - я указал браузеру, что нужно проверЯть проскролленость страницы, обращаясь к функции aS():
а) в любое время;
б) в случае клика по телу документа.

Вы определитесь - когда именно и по какому событию Вам надо обратиться к функции aS (). Может, надо проверять после каждого движения скроллбара? Или один раз - через 20 секунд после загрузки страницы? Или всякий раз, когда клиент двигает мышью по странице? Или регулярно, через каждые полминуты?..

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования