Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <script src="https://rawgit.com/cyclejs/cycle-core/v1.0.0/dist/cycle.min.js"></script>
  <script src="https://rawgit.com/cyclejs/cycle-web/v1.0.0/dist/cycle-web.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>
 
const {Rx} = Cycle;
const {h, makeDOMDriver} = CycleWeb;
function main({DOM}) {
  let changeWeight$ = DOM.get('#weight', 'input')
    .map(ev => ev.target.value);
  let changeHeight$ = DOM.get('#height', 'input')
    .map(ev => ev.target.value);
  let state$ = Cycle.Rx.Observable.combineLatest(
    changeWeight$.startWith(70),
    changeHeight$.startWith(170),
    (weight, height) => {
      const heightMeters = height * 0.01;
      const bmi = Math.round(weight / (heightMeters * heightMeters));
      return {weight, height, bmi};
    }
  );
  return {
    DOM: state$.map(({weight, height, bmi}) =>
      h('div', [
        h('div', [
          'Weight ' + weight + 'kg',
          h('input#weight', {type: 'range', min: 40, max: 140, value: weight})
        ]),
        h('div', [
          'Height ' + height + 'cm',
          h('input#height', {type: 'range', min: 140, max: 210, value: height})
        ]),
        h('h2', 'BMI is ' + bmi)
      ])
    )
  };
}
Cycle.run(main, {
  DOM: makeDOMDriver('#app')
});
Output 300px

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

Dismiss x
public
Bin info
staltzpro
0viewers