Посмотрите мой создать сообщений.
После прочтения фленагана, решил написать, что-то более чем 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, время: 05:38. |