не могу в твоем коде разобраться
<!DOCTYPE HTML> <html lang="ru-RU"> <body><input> <script> var keys={}; function show() { var str=''; for(var i in keys)if(keys[i]) str += (String.fromCharCode(i)||i)+' + '; document.body.firstChild.value = str.slice(0,-3); } тут я долго пытался вывести код клавиш, но так и не смог(( function key(e) { var key; if (window.event) { key = window.event.keyCode; } else if (e) { key = e.which; } вот эту запись не догнал keys[key]= e.type === 'keydown' ? true : false; здесь, я так понимаю, мы храним список клавиш, которые когда либо нажимались show() } window.onkeydown = window.onkeyup = key; </script> </body> </html> |
Расписал детально.
<!DOCTYPE HTML> <html lang="ru-RU"> <body><input> <script> (function(){ //анонимная функция чтобы не сорить в глобальную область видимости function addEvent(elem, type, func) { //кроссбраузерное навешивание события, в любой(почти) библтотеке есть своя return elem.addEventListener ? elem.addEventListener(type, func, false) : elem.attachEvent('on' + type, func); //первый случай для нормальных браузеров, второй для осла } var keys = [], //массив нажтых клавиш names = { 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 37: 'Left', 38: 'Up', 39: 'Right', 40: 'Down', 32: 'Space' //... }; //имена спецклавиш, если нужно function key(e) { e || (e = event); var key = e.which || e.keyCode, //первый случай для нормальных браузеров, второй для осла i = keys.length; if(e.type === 'keydown'){ //если событие keydown, т.е. клавиша нажата if( keys[i-1] !== key ){ //если срабатываение не повторное keys.push(key); //добавляем нажатую в конец массива } } else { //если клавиа поднята while(i--){ //перебор массива, можно было бы обойтись indexOf, да осёл не позволяет if( keys[i] === key){ //если есть такая keys.splice(i,1); //то удаляем её из массива } } } show() //обновление выводимой информации, если вывод не планируется, то это вам не нужно e.preventDefault ? e.preventDefault() : ( e.returnValue = false ); //отмена срабатывания стандартного сочетания клавиш, как обычно первый случай для нормальных браузеров, второй для осла } function show() { // var i = keys.length, arr = keys.slice(0); //копируем массив клавиш while(i--){ /* Перебираем копию массива, сначаля ищем совпадения среди спецклавиш в names, затем пытаемся получить букву по коду клавиши, и в итоге, если ничего не вышло, оставляем код. */ arr[i] = names[ arr[i] ] || String.fromCharCode( arr[i] ) || '['+arr[i]+']'; } document.body.firstChild.value = arr.join('+'); //вывод в первый элемент документа, в данном случае input } addEvent(document, 'keydown', key); addEvent(document, 'keyup', key); }()) </script> </body> </html> |
Часовой пояс GMT +3, время: 15:52. |