Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   onkeydown onkeyup проверка на нажатие (https://javascript.ru/forum/css-html/55741-onkeydown-onkeyup-proverka-na-nazhatie.html)

KNeaDeD 12.05.2015 16:06

onkeydown onkeyup проверка на нажатие
 
Всем здравствуйте!
Сначала пояснение на русском, ниже выложу сам код.

Написал я скрипт, логика в крации такова: при нажатии в поле документа document.onkeydown= вызвать функцию pressdown. При отпускании клавиши document.onkeyup= вызвать функцию pressup. Все работает локально.

Проблема в следующем - При подключении через teamviewer к компьютеру, где лежит этот html документ, - html документ игнорирует onkeyup !!! Т.е. teamviewer не отсылает команду onkeyup! Как можно в связи с этим изменить код? Или какой софт посоветуете для удаленного вызова onkeyup?

А вот и код:
<script language = 'javascript'>
var nazhatie=0;
setTimeout(repeat,100);

function govorit(){
PlayVisemes('2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342');
SetEmotion('joy');
govorilka = setTimeout(govorit,1500);
};

function repeat(){
if(nazhatie==500){
govorit();
zatknis();
} else setTimeout(repeat,100)
};

function zatknis(){
if(nazhatie==0){
clearTimeout(govorilka);
PlayVisemes('0,50');
repeat();
}
else setTimeout(zatknis,100);
};

function pressdown(){
nazhatie=500};

function pressup(){
nazhatie=0};

document.onkeydown=pressdown;
document.onkeyup=pressup;
</script>

KNeaDeD 12.05.2015 16:48

Мне получается нужно убрать: document.onkeyup=pressup; это сто пудово, а что взамен?

Пробовал изменить pressdown:
function pressdown(){
nazhatie=500;
setTimeout(pressup,200)};

Но тогда он при зажатии клавиши запускает дофигищще pressup и каждая через 200 мсек, т.е. ваще фигня получается.
А что если вместо setTimeout(pressup,200)
заменить на otmena = setTimeout(pressup,200)

т.е. есть конкретная переменная "otmena", которая не запускается 100500 тыщ раз, а которая заменяет сама себя до тех пор, пока зажата клавиша.
Правильно ли я понимаю? Или же - что еще можете предложить?

KNeaDeD 12.05.2015 18:56

Блин, от вас пока дождешься ответа...
Тот вопрос уже решил путем, указанный ниже. Теперь у меня другой вопрос. Как сократить то время, пока компьютер поймет, что клавиша не просто нажата, а ЗАЖАТА?
Я реализовал так - при зажатии любой клавиши действует onkeydown, происходит действие. НО! Пока компьютер поймет, что клавиша зажата, проходит еще какое-то время (0,5 сек). Как это время сократить?

Для тех, кто в будущем зайдет на этот сайт, вот конечный результат:

var nazhatie=0;
setTimeout(repeat,100);
otmena = setTimeout(pressup,100);

function govorit(){
PlayVisemes('2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342,2,88,19,32,19,25,5,70,20,31,2,91,15,7 7,1,94,5,342');
SetEmotion('joy');
govorilka = setTimeout(govorit,1500);
};

function repeat(){
if(nazhatie==500){
govorit();
zatknis();
} else setTimeout(repeat,100)
};

function zatknis(){
if(nazhatie==0){
clearTimeout(govorilka);
PlayVisemes('0,50');
repeat();
}
else setTimeout(zatknis,100);
};

function pressdown(){
nazhatie=500;
clearTimeout(otmena);
otmena = setTimeout(pressup,100);};

function pressup(){
nazhatie=0};

document.onkeydown=pressdown;


Часовой пояс GMT +3, время: 15:01.