Использование shadowbox отключает сочетания клавиш?
-
09-06-2019 - |
Вопрос
Итак, мой сайт использует теневой ящик для этого нужно отобразить какой-нибудь динамический текст.Проблема в том, что мне нужно, чтобы пользователь мог копировать и вставлять этот текст.
Щелчок правой кнопкой мыши и выбор пункта копировать работает, но Ctrl+C не работает (никакие сочетания клавиш не работают), и большинство людей используют Ctrl+C?Вы можете увидеть пример того, о чем я говорю здесь.
Просто перейдите в раздел "веб-примеры" и нажмите "встроенный".Обратите внимание, что сочетания клавиш действительно работают в примере "эта страница".Единственное различие между этими двумя, которое я вижу, - это js-файлы плеера, которые они используют."Встроенный" использует проигрыватель html.js, а "эта страница" использует iframe.js.Кроме того, я полагаю, что он использует библиотеку mootools.Есть какие-нибудь идеи?
Решение
Лучший вариант - отключить сочетания клавиш для навигации в shadowbox, установив для параметра "enableKeys" значение false (см. эта страница).
В качестве альтернативы вы могли бы сделать что Робби предполагает и изменения shadowbox.js файл, но делайте это только в том случае, если вам нужна навигация с клавиатуры shadowbox.Я думаю, что вы хотите выполнить поиск этого блока кода и изменить его так, чтобы он отменял событие по умолчанию только в том случае, если используется один из ярлыков (я добавил несколько разрывов строк и отступов):
var handleKey=function(e){
var code=SL.keyCode(e);
SL.preventDefault(e);
if(code==81||code==88||code==27){
SB.close()
}else{
if(code==37){
SB.previous()
}else{
if(code==39){
SB.next()
}else{
if(code==32){
SB[(typeof slide_timer=="number"?"pause":"play")]()
}
}
}
}
};
Я думаю, вы могли бы изменить это, чтобы оно выглядело более похоже на это:
var handleKey=function(e){
switch(SL.keyCode(e)) {
case 81:
case 88:
case 27:
SB.close()
SL.preventDefault(e);
break;
case 37:
SB.previous()
SL.preventDefault(e);
break;
case 39:
SB.next()
SL.preventDefault(e);
break;
case 32:
SB[(typeof slide_timer=="number"?"pause":"play")]()
SL.preventDefault(e);
break;
}
};
Это должно помешать обработчику событий shadowbox проглатывать любые нажатия клавиш, о которых ему нет дела.
Другие советы
Эта проблема вызвана некоторым JavaScript, который поглощает события клавиатуры.Например, вы можете нажать клавишу escape, которая попадает в ловушку одного из файлов .js и приводит к закрытию теневого окна.
Ваш выбор - взломать файлы и найти проблему или не использовать shadowbox.Удачи вам!
Решение состоит в том, чтобы установить для параметра enableKeys значение false.Однако, похоже, это не работает при вызове open() для встроенного HTML.Однако это работает, если вы установите его в своем вызове init().