Как обнаружить код конами с помощью Rx.js (реактивные расширения для javascript)? - PullRequest
8 голосов
/ 02 декабря 2010

Я хочу начать учиться Rx.js , и я ищу крутой пример, чтобы начать катиться.Как мне определить код конами с помощью Rx.js?

Я хочу определить последовательность событий нажатия клавиш (вверх, вниз, вниз, вправо, влево, вправо BA) и показать изображение, если этослучается.

Ответы [ 2 ]

7 голосов
/ 08 декабря 2010

Вот моя версия:

<html>
<head>
<script type="text/javascript" src="jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="rx.js"></script>
<script type="text/javascript" src="rx.jQuery.js"></script>
</head>
<body>
<p id="result"></p>
<script type="text/javascript">
    $(function() {
        var konami = $(document).toObservable("keyup").Select(function(e) {
            return e.keyCode
        }).SkipWhile(function(k) {
            return (k != 38)
        }).BufferWithCount(
            10
        ).Where(function(ks) {
            return ks.length == 10 &&
                ks[0] == 38 && ks[1] == 38 &&
                ks[2] == 40 && ks[3] == 40 &&
                ks[4] == 37 && ks[5] == 39 &&
                ks[6] == 37 && ks[7] == 39 &&
                ks[8] == 66 && ks[9] == 65
        })

        var konamisub = konami.Subscribe(function(e) {
            $("#result").text("KONAMI!")
            $("#result").fadeIn().fadeOut()
        })
    })
</script>
</body>
</html>

Я преобразую поток событий keyup в поток кодов клавиш с помощью Select, затем игнорирую нажатия клавиш до тех пор, пока пользователь не нажмет вверх (код клавиши 38) с помощью SkipWhile, затем собираем 10 нажатий клавиш с помощью BufferWithCount, затем проверяем нажатия клавиш с помощью Where.

Я пытался использовать BufferWithTime, но он имеет тенденцию сокращаться в середине нажатий клавиш.* Если кто-то может предложить улучшения, я хотел бы услышать их.

1 голос
/ 08 декабря 2010

Я не хочу испортить вам ответ, так как вы учитесь, но я постараюсь представить проблему следующим образом: «Как я могу преобразовать событие Key up в последовательность из последние 10 символов, которые были недавно нажатыми », и сравните этот список с постоянным списком« UUDDLRLRBA ». (Подсказка: Буфер, Где, Выберите, Возьмите, Повторите, ваши друзья здесь)

...