我想開始學習Rx.js,我正在尋找一個很酷的例子來開始滾球。如何使用Rx.js檢測konami code?如何使用Rx.js(javascript的被動擴展)檢測konami代碼?
我想要檢測一系列按鍵事件(上下左下左右B A),並在出現這種情況時顯示圖像。
我想開始學習Rx.js,我正在尋找一個很酷的例子來開始滾球。如何使用Rx.js檢測konami code?如何使用Rx.js(javascript的被動擴展)檢測konami代碼?
我想要檢測一系列按鍵事件(上下左下左右B A),並在出現這種情況時顯示圖像。
這裏是我的版本:
<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
,然後用BufferWithCount
收集10個按鍵,然後使用Where
檢查按鍵。
我試過使用BufferWithTime,但它往往會在按鍵中間切入。
如果有人可以提出改進意見,我很樂意聽取他們的意見。
我不想因爲你正在學習而破壞你的答案,但我會嘗試將問題想象爲:「我怎樣才能將Key up事件轉換成序列最後10 最近被按下的字符「,並將該列表與」UUDDLRLRBA「的常數列表進行比較。 (提示:緩衝區,其中,選擇,拿,重複是你的朋友在這裏)
其實我不介意破壞者:)但是,它不會那麼有趣。感謝提示! – 2010-12-08 10:22:46
我知道它的工作原理,但它不使用`Take`或`Repeat`。在這種情況下你將如何使用Take和Repeat? – 2010-12-09 16:55:44
偉大的問題:) – 2010-12-08 05:19:09