Посмотрите мой создать сообщений.
После прочтения фленагана, решил написать, что-то более чем 50 строчек. Придумал себе задачу и вот, что получилось:
http://deluxe-okna.ru/testing.html Особенности: 1. Анимированно раскрываются/закрываются поля textarea 2. После того как создали сообщение, его можно двигать стрелками на клавиатуре, если выбран способ соответствующий и также можно двигать по drag&drop, если выбран способ "мышью". 3. Пока все поля не заполнены и кнопка не зелёная, то создать форму нельзя. 4. Создать форму можно клавищей "Enter" и также закрывать её. 5. Размеры блоков в главном блоке идут через пропорцию. В коде, конечно, ужас. Но я пока фиговый программист, хотел всё это в ООП, но ООП плохо понимаю, поэтому решил не городить, следующее задание уже буду в ООП делать. Я просто когда делал, старался как можно больше возможностей js использовать. Работа с DOM, события с клавиатуры и мыши, работы с формами. В общем, если кто просмотрит код, скажите прям аж сразу бросающиеся в глаза косяки. После этой штуки, теперь хочу ещё чуток почитать и приступить с написанию своей библиотеки. Думаю это будет действительное сложное задание. |
1. Старайтесь обойтись без определения браузера. Определяйте возможности браузера, а не его самого.
if (getBrowserName() == 'IE') textarea_tr = checkElement.parentNode.parentNode.nextSibling; else textarea_tr = checkElement.parentNode.parentNode.nextSibling.nextSibling;Здесь, сдается мне, Вы хотите получить следующий за родителем элемент, но в IE появляется какой-то другой (текстовый?) промежуточный узел. Такое же возможно и в других браузерах, поэтому лучше перебирать все следующие за родителем элементы, пока их nodeType не станет равным 1 (это значение для элементов, для текстовых узлов. например, 2). 2. Если Вы автоматически вызываете функцию, обрамите её тело в скобки (даже если она уже является частью выражения). Иначе может быть непонятно, что будет результатом выражения - то ли функция. то ли результат её выполнения. 3. Нет необходимости в таймауте в 1мс. Браузеры не будут так быстро реагировать, а Вы будете их только зря нагружать. 40мс должно быть достаточно. |
Чтобы не писать лишний код, старайтесь его оптимизировать.
Для начала начните с attachEvent |
при движении по enter фокус меняется у чекбоксов дополнительно
|
Цитата:
Цитата:
Вы об этом? |
Цитата:
checkElement.onclick = function(textarea_tr, height) {
var i = 0, j = 0, h = height;
return function() {
textarea_tr.style.display = 'table-row';
var textarea = '';
if (getBrowserName() == 'IE')
textarea = textarea_tr.firstChild.firstChild;
else
textarea = textarea_tr.firstChild.nextSibling.firstChild;
(function() { // Функция, которая создаёт анимацию textarea
if (++i <= h) {
textarea.style.height = i + 'px';
j = i;
if (j >= h) return false;
} else {
textarea.style.height = --j + 'px';
if (j <= 0) {
i = 0;
textarea_tr.style.display = 'none';
return false;
}
}
window.setTimeout(arguments.callee,1);
return false;
})();
}
}(textarea_tr, listTextareaCheck[checkId]); // Передача id кнопки и высоты textarea через замыкание
|
| Часовой пояс GMT +3, время: 14:19. |