Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Посмотрите мой создать сообщений. (https://javascript.ru/forum/project/19431-posmotrite-mojj-sozdat-soobshhenijj.html)

prowoke 04.08.2011 03:40

Посмотрите мой создать сообщений.
 
После прочтения фленагана, решил написать, что-то более чем 50 строчек. Придумал себе задачу и вот, что получилось:
http://deluxe-okna.ru/testing.html

Особенности:

1. Анимированно раскрываются/закрываются поля textarea
2. После того как создали сообщение, его можно двигать стрелками на клавиатуре, если выбран способ соответствующий и также можно двигать по drag&drop, если выбран способ "мышью".
3. Пока все поля не заполнены и кнопка не зелёная, то создать форму нельзя.
4. Создать форму можно клавищей "Enter" и также закрывать её.
5. Размеры блоков в главном блоке идут через пропорцию.


В коде, конечно, ужас. Но я пока фиговый программист, хотел всё это в ООП, но ООП плохо понимаю, поэтому решил не городить, следующее задание уже буду в ООП делать.
Я просто когда делал, старался как можно больше возможностей js использовать. Работа с DOM, события с клавиатуры и мыши, работы с формами.

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

B@rmaley.e><e 04.08.2011 09:40

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мс должно быть достаточно.

monolithed 04.08.2011 11:04

Чтобы не писать лишний код, старайтесь его оптимизировать.
Для начала начните с attachEvent

Shaci 04.08.2011 12:00

при движении по enter фокус меняется у чекбоксов дополнительно

prowoke 05.08.2011 02:03

Цитата:

Сообщение от Shaci (Сообщение 117224)
при движении по enter фокус меняется у чекбоксов дополнительно

Не понял?



Цитата:

2. Если Вы автоматически вызываете функцию, обрамите её тело в скобки (даже если она уже является частью выражения). Иначе может быть непонятно, что будет результатом выражения - то ли функция. то ли результат её выполнения.
(getBrowserName())


Вы об этом?

B@rmaley.e><e 05.08.2011 09:16

Цитата:

Сообщение от prowoke
Вы об этом?

Нет, я об этом:
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, время: 03:33.