Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Узнать размеры DIV'а до его добавления на страницу (https://javascript.ru/forum/events/45430-uznat-razmery-div%27-do-ego-dobavleniya-na-stranicu.html)

nextdrift 28.02.2014 11:58

Узнать размеры DIV'а до его добавления на страницу
 
Добрый день.

Делаю генератор всплывающих подсказок (при помощи jQuery), размер треугольника(стрелочки) строится исходя из размера высоты DIV'a текста

До этого делал следующим образом:

1. добавлял блок с текстом на страницу
var text = $('<div>').html('какой-то текст...');
text.appendTo(el);


2. брал высоту блока
var height = text.outerHeight();


3. генерировал SVG стрелочку исходя из высоты блока

//////

как можно узнать высоту текстового блока до помещения на страницу?


текстовый блок имеет также параметр max-width - для переноса длинных текстов

krasovsky 28.02.2014 13:59

Вставить его с display:none или visibility:hidden измерить и установить видимым
хотя я сам не пробовал. Как вариант position absolute и большие минусовые left и top

nextdrift 28.02.2014 18:26

Цитата:

Сообщение от krasovsky (Сообщение 299986)
Вставить его с display:none или visibility:hidden измерить и установить видимым
хотя я сам не пробовал. Как вариант position absolute и большие минусовые left и top

мне нужно именно в памяти было.

Я сейчас пошёл немного по другому пути.

Написал функцию перевода простого текста в текст разибтый по линиям.

кому интересен код, делюсь

http://pastebin.com/BNzPsvsz


От количества полученых линии буду задавать высоту.

Сейчас буду писать функцию рисования svg.

kostyanet 01.03.2014 00:28

Цитата:

Сообщение от nextdrift
мне нужно именно в памяти было.

Оно в памяти и будет. Типа в клипборде, отформатированном.

danik.js 01.03.2014 01:03

Цитата:

Сообщение от nextdrift
как можно узнать высоту текстового блока до помещения на страницу?

Пока не поместишь блок на страницу к нему не применятся css-стили. А ведь высота зависит именно от стилей. Понял в чем фишка?

Царь Леонид 01.03.2014 12:41

Я делал похожую штуку, по умолчанию ставил margin-left:-9999px потом брал ширину блока и применял его к margin-left. Если у блока поставить display:none или opacity:0, ничего не получится

danik.js 01.03.2014 12:47

visibility:hidden и все получится.

nextdrift 04.03.2014 23:12

И так :) Всем спасибо за советы :) Но я пошёл путём рисования в SVG - всё работает теперь даже лучше, кроме одной проблемы.

Проблема с шириной блока под текст...
Я пошёл по наипростому пути и сделал следующий способ.

ширна = кол-во символов * 10

но вот проблема в том, что разные символы имеют разную ширину... Как поступить в данной ситуации? Может стоит написать отдельную функцию, в которой будут размеры каждого символа в px? И таким образом считать

ksa 05.03.2014 08:30

Цитата:

Сообщение от nextdrift
Как поступить в данной ситуации?

Все советы тебе уже дали выше...

krasovsky 05.03.2014 15:09

Цитата:

Сообщение от nextdrift (Сообщение 301048)
И так :) Всем спасибо за советы :) Но я пошёл путём рисования в SVG - всё работает теперь даже лучше, кроме одной проблемы.

Проблема с шириной блока под текст...
Я пошёл по наипростому пути и сделал следующий способ.

ширна = кол-во символов * 10

но вот проблема в том, что разные символы имеют разную ширину... Как поступить в данной ситуации? Может стоит написать отдельную функцию, в которой будут размеры каждого символа в px? И таким образом считать

Не для фана конечно можешь попробовать, но это нежизнеспособно. Я тебя наверно не удивлю если напомню что кроме разной ширины букв, есть еще и разные шрифты )) А еще не забудь учесть межбуквенную разрядку, Bold italic и прочие и прочие.
В общем итоге чтоб сделать такой расчет тебе нужно точно знать каким шрифтом и с какими стилями текст. И не менять его во веки веков а то рассчеты поломаются.


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