Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: lib/src/paper-ripple/paper-ripple.html

Issue 1418513006: update elements and fix some bugs (Closed) Base URL: git@github.com:dart-lang/polymer_elements.git@master
Patch Set: code review updates Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/paper-radio-group/test/basic.html ('k') | lib/src/paper-ripple/test/paper-ripple.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/paper-ripple/paper-ripple.html
diff --git a/lib/src/paper-ripple/paper-ripple.html b/lib/src/paper-ripple/paper-ripple.html
index 2c8e4fb42658ed493bd9f77b58a919c238bd5a13..6c0b79bef61d63d9b292a3bff1e7786221c10786 100644
--- a/lib/src/paper-ripple/paper-ripple.html
+++ b/lib/src/paper-ripple/paper-ripple.html
@@ -11,19 +11,26 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
<!--
+Material design: [Surface reaction](https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-reaction)
+
`paper-ripple` provides a visual effect that other paper elements can
use to simulate a rippling effect emanating from the point of contact. The
effect can be visualized as a concentric circle with motion.
Example:
- <paper-ripple></paper-ripple>
+ <div style="position:relative">
+ <paper-ripple></paper-ripple>
+ </div>
+
+Note, it's important that the parent container of the ripple be relative position, otherwise
+the ripple will emanate outside of the desired container.
`paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple
effect when touches on it. You can also defeat the default behavior and
manually route the down and up actions to the ripple element. Note that it is
-important if you call downAction() you will have to make sure to call
-upAction() so that `paper-ripple` would end the animation loop.
+important if you call `downAction()` you will have to make sure to call
+`upAction()` so that `paper-ripple` would end the animation loop.
Example:
@@ -76,7 +83,7 @@ Apply `circle` class to make the rippling effect within a circle.
@param {Object} detail
@param {Object} detail.node The animated node
-->
-
+
<template>
<style>
:host {
@@ -88,24 +95,30 @@ Apply `circle` class to make the rippling effect within a circle.
left: 0;
right: 0;
bottom: 0;
+
+ /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers,
+ * creating a node (with a position:absolute) in the middle of an event
+ * handler "interrupts" that event handler (which happens when the
+ * ripple is created on demand) */
+ pointer-events: none;
}
-
+
:host([animating]) {
/* This resolves a rendering issue in Chrome (as of 40) where the
ripple is not properly clipped by its parent (which may have
rounded corners). See: http://jsbin.com/temexa/4
-
+
Note: We only apply this style conditionally. Otherwise, the browser
will create a new compositing layer for every ripple element on the
page, and that would be bad. */
-webkit-transform: translate(0, 0);
transform: translate3d(0, 0, 0);
}
-
+
:host([noink]) {
pointer-events: none;
}
-
+
#background,
#waves,
.wave-container,
@@ -117,32 +130,32 @@ Apply `circle` class to make the rippling effect within a circle.
width: 100%;
height: 100%;
}
-
+
#background,
.wave {
opacity: 0;
}
-
+
#waves,
.wave {
overflow: hidden;
}
-
+
.wave-container,
.wave {
border-radius: 50%;
}
-
+
:host(.circle) #background,
:host(.circle) #waves {
border-radius: 50%;
}
-
+
:host(.circle) .wave-container {
overflow: hidden;
}
</style>
-
+
<div id="background"></div>
<div id="waves"></div>
</template>
@@ -526,6 +539,17 @@ Apply `circle` class to make the rippling effect within a circle.
observer: '_holdDownChanged'
},
+ /**
+ * If true, the ripple will not generate a ripple effect
+ * via pointer interaction.
+ * Calling ripple's imperative api like `simulatedRipple` will
+ * still generate the ripple effect.
+ */
+ noink: {
+ type: Boolean,
+ value: false
+ },
+
_animating: {
type: Boolean
},
@@ -538,6 +562,10 @@ Apply `circle` class to make the rippling effect within a circle.
}
},
+ observers: [
+ '_noinkChanged(noink, isAttached)'
+ ],
+
get target () {
var ownerRoot = Polymer.dom(this).getOwnerRoot();
var target;
@@ -558,12 +586,13 @@ Apply `circle` class to make the rippling effect within a circle.
},
attached: function() {
- this.listen(this.target, 'up', 'upAction');
- this.listen(this.target, 'down', 'downAction');
+ this.listen(this.target, 'up', 'uiUpAction');
+ this.listen(this.target, 'down', 'uiDownAction');
+ },
- if (!this.target.hasAttribute('noink')) {
- this.keyEventTarget = this.target;
- }
+ detached: function() {
+ this.unlisten(this.target, 'up', 'uiUpAction');
+ this.unlisten(this.target, 'down', 'uiDownAction');
},
get shouldKeepAnimating () {
@@ -585,7 +614,22 @@ Apply `circle` class to make the rippling effect within a circle.
}, 1);
},
- /** @param {Event=} event */
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * respecting the `noink` property.
+ * @param {Event=} event
+ */
+ uiDownAction: function(event) {
+ if (!this.noink) {
+ this.downAction(event);
+ }
+ },
+
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * *not* respecting the `noink` property.
+ * @param {Event=} event
+ */
downAction: function(event) {
if (this.holdDown && this.ripples.length > 0) {
return;
@@ -600,7 +644,22 @@ Apply `circle` class to make the rippling effect within a circle.
}
},
- /** @param {Event=} event */
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * respecting the `noink` property.
+ * @param {Event=} event
+ */
+ uiUpAction: function(event) {
+ if (!this.noink) {
+ this.upAction(event);
+ }
+ },
+
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * *not* respecting the `noink` property.
+ * @param {Event=} event
+ */
upAction: function(event) {
if (this.holdDown) {
return;
@@ -673,24 +732,35 @@ Apply `circle` class to make the rippling effect within a circle.
},
_onEnterKeydown: function() {
- this.downAction();
- this.async(this.upAction, 1);
+ this.uiDownAction();
+ this.async(this.uiUpAction, 1);
},
_onSpaceKeydown: function() {
- this.downAction();
+ this.uiDownAction();
},
_onSpaceKeyup: function() {
- this.upAction();
+ this.uiUpAction();
},
- _holdDownChanged: function(holdDown) {
- if (holdDown) {
+ // note: holdDown does not respect noink since it can be a focus based
+ // effect.
+ _holdDownChanged: function(newVal, oldVal) {
+ if (oldVal === undefined) {
+ return;
+ }
+ if (newVal) {
this.downAction();
} else {
this.upAction();
}
+ },
+
+ _noinkChanged: function(noink, attached) {
+ if (attached) {
+ this.keyEventTarget = noink ? this : this.target;
+ }
}
});
})();
« no previous file with comments | « lib/src/paper-radio-group/test/basic.html ('k') | lib/src/paper-ripple/test/paper-ripple.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698