Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Философский вопрос про свойства / 18 сообщений из 18, страница 1 из 1
09.12.2008, 14:28
    #35702733
Философский вопрос про свойства
Правильно ли я понимаю, что не существует универсального способа получить
координаты ЛЮБОГО объекта относительно родительского.
Например:

<style>
.mystyle{position:relative; left:100px}
</style>

...

<table id="tab1" class="tt" border="1">
...

после загрузки страницы

tab1.style.left == пустой строке

tab1.offsetLeft == 123

если присвоить

tab1.style.left = "200px"

то элемент передвинется, и

tab1.offsetLeft станет 123

а если присвоить

tab1.style.left = "100px"

то элемент не передвинется, и tab1.offsetLeft не изменится.

Короче говоря, передвинуть объект можно, узнать, где он находится, тоже можно,
а вот как узнать, куда он передвинулся ?
...
Рейтинг: 0 / 0
09.12.2008, 17:30
    #35703493
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Не хочется писать много кода, к тому же я уже давненько не делаю чистым js, поэтому просто приведу с помощью библиотеки jQuery:
Код: plaintext
1.
2.
<element id="our_element">
var x_in_parent = $("#our_element").offset().left - $("#our_element").parent().get( 0 ).offset().left;
var y_in_parent = $("#our_element").offset().top - $("#our_element").parent().get( 0 ).offset().top;
Само собой, нужна проверка на наличие родителя.
Вроде решение универсально.
...
Рейтинг: 0 / 0
09.12.2008, 18:39
    #35703688
Философский вопрос про свойства
Да, я пробовал и с jquery.

Но вопрос немного не о том. Мы можем получить некое значение offset.
И мы может его установить, записав в style.left или style.top. Проблема в том,
что это РАЗНЫЕ значения. Читается не то, что пишется. А можно ли сделать такие
функции, чтобы :

getObjectOffsetLeft(object) всегда возвращало то, что было установлено посредством
setObjectOffsetLeft(object,value), а если ее ни разу не вызывали, то реальное положение
объекта ?
...
Рейтинг: 0 / 0
09.12.2008, 18:50
    #35703711
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Если ты установил position как relative, то почему ждешь, что элемент встанет на абсолютную позицию?
Устанавливай position как absolute и позиционируй как хочешь, для этого и существует. Не надо лепить все в одну кучу.
...
Рейтинг: 0 / 0
09.12.2008, 21:08
    #35703945
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Веб-программист,

Почему ж? Существует - суммировать оффсет-парент. Универсальная метода, в том же жквери IDVsbruck а присутствует - в полный рост. IDVsbruck , когда ты пишешь это слово (жквери) - я как доктор Геббельс, хватаюсь за пистолет.
...
Рейтинг: 0 / 0
10.12.2008, 12:28
    #35705045
Философский вопрос про свойства
ShSergeВеб-программист,

Почему ж? Существует - суммировать оффсет-парент. Универсальная метода, в том же жквери IDVsbruck а присутствует - в полный рост. IDVsbruck , когда ты пишешь это слово (жквери) - я как доктор Геббельс, хватаюсь за пистолет.


И это пробовал. Получается во-первых, +- несколько пикселей, во-вторых, style.left можно задать
и не в пикселях.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function findPos(obj) 
{
	var curleft = curtop =  0 ;
	if (obj.offsetParent) 
	{
		do 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return [curleft,curtop];
	}
}

function test(object)
{
  object.style.left = "100px";
  alert(findPos(object)[ 0 ]-findPos(object.parentNode)[ 0 ]+'=>'+object.style.left);
}

Результат: 100=>102
jQuery

Код: plaintext
1.
alert(object.offset().left-object.parent().offset().left);

дает тот же результат, 102 а не 100.
...
Рейтинг: 0 / 0
10.12.2008, 14:05
    #35705395
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Для полноты картины не хватает стиля объекта и его родителя. Посмотреть можно?
...
Рейтинг: 0 / 0
10.12.2008, 14:49
    #35705562
Философский вопрос про свойства
У родителя все по умолчанию

<body>
<p>
<table border="1">
<tr><td> </td>
<td> <!-- се родитель -->
<table id="tab1" class="mystyle" border="1"> <!-- се объект -->
...
</table>
</td>
</tr>
</table>
</p>
</body>
...
Рейтинг: 0 / 0
10.12.2008, 17:16
    #35706185
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Я, конечно, понимаю желание "получить координаты ЛЮБОГО объекта относительно родительского", но проводить такие действия в отношении таблиц и ячеек - кощунство. Для это есть контейнеры (потому так и называются). Что же до расхождений, которые ты получил, то тут все понятно - это расхождение браузеров. Могу ошибиться в расстановке мест, но вроде как ИЕ делает рамку ЗА пределами контейнера, а ФФ - внутри. Однако тот же jQuery пытается быть объективным и совершенно кроссбраузерным, поэтому выдает реальное положение объекта, включая границу.

