Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Событие на изменение шрифтов в javascript
Vladimir Malikov
#1 Оставлено : 5 августа 2010 г. 7:19:32(UTC)
Ранг: Новичок

Группы: Зарегистрированные пользователи
Зарегистрирован: 26.07.2010(UTC)
Сообщений: 7
Баллов: 21
Откуда: Russia Saint Petersburg

Сказал(а) «Спасибо»: 1 раз
Нужно сделать программку, для консультирования в режиме online. Незакончеая её версия сейчас выглядит так: malikov.org/question/
Данные будут передаваться в помощью AJAX. Javascript будет принимать текст, создавать HTML-код, и вставлять в ветку.

Но в Internet Explorer 6, при изменении размеров шрифта, текст общения выходит за рамки:
[img]s40.radikal.ru/i089/1008/bf/9c751ee31fd6.jpg[/img]


Поправить это можно с помощью javascript: склонировать узел, содержащий всю ветку обшения, затем удалить установленный узел и, на место старого узла, вставить обратно склонированный.

Я там сделал ссылку "Обновить вручную", которая запускает скрипт и вставляет текст на своё место.

Проблема в том, что обновление скрипта должно проходить автоматически, как бы реагируя на событие пользователя при увеличении шрифта.
Вопрос: как создать такое псевдособытие?


В интернете нашёл один способ: в каждое сообщение вставлять пустой элемент, фиксировать его координаты при загрузке и, через определённый интервал, следить за его смещением. Но этот способ, по моему, слишком муторный и тяжёлый, ведь ветка общения может оказаться очень большой...
Реклама
Mikhail.Buranov
#2 Оставлено : 5 августа 2010 г. 7:54:45(UTC)
Mikhail.Baranov

Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 07.10.2007(UTC)
Сообщений: 337
Баллов: 2,114,020
Мужчина
Откуда: Russia

Как пользователь увеличивает размер шрифта? Наверно нажимает [Ctrl]+[+]. А эти события нажатия клавиш ловятся элементарно.

Другой вопрос - а как часто вообще пользователи изменяют размер шрифта в процессе работы? А сколько среди них пользователей IE6?
Vladimir Malikov
#3 Оставлено : 5 августа 2010 г. 21:07:50(UTC)
Ранг: Новичок

Группы: Зарегистрированные пользователи
Зарегистрирован: 26.07.2010(UTC)
Сообщений: 7
Баллов: 21
Откуда: Russia Saint Petersburg

Сказал(а) «Спасибо»: 1 раз
Полная поддержка IE6 - требование заказчика (и по своему он прав). Пользователь может изменить размер шрифта и через панель инструментов (да, согласен, пользователей IE6, изменяющих шрифт в панели инструментов, ещё меньше :-).

Но решение было найдено, изменение шрифта отслеживается с помощью "offsetWidth" (я его привязал к элементу "SPAN", содержащего имя консультанта):
<font size="1"><font color="maroon">window.onload = function() {
//Определяем строчный элемент
var consultantSpan = window.document.getElementById('consultant').getElementsByTagName('SPAN')[0];

//определяем длинну строчного элемента и сохраняем её в переменную
var consultantSpanWidth = consultantSpan.offsetWidth;

//задаём интервал, вызывающий функцию updateTree()
setInterval(updateTree, 250);

//функция проверяет, не изменилась ли длинна строчного элемента
function updateTree() {
//если изменилась, обновляем содержимое и сохраняем новую длинну строчного элемента
if (consultantSpanWidth != consultantSpan.offsetWidth) {
var content_talking = window.document.getElementById('content_talking');
var table_talking = content_talking.getElementsByTagName('TABLE')[0].cloneNode('true');
content_talking.innerHTML = '';
content_talking.appendChild(table_talking);
content_talking = null;
consultantSpanWidth = consultantSpan.offsetWidth;
}
}
}</font id="maroon"></font id="size1">
Mikhail.Buranov
#4 Оставлено : 9 августа 2010 г. 5:10:58(UTC)
Mikhail.Baranov

Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 07.10.2007(UTC)
Сообщений: 337
Баллов: 2,114,020
Мужчина
Откуда: Russia

Вот всё-таки это какой-то жуткий костыль. Я бы попробовал это как-то на уровне вёрстки решить, чтобы не напрягать браузер лишний раз.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.