Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.6/rx.all.js"></script>
  <script src="https://rawgit.com/cyclejs/cycle-core/v6.0.0/dist/cycle.js"></script>
  <script src="https://rawgit.com/cyclejs/cycle-dom/v9.0.1/dist/cycle-dom.js"></script>
  <script src="https://rawgit.com/cyclejs/cycle-http-driver/v7.0.0/dist/cycle-http-driver.min.js"></script>
</head>
<body>
<div id="app">
</div>
</body>
</html>
 
const {div, label, input, h2, makeDOMDriver } = CycleDOM;
function main(sources) {
  const weightChange$ = sources.DOM.select('.weight').events('input').map(evt => evt.target.value);
  const heightChange$ = sources.DOM.select('.height').events('input').map(evt => evt.target.value);
  const bmi$ = Rx.Observable.combineLatest(
                  weightChange$.startWith(70), 
                  heightChange$.startWith(170), 
                  (weight, height) => {
                    const heightMeters = height * 0.01;
                    const bmi = Math.round(weight / (heightMeters * heightMeters));
                    return {bmi, weight, height};
                  });
  return {
    DOM: bmi$.map(({bmi, weight, height}) => 
           div([
             div([
               label(`Weight: ${weight} kg`),
               input('.weight', {type: 'range', min: 40, max: 150, value: weight})
             ]),
             div([
               label(`Height: ${height} cm`),
               input('.height', {type: 'range', min: 140, max: 220, value: height})
             ]),
             h2(`BMI is ${bmi}`)
           ]))
  };
}
const drivers = {
  DOM: makeDOMDriver('#app')
};
Cycle.run(main, drivers);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
yoyoyohamapipro
0viewers