Таким образом, указав стиль напрямую (left: 100 и border: 1), в ФФ объект с границей будет отображаться начиная с позиции 100, тогда как в ИЕ - с позиции 99.

Решение таких "коллизий" - это использование только одного пути установки и получения координат, например, тот же jQuery. Если установить объект.css("left", 100), то фреймфорк установит объект во всех браузерах одинаково, с учетом их специфики.
...
Рейтинг: 0 / 0
11.12.2008, 11:45
    #35707637
Философский вопрос про свойства
IDVsbruck:

Ты, скорее всего, не понял вопрос. Ты говоришь, что есть способ установить объект одинаково во всех браузерах. Это совершенно не то, про что я спрашивал. Я спрашивал: можно ли узнать, куда именно он установился ? То есть если я любым способом (не только скриптом) устанавливаю его в позицию "100", то есть ли способ прочитать откуда-то это самое "100" ? Не 102, не 99, а именно то самое, что я туда писал. При этом не так уж важно, где именно находится объект - на 100 пикселей от родителя или на 101.
...
Рейтинг: 0 / 0
11.12.2008, 12:35
    #35707840
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
А ты, скорее всего, не понял ответ. Ты устанавливаешь одним средством, а получаешь другим. Если ставить обычным способом - через стили - то будут расхождения и нестыковки, вызванные наличием/отсутствием бордеров, маргинов и паддингов. Чтобы избежать, устанавливай и получай одним (к примеру, тем же жКвери).

Ну, и конечно, поправка по поводу контейнера ... С установкой для таблицы абсолютного позиционирования не сталкивался, всегда запихивал в этих целях в контейнер див.

Кстати, из доки про таблицы:
The properties of a table are distinct from the properties of cells contained within the table. For example, the offsetLeft property of a multicolumn table is not the same as the offsetLeft property of the left-most cell in the table. Refer to the appropriate object when writing scripts involving table and/or cell objects.

Поэтому чтобы говорить об универсальном способе, пользуйся контейнерами и абсолютным позиционированием.
...
Рейтинг: 0 / 0
11.12.2008, 12:57
    #35707943
Философский вопрос про свойства
IDVsbruckЧтобы избежать, устанавливай и получай одним (к примеру, тем же жКвери).


Если устанавливать и получать через jQuery, получается то же самое.
Ставим

object.css("left",100);

получаем

alert(object.offset().left-object.parent().offset().left); // = 102

IDVsbruck
С установкой для таблицы абсолютного позиционирования не сталкивался, всегда запихивал в этих целях в контейнер див.


Что можно использовать div я знаю. Вопрос носит философский характер. То есть нам говорят буквально следующее: "Ребята, хотя у вас есть DOM, но этот DOM - чистая условность. В нем можно делать не что угодно, а только определенные вещи строго предписанными методами. Все остальное не гарантируется. Хотите позиционирование - юзайте div и position absolute. Свойства объектов существуют сами по себе, и к объектам имеют весьма условное отношение".
...
Рейтинг: 0 / 0
11.12.2008, 13:05
    #35707985
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
А ты, кстати, установил position: absolute или проводишь изыскания все с тем же relative?
...
Рейтинг: 0 / 0
12.12.2008, 16:29
    #35711567
Философский вопрос про свойства
IDVsbruckА ты, кстати, установил position: absolute или проводишь изыскания все с тем же relative?

c relative. C absolute более или менее все ясно. Но вот, например, если есть какая-то таблица,
и внутри клетки этой таблицы нужно позиционировать элемент, то relative - естественный способ.
Кстати, div тут не слишком помогает.
...
Рейтинг: 0 / 0
12.12.2008, 17:41
    #35711773
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Никаких проблем - в ячейку вставляй див с position: relative и шириной/высотой по 100%, а в него всовывай таблицу.
...
Рейтинг: 0 / 0
12.12.2008, 18:10
    #35711836
Философский вопрос про свойства
IDVsbruckНикаких проблем - в ячейку вставляй див с position: relative и шириной/высотой по 100%, а в него всовывай таблицу.

Абсолютно тот же результат. style.left=100, this.left-parent.left = 102
...
Рейтинг: 0 / 0
12.12.2008, 18:48
    #35711906
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Философский вопрос про свойства
Учитывай бордюры и все будет ок.
...
Рейтинг: 0 / 0
15.12.2008, 11:19
    #35714068
Философский вопрос про свойства
IDVsbruckУчитывай бордюры и все будет ок.

А почему jQuery их не учитывает ?
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Философский вопрос про свойства / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]