[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Совершение действия при удерживании клавиши
BorodinKO
Пишу приложение на js где можно перемещать объект по сцене при помощи клавиш left(37) right(39):

document.body.onkeydown = function(){
if(event.keyCode==37){x-=20;}
if(event.keyCode==39){x+=20;}
}


Но разные браузеры как всегда думают по разному и opera не понимает что при удерживании клавиши нужно повторять функцию, а остальные браузеры сразу при нажатии выполняют действия а после примерно через 0.5сек повторяют функцию циклом.

Как сделать ток чтобы при удерживании клавиши сразу выполнялось повторение функции, и работало на всех браузерах идентично?



Спустя 10 минут, 5 секунд (25.06.2011 - 23:24) Invis1ble написал(а):
BorodinKO
попробуй с помощью jQuery (или чего-нибудь аналогичного) события перехватывать

Спустя 32 минуты, 41 секунда (25.06.2011 - 23:57) BorodinKO написал(а):
нет, я не хочу использовать различные библиотеки, мне нужно решение чисто на JS

Спустя 8 часов, 6 минут, 6 секунд (26.06.2011 - 08:03) ApuktaChehov написал(а):
BorodinKO я бы на вашем месте загнал нужную функция в цикл. Который начнет работать по событию onmousedown и прекратит работу по событию onmouseup.
Определяете нужная ли кнопка была нажата, запускаете функцию, ждете пока эту же кнопку не отпустят. А пока не отпустили, выполняете функцию.

Спустя 7 часов, 46 минут, 43 секунды (26.06.2011 - 15:50) BorodinKO написал(а):
при чем тут onmouseup ?
речь идет про клавиши left & right.

Спустя 3 минуты, 41 секунда (26.06.2011 - 15:53) Winston написал(а):
Попробуй циклом while, при удержании выполнять повтор

Спустя 1 час, 22 минуты, 19 секунд (26.06.2011 - 17:16) ApuktaChehov написал(а):
BorodinKO - опа пардон. Я хотел сказать onkeydown и onkeyup

Спустя 1 день, 6 часов, 21 минута, 14 секунд (27.06.2011 - 23:37) BorodinKO написал(а):
проблему решил:

<script>

var flag = 0
var x = 0
var PRESS_LEFT = 1 << 0
var PRESS_RIGHT = 1 << 1

function addFlag(f)
{
flag |= f
}

function removeFlag(f)
{
flag &= ~f
}

function isFlag(f)
{
return (flag & f) == f
}

function run()
{
if (isFlag(PRESS_LEFT)) x -= 20
if (isFlag(PRESS_RIGHT)) x += 20
document.getElementById('res').innerHTML = x
}

window.onload = function()
{
document.onkeydown = function(e)
{
if (e.keyCode==37) addFlag(PRESS_LEFT)
if (e.keyCode==39) addFlag(PRESS_RIGHT)
}

document.onkeyup = function(e)
{
if (e.keyCode==37) removeFlag(PRESS_LEFT)
if (e.keyCode==39) removeFlag(PRESS_RIGHT)
}

setInterval(run, 10)
}

</script>
<
body>
<
div id="res"></div>
</
body>

Спустя 8 часов, 39 минут, 59 секунд (28.06.2011 - 08:17) ApuktaChehov написал(а):
А что значит вот такой вот синтаксис: 1 << 0 ?

Спустя 3 минуты, 30 секунд (28.06.2011 - 08:20) Invis1ble написал(а):
Цитата
А что значит вот такой вот синтаксис: 1 << 0 ?

Если не ошибаюсь, побитовый сдвиг влево, нет? unsure.gif

Спустя 3 часа, 47 минут, 13 секунд (28.06.2011 - 12:08) ApuktaChehov написал(а):
ApuktaChehov - а я ведь знал! ph34r.gif

Спустя 6 минут, 12 секунд (28.06.2011 - 12:14) Winston написал(а):
Цитата (ApuktaChehov @ 28.06.2011 - 12:08)
ApuktaChehov - а я ведь знал

huh.gif
Сам себе отвечаешь? smile.gif

Спустя 43 минуты, 56 секунд (28.06.2011 - 12:58) sharki написал(а):
Мне вот кажется что он скомуниздил скрипт где-то и тут выложил. Если он спрашивал про элементарные вещи, а тут еще и побитовое двиганье О_О откуда???

Спустя 51 минута, 14 секунд (28.06.2011 - 13:49) ApuktaChehov написал(а):
sharki - согласен
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.