[RxJS] Wrap up
Last thing to do is clean the score box and input, also auto foucs on input when click start.
- const starters$ = Observable.merge(
- start$.mapTo(1000),
- half$.mapTo(500),
- quarter$.mapTo(250)
- );
- // Clear the score box input and focus on input
- starters$.subscribe( () => {
- document.querySelector('#score').innerHTML = "";
- input.value = "";
- input.focus();
- })
--------------------------
- const Observable = Rx.Observable;
- const startButton = document.querySelector('#start');
- const halfButton = document.querySelector('#half');
- const quarterButton = document.querySelector('#quarter');
- const stopButton = document.querySelector('#stop');
- const resetButton = document.querySelector('#reset');
- const input = document.querySelector('#input');
- const start$ = Observable.fromEvent(startButton, 'click');
- const half$ = Observable.fromEvent(halfButton, 'click');
- const quarter$ = Observable.fromEvent(quarterButton, 'click');
- const stop$ = Observable.fromEvent(stopButton, 'click');
- const reset$ = Observable.fromEvent(resetButton, 'click');
- const input$ = Observable.fromEvent(input, 'input')
- .map(event => event.target.value);
- const data = {count:0};
- const inc = (acc)=> ({count: acc.count + 1});
- const reset = (acc)=> data;
- const starters$ = Observable.merge(
- start$.mapTo(1000),
- half$.mapTo(500),
- quarter$.mapTo(250)
- );
- // Clear the score box input and focus on input
- starters$.subscribe( () => {
- document.querySelector('#score').innerHTML = "";
- input.value = "";
- input.focus();
- })
- const intervalActions = (time)=> Observable.merge(
- Observable.interval(time)
- .takeUntil(stop$).mapTo(inc),
- reset$.mapTo(reset)
- );
- const timer$ = starters$
- .switchMap(intervalActions)
- .startWith(data)
- .scan((acc, curr)=> curr(acc))
- const runningGame$ = timer$
- .do((x)=> console.log(x))
- .takeWhile((data)=> data.count <= 3)
- .withLatestFrom(
- input$.do((x)=> console.log(x)),
- (timer, input)=> ({count: timer.count, text: input})
- )
- .share();
- // To clean the input
- runningGame$
- .repeat()
- .subscribe( (x) => input.value = "");
- runningGame$
- .filter((data)=> data.count === parseInt(data.text))
- .reduce((acc, curr)=> acc + 1, 0)
- .repeat()
- .subscribe(
- (x)=> document.querySelector('#score').innerHTML = `
- ${x}
- `,
- err=> console.log(err),
- ()=> console.log('complete')
- );
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width">
- <script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.1/dist/global/Rx.umd.js"></script>
- <title>JS Bin</title>
- </head>
- <body>
- <button id="start">Start</button>
- <button id="half">Half</button>
- <button id="quarter">Quarter</button>
- <button id="stop">Stop</button>
- <button id="reset">Reset</button>
- <hr>
- <input type="text" id="input">
- <div>Score: <span id="score"></span></div>
- </body>
- </html>
[RxJS] Wrap up的更多相关文章
- [Vue-rx] Cache Remote Data Requests with RxJS and Vue.js
A Promise invokes a function which stores a value that will be passed to a callback. So when you wra ...
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- RxJS + Redux + React = Amazing!(译二)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...
- jQuery之常用且重要方法梳理(siblings,nextAll,end,wrap,apply,call,each)-(二)
1.siblings() siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的. <body> <div><span>Hello</ ...
- [译]RxJS 5.X基础篇
欢迎指错与讨论 : ) 当前RxJS版本:5.0.0-beta.10.更详细的内容尽在RxJS官网http://reactivex.io/rxjs/manual/overview.html.文章比较长 ...
- [转载]jQuery中wrap、wrapAll和wrapInner用法以及区别
原文地址:jQuery中wrap.wrapAll和wrapInner用法以及区别作者:伊少君 原文: <ul> <li title='苹果'>苹果</li> ...
- 学习RxJS: 导入
原文地址:http://www.moye.me/2016/05/31/learning_rxjs_part_one_preliminary/ 引子 新手们在异步编程里跌倒时,永远会有这么一个经典问题: ...
- 【golang】go语言,进行并发请求的wrap变参封装
package main import ( "fmt" "sync" "time" ) type WaitGroupWrapper stru ...
- jquery之wrap(),wrap(),unwrap()方法详解
[注]wrap():为每个匹配元素外面添加指定的HTML结构, wrapAll(): 为所有匹配元素(作为一个整体)外面添加一个指定的HTML结构 原文地址:http://www.365mini.co ...
随机推荐
- 自定义PopupWindow动画效果
public class RollActivity extends Activity { private View view; private Button btn; private PopupWin ...
- XAML 命名空间和命名空间映射
本主题将介绍大部分 XAML 文件的根元素中存在的 XML/XAML 命名空间 (xmlns) 映射.它还将介绍如何为自定义类型和程序集生成类似的映射. XAML 命名空间如何与代码定义和类型库相关 ...
- Oracle 11g XML java连接
在网上找了好多教程 走好好多弯路 现在从头总结下 oralce11g 可以直接用xmltype节点存储xml文件 简单来说就是直接存一个文件进去 首先安装oracle11g 网上教程非常多 然后进Ne ...
- java中包的应用
Do2.java package mypack; class Do2 { public static void main(String[] args) { packa.Do3 d=new packa. ...
- Matlab 取子矩阵
MATLAB如何提取矩阵的子块 在matlab中如何提取一个矩阵的部分元素 1.提取大矩阵的一列.一行元素: 一列元素: A(:,j)表示提取A矩阵的第j列全部元素 一行元素: A(i,:)表示提 ...
- mysql 5.7.9(GA) 安装
mysql 5.7.9(GA) 终于发布了,感受一下. 一.下载 下载页面 http://dev.mysql.com/downloads/mysql/ 选择相应系统的版本下载. 本文OS为centos ...
- 在git bush中如何退出vim编辑器
写npm的pakege.json文件的files配置时,如果有不想包含的文件,那就要创建.npmignore文件排除,但windows系统又不允许创建以点开头命名的文件,咋办? 这时候就要用到linu ...
- jQuery对下拉框、单选框、多选框的处理
下拉框: //得到下拉菜单的选中项的文本(注意中间有空格) var cc1 = $(".formc select[@name='country'] option[@selected]&quo ...
- centos6 安装 lamp
首先更新一下yum -y update 安装Apache yum install httpd httpd-devel 安装完成后,用/etc/init.d/httpd start 启动apache 设 ...
- iOS知识点全梳理-备用
感谢大神分享 文/Jack_lin(简书作者)原文链接:http://www.jianshu.com/p/5d2163640e26著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序言 ...