Skip to content

Instantly share code, notes, and snippets.

@jiverson
Created February 26, 2017 07:05
Show Gist options
  • Save jiverson/5c74fee6882f67a33ec639fc07a9b762 to your computer and use it in GitHub Desktop.
Save jiverson/5c74fee6882f67a33ec639fc07a9b762 to your computer and use it in GitHub Desktop.
JS Bin Rxjs Toggle Button // source https://jsbin.com/jiyosu
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Rxjs Toggle Button">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://unpkg.com/@reactivex/rxjs@5.0.3/dist/global/Rx.js"></script>
<style id="jsbin-css">
.panel {
margin-top: 1em;
color: #fff;
font-family: sans-serif;
display: block;
padding: 1em;
background: red;
}
</style>
</head>
<body>
<button class="toggleButton">Toggle panel</button>
<div class="panel">Hi, I'm a toggleable panel</div>
<script id="jsbin-javascript">
'use strict';
var toggleButton = document.querySelector('.toggleButton');
var toggleablePanel = document.querySelector('.panel');
var buttonInitialState = false;
var clicks = Rx.Observable.fromEvent(toggleButton, 'click');
var toggleState = function toggleState(currentState) {
return !currentState;
};
var toggle = clicks.scan(toggleState, buttonInitialState).startWith(buttonInitialState);
toggle.subscribe(function (show) {
toggleablePanel.style.display = show ? 'block' : 'none';
});
</script>
<script id="jsbin-source-css" type="text/css">.panel {
margin-top: 1em;
color: #fff;
font-family: sans-serif;
display: block;
padding: 1em;
background: red;
}</script>
<script id="jsbin-source-javascript" type="text/javascript">const toggleButton = document.querySelector('.toggleButton');
const toggleablePanel = document.querySelector('.panel');
const buttonInitialState = false;
const clicks = Rx.Observable.fromEvent(toggleButton, 'click');
const toggleState = currentState => !currentState;
const toggle = clicks
.scan(toggleState,buttonInitialState)
.startWith(buttonInitialState);
toggle.subscribe ((show) => {
toggleablePanel.style.display = show ? 'block' : 'none';
});</script></body>
</html>
.panel {
margin-top: 1em;
color: #fff;
font-family: sans-serif;
display: block;
padding: 1em;
background: red;
}
'use strict';
var toggleButton = document.querySelector('.toggleButton');
var toggleablePanel = document.querySelector('.panel');
var buttonInitialState = false;
var clicks = Rx.Observable.fromEvent(toggleButton, 'click');
var toggleState = function toggleState(currentState) {
return !currentState;
};
var toggle = clicks.scan(toggleState, buttonInitialState).startWith(buttonInitialState);
toggle.subscribe(function (show) {
toggleablePanel.style.display = show ? 'block' : 'none';
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment