Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Горячие клавиши" на странице, просто и удобно ловим комбинации 
:(
    Опции темы
Sardar
Дата 19.2.2006, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Как отлавливать горячие клавиши на странице? Вопрос зародился отсюда:
http://forum.vingrad.ru/index.php?showtopic=84028

К новому дизайну писал удобный и простой код, ошибок не найдено, выкладываю:
Код
function getOperaVersion() {
  var opver=navigator.userAgent.match(/Opera\s*([0-9.]+)/i);
  return (opver&&opver.length>1)? parseFloat(opver[1]): 0;
}


HotKeyHandler.keys = {};
HotKeyHandler.convertIEKey={"1":65,"2":66,"4":68,"12":76,"16":80,"19":83,"20":84,"21":85,"26":90};
function HotKeyHandler(ev) {
   var evt, key;
   if(!(evt=window.event? window.event: ev)) return;
   key = evt.keyCode? evt.keyCode: evt.charCode;
   key=HotKeyHandler.convertIEKey[String(key)]? HotKeyHandler.convertIEKey[String(key)]: key;
   if ((evt && evt.ctrlKey)||key==27) { //здесь фильтрируем ctrl, alt и прочие
       key=evt.shiftKey? String.fromCharCode(key).toUpperCase(): String.fromCharCode(key).toLowerCase();
       if(typeof(HotKeyHandler.keys[key]) == "function") {
          HotKeyHandler.keys[key](evt);
      evt.cancelBubble = true;
          evt.returnValue = false;
          if(evt.preventDefault) evt.preventDefault();
          if(evt.stopPropagation) evt.stopPropagation();
          return false;
       }
   }
   return true;
}

//Default init. Handle hotkeys on window.
HotKeyHandler.windowInit=function() {
   if(document.addEventListener && (getOperaVersion()>6||getOperaVersion()==0)) {
     document.addEventListener("keypress", HotKeyHandler, false);
   } else {
     document.onkeydown = HotKeyHandler;
   }
}


Для IE потребовалось конвертировать коды символов, в остальном всё просто. Для каждой комбинации необходима функция, пишеться как буква=>функция в HotKeyHandler.keys. Пример использования:
Код
//определяем комбинации (коды символов) и действия к ним
HotKeyHandler.keys = {
      "\r":function() { alert("ctrl + Enter") },
      "b":function(){ alert("ctrl+B") },
      "\x1B":function(){ alert("Esc") }
};
     
HotKeyHandler.windowInit(); //инициализируем на окне, т.е. ловим события на окне


Код максимально прост, надеюсь вопросов не возникнет smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
quiz
Дата 9.2.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



вопрос smile

как ловить горячие клавиши на странице со фреймами?
Если вставить этот код в родительское окно - при клике на какой-нить фрейм клавиши не ловятся.
Тоже самое, если вставить его в один из фреймов - работает пока не кликнешь на другой фрейм.

Выход только один - вставлять к каждый фрейм одно и тоже или есть что-нибудь пологичнее?
PM MAIL   Вверх
12345c
Дата 9.2.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 2
Всего: 101



Логичнее логичного ничего не может быть более логичного.
PM WWW   Вверх
Sardar
Дата 9.2.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



quiz, каждый фрейм это полноценное окно, которое потребляет свои события и не отдаёт родительским окнам (логично, окна могут быть с разных доменов). Простейший выход, это либо с дублировать код везде или положит его в top фрейм, а из дочерних вызывать top.HotKeyHandler(event).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Loengreen
Дата 21.12.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



А можно ли перехватить ctrl + v для IE? В ff все ок.
(правда не понял кодирования клавиш для IE... наверное в этом вся проблема).


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.