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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация работы с глобальными событиями 
:(
    Опции темы
awers
Дата 22.2.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

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



Вечер добрый. Что подскажите, как можно оптимизировать вот такое чудовище:
Код

function kCtrlForward(){}
function kCtrlBack(){}
function kShiftForward(){}
function kShiftBack(){}

function kListener(event){
    event = event || window.event;
    ccode = event.keyCode ? event.keyCode : event.which ? event.which : null;
    if (event.ctrlKey && event.keyCode){
        switch (ccode)
        {
            case 0x25: kCtrlBack(); break;
            case 0x27: kCtrlForward(); break;
        }
    }
    if(event.shiftKey && event.keyCode){
        switch (ccode)
        {
            case 0x25: kShiftBack(); break;
            case 0x27: kShiftForward(); break;
        }
    }
}
function kBind(act,func){
    switch (act){
        case 'CtrlForward': kCtrlForward = func; break;
        case 'CtrlBack': kCtrlBack = func; break;
        case 'ShiftForward': kShiftForward = func; break;
        case 'ShiftBack': kShiftBack = func; break;
        default: return false; break;
    }
}
function kUBind(act){
    empty = function(){};
    switch (act){
        case 'CtrlForward': kCtrlForward = empty; break;
        case 'CtrlBack': kCtrlBack = empty; break;
        case 'ShiftForward': kShiftForward = empty; break;
        case 'ShiftBack': kShiftBack = empty; break;
        default: return false; break;
    }
}
document.onkeydown = kListener;

function xx(){
    alert('asd');
}
kBind('CtrlForward',xx);

Это я написал для назначения глобальных сочитаний клавиш

Добавлено через 51 секунду
Смысл в том что кол-во сочитаний клавиш будет не мало, а неохота что бы скрипт был монстром
PM MAIL WWW ICQ Skype   Вверх
Soah
Дата 22.2.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



примерно так
Код

var hotKeys = Array(2);
hotKeys['CtrlForward'] = null;
hotKeys['CtrlBack'] = null;

function kCtrlForward() {
    hotKeys['CtrlForward']();
}

function kCtrlBack() {
    hotKeys['CtrlBack']();
}

function xx() {
    alert('xx');
}

function yy() {
    alert('yy');
}

function kBind(act, func){
    hotKeys[act] = func;
}

kBind('CtrlForward', yy);
kBind('CtrlBack', xx);

kCtrlForward();
kCtrlBack();

PM MAIL   Вверх
ksnk
Дата 22.2.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Как-нибудь так... На коленке сочинилось... 
Код

var hotStore=[];

function newHotKey(option,func){
   if (func)  {
         var x={};
         x.flags=option.flags||0;
         x.code=option.code||0;
         x.func=func;
         hotStore.pop(x);
   } else 
      // тут надо найти по flags, code и удалить ранее вставленный элемент
}

function kListener(event){
    event = event || window.event;
    var ccode = event.keyCode || event.which || null,
        flags= (event.ctrlKey?1:0)+(event.shiftKey?2:0),
        hl= hotStore.length;
    while(hl--){
       if(hotStore[hl].flags==flags && hotStore[hl].code==ccode)
             hotStore[hl].func();
    }
}

var key_combination={
   CtrlForward:{flags:1,code: 0x27},
   CtrlBack:{flags:1,code: 0x25},
}

function kBind(act,func){
    if(key_combination[act]){
       return newHotKey({key_combination[act]},func)
    }
    return false;
}

function kUBind(act){
    kBind(act);
}


Это сообщение отредактировал(а) ksnk - 22.2.2009, 23:14


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
awers
Дата 28.2.2009, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

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



Вот пока в такое вымучал. Есть какие ещё соображения, как можно поизвращаться? )

Код

var kCode = {Ctrl37:'CtrlBack', Ctrl39:'CtrlForward',Shift37:'ShiftBack', Shift39:'ShiftForward'};
var kFuncs = {CtrlBack:null,CtrlForward:null,ShiftBack:null,ShiftForward:null};

function kListener(event){
    event = event || window.event;
    ccode = event.keyCode ? event.keyCode : event.which ? event.which : null;
    if (event.ctrlKey && event.keyCode && ccode !== 17){
        kFuncs[kCode['Ctrl'+ccode]]();
    }
    if(event.shiftKey && event.keyCode && ccode !== 16){
        kFuncs[kCode['Shift'+ccode]]();
    }
}
function kBind(act,func){
    kFuncs[act] = func;
}

document.onkeydown = kListener;

kBind('ShiftBack',function(){ alert('hello'); return false; });


Это сообщение отредактировал(а) awers - 28.2.2009, 02:49
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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