1 <!-- 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 Code distributed by Google as part of the polymer project is also 7 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 --> 9 10 <!-- 11 `paper-toggle-button` provides a ON/OFF switch that user can toggle the state 12 by tapping or by dragging the swtich. 13 14 Example: 15 16 <paper-toggle-button></paper-toggle-button> 17 18 Styling toggle button: 19 20 To change the ink color for checked state: 21 22 paper-toggle-button::shadow paper-radio-button::shadow #ink[checked] { 23 color: #4285f4; 24 } 25 26 To change the radio checked color: 27 28 paper-toggle-button::shadow paper-radio-button::shadow #onRadio { 29 background-color: #4285f4; 30 } 31 32 To change the bar color for checked state: 33 34 paper-toggle-button::shadow #toggleBar[checked] { 35 background-color: #4285f4; 36 } 37 38 To change the ink color for unchecked state: 39 40 paper-toggle-button::shadow paper-radio-button::shadow #ink { 41 color: #b5b5b5; 42 } 43 44 To change the radio unchecked color: 45 46 paper-toggle-button::shadow paper-radio-button::shadow #offRadio { 47 border-color: #b5b5b5; 48 } 49 50 To change the bar color for unchecked state: 51 52 paper-toggle-button::shadow #toggleBar { 53 background-color: red; 54 } 55 56 @group Paper Elements 57 @element paper-toggle-button 58 @homepage github.io 59 --> 60 61 <link rel="import" href="../paper-radio-button/paper-radio-button.html"> 62 63 <polymer-element name="paper-toggle-button" attributes="checked" role="button" aria-pressed="false" tabindex="0"> 64 <template> 65 66 <link rel="stylesheet" href="paper-toggle-button.css"> 67 68 <div id="toggleContainer"> 69 70 <div id="toggleBar" checked?="{{checked}}"></div> 71 72 <paper-radio-button id="toggleRadio" toggles checked="{{checked}}" 73 on-trackstart="{{trackStart}}" on-trackx="{{trackx}}" on-trackend="{{trackEnd}}"></paper-radio-button> 74 75 </div> 76 77 </template> 78 <script> 79 80 Polymer('paper-toggle-button', { 81 82 /** 83 * Fired when the checked state changes. 84 * 85 * @event change 86 */ 87 88 /** 89 * Gets or sets the state, `true` is checked and `false` is unchecked. 90 * 91 * @attribute checked 92 * @type boolean 93 * @default false 94 */ 95 checked: false, 96 97 trackStart: function(e) { 98 this._w = this.$.toggleBar.offsetLeft + this.$.toggleBar.offsetWidth; 99 e.preventTap(); 100 }, 101 102 trackx: function(e) { 103 this._x = Math.min(this._w, 104 Math.max(0, this.checked ? this._w + e.dx : e.dx)); 105 this.$.toggleRadio.classList.add('dragging'); 106 var s = this.$.toggleRadio.style; 107 s.webkitTransform = s.transform = 'translate3d(' + this._x + 'px,0,0)'; 108 }, 109 110 trackEnd: function() { 111 var s = this.$.toggleRadio.style; 112 s.webkitTransform = s.transform = null; 113 this.$.toggleRadio.classList.remove('dragging'); 114 this.checked = Math.abs(this._x) > this._w / 2; 115 }, 116 117 checkedChanged: function() { 118 this.setAttribute('aria-pressed', Boolean(this.checked)); 119 this.fire('change'); 120 } 121 122 }); 123 124 </script> 125 </polymer-element> 126