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 (или чего-нибудь аналогичного) события перехватывать
попробуй с помощью 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.
речь идет про клавиши 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 ? |
Если не ошибаюсь, побитовый сдвиг влево, нет?

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

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

Сам себе отвечаешь?

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