Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Установка <div> в заданную позицию. (https://javascript.ru/forum/dom-window/20604-ustanovka-div-v-zadannuyu-poziciyu.html)

evgenybe 13.08.2011 13:08

Цитата:

Сообщение от melky (Сообщение 120078)
сладко, очень сладко звучит :)



прошу сюда html!

кстати, код можно было и нагуглить(это не мой код):

function getAbsolutePos(el)
	{
	var r = { x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent)
		{
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
		}
	return r;
	}

или вот еще
var el = document.getElementById('login');
var x = findPosX(el);
var y = findPosY(el);
 
function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (1) {
            curleft+=obj.offsetLeft;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.x) {
        curleft+=obj.x;
    }
    return curleft;
}
 
function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop+=obj.offsetTop;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.y) {
        curtop+=obj.y;
    }
    return curtop;
}


а вот пример и статья от этого сайта

Написал практически то же самое. Только алерты вставил.

Код:

    function findPosY(obj) {
        var curtop = 0;
        alert("2-y");
        if (obj.offsetParent) {

            while (1) {
                curtop += obj.offsetTop;
                if (!obj.offsetParent) {
                    break;
                }
                obj = obj.offsetParent;
            }
        } else if (obj.y) {
            alert("3-y");
            curtop += obj.y;
        }
        alert("4-y");
        return curtop;
    }

Первый alert("2-y"); срабатывает. А остальные нет. Следовательно из-за какой-то ошибки код туда не доходит. Подскажите, пожалуйста, что за ошибка

devote 13.08.2011 13:43

Цитата:

Сообщение от evgenybe
Первый alert("2-y"); срабатывает. А остальные нет. Следовательно из-за какой-то ошибки код туда не доходит. Подскажите, пожалуйста, что за ошибка

В вашем варианте скорее единственное это то что цикл while никогда не заканчивается, следовательно и alert'ы и не срабатывают. Возможно в цикле просто возникает ошибка и код останавливается, может просто не у всех есть offsetTop, это единственное объяснение, либо offsetParent присутствует всегда, что мало вероятно.

evgenybe 13.08.2011 14:46

Цитата:

Сообщение от devote (Сообщение 120285)
В вашем варианте скорее единственное это то что цикл while никогда не заканчивается, следовательно и alert'ы и не срабатывают. Возможно в цикле просто возникает ошибка и код останавливается, может просто не у всех есть offsetTop, это единственное объяснение, либо offsetParent присутствует всегда, что мало вероятно.

Ошибка возникает вот здесь:
if (obj.offsetParent)
Потому что сразу ни в if, ни в else алерты уже не срабатывают.

Как можно исправить?

devote 13.08.2011 15:20

if (obj && obj.offsetParent) {
} else if (obj && obj.y) {
}

devote 13.08.2011 15:30

function findPosY(obj) {
    if ( !obj ) return 0;
    var curtop = 0;
    if ( obj.offsetParent ) {
        while (1) {
            curtop += obj.offsetTop;
            if ( !( obj = obj.offsetParent ) ) {
                break;
            }
        }
    } else if ( obj.y ) {
        curtop += obj.y;
    }
    return curtop;
}

evgenybe 14.08.2011 15:32

Цитата:

Сообщение от melky (Сообщение 120139)
firebug в этом плане намного удобнее.
и дебаггер там есть
попробуйте

Так ведь это для браузера FireFox! А у меня Google Chrom

ваый 14.08.2011 15:42

Цитата:

Сообщение от evgenybe
Так ведь это для браузера FireFox! А у меня Google Chrom

В хроме есть все тоже самое. Пишете в js строчку debugger, F5, и вперед отлаживать.

evgenybe 14.08.2011 15:55

Цитата:

Сообщение от devote (Сообщение 120313)
function findPosY(obj) {
    if ( !obj ) return 0;
    var curtop = 0;
    if ( obj.offsetParent ) {
        while (1) {
            curtop += obj.offsetTop;
            if ( !( obj = obj.offsetParent ) ) {
                break;
            }
        }
    } else if ( obj.y ) {
        curtop += obj.y;
    }
    return curtop;
}

Я уж надоел всем, наверное.
Но ничего до сих пор не работает.
Если я делаю div, а внутри него GridView, то вообще не работает.
Если я делаю div, а внутри него еще div (с именем DivIn), а уж в нем GridView, то тогда координату Y я получаю. Но независимо от положения скролла самого наружного дива, результат в любом случае одно и то же число.

evgenybe 14.08.2011 22:00

Цитата:

Сообщение от ваый (Сообщение 120489)
В хроме есть все тоже самое. Пишете в js строчку debugger, F5, и вперед отлаживать.

Так в том-то и проблема - ставлю debugger, нажимаю F5 и... и не останавливается.

ваый 14.08.2011 23:19

Цитата:

Сообщение от evgenybe
Так в том-то и проблема - ставлю debugger, нажимаю F5 и... и не останавливается.

Консоль-то открыть надо предварительно (F12).


Часовой пояс GMT +3, время: 10:04.