2010-11-11

Как узнать действующее значение стиля

При помощи объекта style можно узнать только явно заданные значения стилей, однако в большинстве случев необходимо знать не явно заданные а действующие значения стилей.

В Internet Explorer для этого можно воспользоваться свойстом currentStyle
var elem1 = document.getElementById("elemId");
alert(elem1.display);
(см. http://msdn.microsoft.com/en-us/library/ms535231%28v=VS.85%29.aspx) в браузерах на Mozilla можно использовать window.getComputedStyle(el)
var elem1 = document.getElementById("elemId");
var style = window.getComputedStyle(elem1, null);
alert(style.getPropertyValue("display"))
(см. https://developer.mozilla.org/en/DOM%3awindow.getComputedStyle)
Насчет HTML и Opera не уверен, но думаю там также как и у Mozilla.

 

Оставить комментарий

 
  2010-11-03

Векторный графический редактор на JavaScript

На сайте ztools.org создал небольшой векторный графический редактор. Реализованы пока всего три вида объектов - линия, овал и прямоугольник. Редактор сам по себе примитивный и сделан исключительно с целью демонстрации возможностей библиотеки ztools а также для отладки работы с векторной графикой.

Что самое приятное, так это то, что код редактора, без учета библиотечных файлов содержит всего около четыреста строк.

Для прорисовки векторной графики в IE используется VML а в остальных браузерах SVG. В идеале, хочется сделать что то вроде библиотеки Raphael Дмитрия Барановского, но Raphael это вещь в себе, хотя и совершенно волшебная, мне же хочется сделать библиотеку для работы с векторной графикой на базе ztools. С его объектно-ориентированными возможностями можно будет создавать вещи нереализуемые при помощи классического HTML/CSS

 

Коментариев: 3

 
  2010-09-20

Вертикальный текст в HTML

Как я уже писал, в HTML совершенно нет возможности размещать текст по-вертикали. Правда, сильно ограниченные возможности присутствуют в Internet Explorer, правда, у этого способа я обнаружил один баг — при предварительном просмотре печати текст оказывается зеркально отраженным, видимо, второй фильтр не применяется.

Хотелось бы найти универсальный способ отображать вертикальный текст по-вертикали во всех браузерах и по возможности без глюков. Как говорится если нельзя, но очень хочется, то можно.

Создал небольшой скрипт для отображения текста по-вертикали. Код получился сравнительно небольшим. Скрипт использует VML под IE и SVG под остальными браузерами.

Внешний вид полностью настраивается при помощи CSS и Javascript. Здесь можно скачать архив, а здесь увидеть как это работает в живую.

Выложенный пример тестировался на IE6-IE7, Firefox2, Google Crome, Opera и Safary.

 

Коментариев: 6

 
  2010-05-02

Примеры использования VML и SVG

Сейчас в интернете накопилось огромное количество примеров использования SVG и VML однако, в большинстве случаев это именно XML файлы для отображения которых их нужно скормить браузеру либо как файл с расширением .svg либо как .vml. В некоторых примерах имеет место XHTML файл у которого уже прописаны namespace и всякая дополнительная бутафория. Меня же в данном случае интересует как взять ОБЫЧНЫЙ html файл и добавить к нему векторную картинку. Причем добавить непосредственно к уже существующему HTML коду чтобы HTML и VML или SVG отображались вместе.

В конце концов путем расковыривания кода Барановского и анализа существующих примеров сделал два примера которые меня устроили:

пример создания SVG - в FF и Safari должен показаться заполненный круг

пример создания VML - в IE должен показаться овал и линия

 

Коментариев: 1

 
  2010-05-01

Векторная графика под HTML

Оказывается, под HTML есть возможность использовать векторную графику, вот только разные браузеры реализуют эту возможность по разному, и пока HTML5 находится в зачаточном состоянии, VML под IE и SVG под остальными браузерами вполне себе работоспособны. Проблема в том как подружить эти две технологии. Дмитрий Барановский создал уровень абстракции позволяющий создавать волшебные вещи, причем во всех браузерах.

Залез смотреть исходник - внутри куча всего интересного - причем я еще не до конца уверен - это пис оф кейк или пис оф шит... Узнал много нового из жизни JavaScript...

Искренне завидую - тоже так хочу.

 

Коментариев: 5

 
  2010-04-05

Как показывать и прятать строки таблицы

Давным давно стояла задача, как при помощи JavaScript прятать одни строки таблицы и показывать другие. В CSS у стиля display есть значение table-row которое как раз и применяется по умолчанию к элементам типа TR, однако в Internet Explorer поддержка табличных классов практически не реализована, поэтому прямое присваивание .style.display = 'table-row' в IE ниже восьмой версии работать не будет. Не работает также и run-in. Однако, есть одно значение display которое железно работает везде - это nodisplay.

Как при помощи nodisplay показать спрятанный элемент? Просто удаляем связанный с TR класс! Т.е. у невидимых элеменов будет класс с display:nodisplay, назовем его nodisplay у видимых этого класса не будет и они останутся видимыми. Если хотим сделать видимыми невидимые элементы а невидимые видимыми то просто удаляем невидимый класс у одних и добавляем его другим. Очень просто! Как это сразу не пришло мне в голову....

пример

row 1 row 1
row 2 row 2

 

Коментариев: 7

 
  2010-02-22

Как изменить внешний вид полосы прокрутки

Ответ - никак. Штатными средствами это не возможно. Однако, можно реализовать свою версию полосы прокрутки.

В выходные создал несколько новых тем для z.html.Scrollbar. По моему, получилось не дурно...

 

Коментариев: 7

 
  2010-01-05

ColorPicker

Выложил на ztools.org компонент для выбора цвета, по моему, получилось неплохо...

Компонент представляет собой RGB палитру, наподобие той, что используется в Photoshop - на мой взгляд, так выбирать цвет удобнее всего, хотя, есть задумка сделать еще несколько оригинальных колорпикеров.

 

Оставить комментарий

 
  2009-12-18

getElementsByTagName

Забавно, getElementsByTagName не только возвращает коллекцию элементов по имени тега, но и поддерживает эту коллекцию в актуальном состоянии.

Так, если я добавлю в документ еще один элемент с таким же именем, то количество элементов в коллекции созданной ранее изменится:

  window.onload = function(){
    var inputs = document.getElementsByTagName('input');
    alert(inputs.length);
    var item = document.createElement('input');
    document.body.appendChild(item);
    alert(inputs.length);
  }

Upd: действительно: The list is live, so changes to it internally or externally will cause the items they reference to be updated as well.

 

 

Оставить комментарий

 
  2009-11-18

Занятный фокус с JS

За что я люблю JS это за то что на нем можно реализовать некоторые вещи совершенно нетривиальным способом. Например такая задача: Есть IFRAME который создается динамически, нужно привесить событие onload на объект window внутри этого IFRAME. Сразу после создания свойство contentWindow равно нулю, поэтому непосредственно после создания доступа к нему нет. Оно станет доступно через некоторое время. Логичным будет проверять на ноль свойство каждые сто миллисекунд пока оно не будет чему нибудь равно:

var onloadfunc = function(){
    alert('loaded!!!');
};
        
(function(){
    if (!iframe.contentWindow){
         setTimeout(arguments.callee,100);
         return;
    }
    iframe.contentWindow.onload = onloadfunc;
})();

В приведенном примере анонимная функция вызывает саму себя через каждые 100 миллисекунд. Интересно что когда это писал - забыл поставить точку с запятой в }; - это привело к интересной штуке - калбак стал вызываться на этапе инициализации - т.е. скобки имеют наивысший приоритет даже если между ними стоит перенос строки.

 

Коментариев: 1