| OLD | NEW |
| 1 <!-- | 1 <!-- |
| 2 @license |
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | 3 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.g
ithub.io/LICENSE.txt | 4 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt |
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | 5 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/CONTRI
BUTORS.txt | 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt |
| 6 Code distributed by Google as part of the polymer project is also | 7 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/PATEN
TS.txt | 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt |
| 8 --> | 9 --> |
| 9 | 10 |
| 10 <link rel="import" href="../polymer/polymer.html"> | 11 <link rel="import" href="../polymer/polymer.html"> |
| 11 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
"> | 12 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
"> |
| (...skipping 18 matching lines...) Expand all Loading... |
| 30 effect when touches on it. You can also defeat the default behavior and | 31 effect when touches on it. You can also defeat the default behavior and |
| 31 manually route the down and up actions to the ripple element. Note that it is | 32 manually route the down and up actions to the ripple element. Note that it is |
| 32 important if you call `downAction()` you will have to make sure to call | 33 important if you call `downAction()` you will have to make sure to call |
| 33 `upAction()` so that `paper-ripple` would end the animation loop. | 34 `upAction()` so that `paper-ripple` would end the animation loop. |
| 34 | 35 |
| 35 Example: | 36 Example: |
| 36 | 37 |
| 37 <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple> | 38 <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple> |
| 38 ... | 39 ... |
| 39 downAction: function(e) { | 40 downAction: function(e) { |
| 40 this.$.ripple.downAction({x: e.x, y: e.y}); | 41 this.$.ripple.downAction({detail: {x: e.x, y: e.y}}); |
| 41 }, | 42 }, |
| 42 upAction: function(e) { | 43 upAction: function(e) { |
| 43 this.$.ripple.upAction(); | 44 this.$.ripple.upAction(); |
| 44 } | 45 } |
| 45 | 46 |
| 46 Styling ripple effect: | 47 Styling ripple effect: |
| 47 | 48 |
| 48 Use CSS color property to style the ripple: | 49 Use CSS color property to style the ripple: |
| 49 | 50 |
| 50 paper-ripple { | 51 paper-ripple { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 68 <paper-ripple class="circle"></paper-ripple> | 69 <paper-ripple class="circle"></paper-ripple> |
| 69 | 70 |
| 70 @group Paper Elements | 71 @group Paper Elements |
| 71 @element paper-ripple | 72 @element paper-ripple |
| 72 @hero hero.svg | 73 @hero hero.svg |
| 73 @demo demo/index.html | 74 @demo demo/index.html |
| 74 --> | 75 --> |
| 75 | 76 |
| 76 <dom-module id="paper-ripple"> | 77 <dom-module id="paper-ripple"> |
| 77 | 78 |
| 78 <!-- | |
| 79 Fired when the animation finishes. This is useful if you want to wait until th
e ripple | |
| 80 animation finishes to perform some action. | |
| 81 | |
| 82 @event transitionend | |
| 83 @param {Object} detail | |
| 84 @param {Object} detail.node The animated node | |
| 85 --> | |
| 86 | |
| 87 <template> | 79 <template> |
| 88 <style> | 80 <style> |
| 89 :host { | 81 :host { |
| 90 display: block; | 82 display: block; |
| 91 position: absolute; | 83 position: absolute; |
| 92 border-radius: inherit; | 84 border-radius: inherit; |
| 93 overflow: hidden; | 85 overflow: hidden; |
| 94 top: 0; | 86 top: 0; |
| 95 left: 0; | 87 left: 0; |
| 96 right: 0; | 88 right: 0; |
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 | 544 |
| 553 _boundAnimate: { | 545 _boundAnimate: { |
| 554 type: Function, | 546 type: Function, |
| 555 value: function() { | 547 value: function() { |
| 556 return this.animate.bind(this); | 548 return this.animate.bind(this); |
| 557 } | 549 } |
| 558 } | 550 } |
| 559 }, | 551 }, |
| 560 | 552 |
| 561 get target () { | 553 get target () { |
| 562 var ownerRoot = Polymer.dom(this).getOwnerRoot(); | 554 return this.keyEventTarget; |
| 563 var target; | |
| 564 | |
| 565 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE | |
| 566 target = ownerRoot.host; | |
| 567 } else { | |
| 568 target = this.parentNode; | |
| 569 } | |
| 570 | |
| 571 return target; | |
| 572 }, | 555 }, |
| 573 | 556 |
| 574 keyBindings: { | 557 keyBindings: { |
| 575 'enter:keydown': '_onEnterKeydown', | 558 'enter:keydown': '_onEnterKeydown', |
| 576 'space:keydown': '_onSpaceKeydown', | 559 'space:keydown': '_onSpaceKeydown', |
| 577 'space:keyup': '_onSpaceKeyup' | 560 'space:keyup': '_onSpaceKeyup' |
| 578 }, | 561 }, |
| 579 | 562 |
| 580 attached: function() { | 563 attached: function() { |
| 581 // Set up a11yKeysBehavior to listen to key events on the target, | 564 // Set up a11yKeysBehavior to listen to key events on the target, |
| 582 // so that space and enter activate the ripple even if the target doesn'
t | 565 // so that space and enter activate the ripple even if the target doesn'
t |
| 583 // handle key events. The key handlers deal with `noink` themselves. | 566 // handle key events. The key handlers deal with `noink` themselves. |
| 584 this.keyEventTarget = this.target; | 567 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE |
| 585 this.listen(this.target, 'up', 'uiUpAction'); | 568 this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host; |
| 586 this.listen(this.target, 'down', 'uiDownAction'); | 569 } else { |
| 570 this.keyEventTarget = this.parentNode; |
| 571 } |
| 572 var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget); |
| 573 this.listen(keyEventTarget, 'up', 'uiUpAction'); |
| 574 this.listen(keyEventTarget, 'down', 'uiDownAction'); |
| 587 }, | 575 }, |
| 588 | 576 |
| 589 detached: function() { | 577 detached: function() { |
| 590 this.unlisten(this.target, 'up', 'uiUpAction'); | 578 this.unlisten(this.keyEventTarget, 'up', 'uiUpAction'); |
| 591 this.unlisten(this.target, 'down', 'uiDownAction'); | 579 this.unlisten(this.keyEventTarget, 'down', 'uiDownAction'); |
| 580 this.keyEventTarget = null; |
| 592 }, | 581 }, |
| 593 | 582 |
| 594 get shouldKeepAnimating () { | 583 get shouldKeepAnimating () { |
| 595 for (var index = 0; index < this.ripples.length; ++index) { | 584 for (var index = 0; index < this.ripples.length; ++index) { |
| 596 if (!this.ripples[index].isAnimationComplete) { | 585 if (!this.ripples[index].isAnimationComplete) { |
| 597 return true; | 586 return true; |
| 598 } | 587 } |
| 599 } | 588 } |
| 600 | 589 |
| 601 return false; | 590 return false; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 629 downAction: function(event) { | 618 downAction: function(event) { |
| 630 if (this.holdDown && this.ripples.length > 0) { | 619 if (this.holdDown && this.ripples.length > 0) { |
| 631 return; | 620 return; |
| 632 } | 621 } |
| 633 | 622 |
| 634 var ripple = this.addRipple(); | 623 var ripple = this.addRipple(); |
| 635 | 624 |
| 636 ripple.downAction(event); | 625 ripple.downAction(event); |
| 637 | 626 |
| 638 if (!this._animating) { | 627 if (!this._animating) { |
| 628 this._animating = true; |
| 639 this.animate(); | 629 this.animate(); |
| 640 } | 630 } |
| 641 }, | 631 }, |
| 642 | 632 |
| 643 /** | 633 /** |
| 644 * Provokes a ripple up effect via a UI event, | 634 * Provokes a ripple up effect via a UI event, |
| 645 * respecting the `noink` property. | 635 * respecting the `noink` property. |
| 646 * @param {Event=} event | 636 * @param {Event=} event |
| 647 */ | 637 */ |
| 648 uiUpAction: function(event) { | 638 uiUpAction: function(event) { |
| 649 if (!this.noink) { | 639 if (!this.noink) { |
| 650 this.upAction(event); | 640 this.upAction(event); |
| 651 } | 641 } |
| 652 }, | 642 }, |
| 653 | 643 |
| 654 /** | 644 /** |
| 655 * Provokes a ripple up effect via a UI event, | 645 * Provokes a ripple up effect via a UI event, |
| 656 * *not* respecting the `noink` property. | 646 * *not* respecting the `noink` property. |
| 657 * @param {Event=} event | 647 * @param {Event=} event |
| 658 */ | 648 */ |
| 659 upAction: function(event) { | 649 upAction: function(event) { |
| 660 if (this.holdDown) { | 650 if (this.holdDown) { |
| 661 return; | 651 return; |
| 662 } | 652 } |
| 663 | 653 |
| 664 this.ripples.forEach(function(ripple) { | 654 this.ripples.forEach(function(ripple) { |
| 665 ripple.upAction(event); | 655 ripple.upAction(event); |
| 666 }); | 656 }); |
| 667 | 657 |
| 658 this._animating = true; |
| 668 this.animate(); | 659 this.animate(); |
| 669 }, | 660 }, |
| 670 | 661 |
| 671 onAnimationComplete: function() { | 662 onAnimationComplete: function() { |
| 672 this._animating = false; | 663 this._animating = false; |
| 673 this.$.background.style.backgroundColor = null; | 664 this.$.background.style.backgroundColor = null; |
| 674 this.fire('transitionend'); | 665 this.fire('transitionend'); |
| 675 }, | 666 }, |
| 676 | 667 |
| 677 addRipple: function() { | 668 addRipple: function() { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 696 this.ripples.splice(rippleIndex, 1); | 687 this.ripples.splice(rippleIndex, 1); |
| 697 | 688 |
| 698 ripple.remove(); | 689 ripple.remove(); |
| 699 | 690 |
| 700 if (!this.ripples.length) { | 691 if (!this.ripples.length) { |
| 701 this._setAnimating(false); | 692 this._setAnimating(false); |
| 702 } | 693 } |
| 703 }, | 694 }, |
| 704 | 695 |
| 705 animate: function() { | 696 animate: function() { |
| 697 if (!this._animating) { |
| 698 return; |
| 699 } |
| 706 var index; | 700 var index; |
| 707 var ripple; | 701 var ripple; |
| 708 | 702 |
| 709 this._animating = true; | |
| 710 | |
| 711 for (index = 0; index < this.ripples.length; ++index) { | 703 for (index = 0; index < this.ripples.length; ++index) { |
| 712 ripple = this.ripples[index]; | 704 ripple = this.ripples[index]; |
| 713 | 705 |
| 714 ripple.draw(); | 706 ripple.draw(); |
| 715 | 707 |
| 716 this.$.background.style.opacity = ripple.outerOpacity; | 708 this.$.background.style.opacity = ripple.outerOpacity; |
| 717 | 709 |
| 718 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { | 710 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { |
| 719 this.removeRipple(ripple); | 711 this.removeRipple(ripple); |
| 720 } | 712 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 745 _holdDownChanged: function(newVal, oldVal) { | 737 _holdDownChanged: function(newVal, oldVal) { |
| 746 if (oldVal === undefined) { | 738 if (oldVal === undefined) { |
| 747 return; | 739 return; |
| 748 } | 740 } |
| 749 if (newVal) { | 741 if (newVal) { |
| 750 this.downAction(); | 742 this.downAction(); |
| 751 } else { | 743 } else { |
| 752 this.upAction(); | 744 this.upAction(); |
| 753 } | 745 } |
| 754 } | 746 } |
| 747 |
| 748 /** |
| 749 Fired when the animation finishes. |
| 750 This is useful if you want to wait until |
| 751 the ripple animation finishes to perform some action. |
| 752 |
| 753 @event transitionend |
| 754 @param {{node: Object}} detail Contains the animated node. |
| 755 */ |
| 755 }); | 756 }); |
| 756 })(); | 757 })(); |
| 757 </script> | 758 </script> |
| OLD | NEW |