|
|
|
| Как определить есть ли скролл у страницы или нет? Нужно чтоб работало как минимум в IE и в Mozilla. Заранее благодарю. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: CNT
(02.07.2007 в 20:41)
| | этот скрипт работает при событии клика. а мне надо чтоб просто определять без всякого события. т.е мне надо определить есть ли скрол или нет. как мне зделать? | |
|
|
|
|
|
|
|
для: 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 "делаете то, что вам нужно делаеть, если ЕСТЬ скролл"; | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: 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 секунд после загрузки страницы? Или всякий раз, когда клиент двигает мышью по странице? Или регулярно, через каждые полминуты?.. | |
|
|
|