ripplet.js
Version:
Fully controllable vanilla-js material design ripple effect generator
47 lines (46 loc) • 1.72 kB
JavaScript
import ripplet from './ripplet';
export default ripplet;
export * from './ripplet';
// Element.prototype.closest is not implemented in IE
// https://caniuse.com/#feat=element-closest
var findRippletTarget = function (element) {
while (element && !element.hasAttribute('data-ripplet')) {
element = element.parentElement;
}
return element;
};
var parseOptions = function (optionsString) {
var options = {};
if (optionsString) {
for (var _i = 0, _a = optionsString.split(';'); _i < _a.length; _i++) {
var s = _a[_i];
var index = s.indexOf(':');
options[s
.slice(0, index)
.trim()
.replace(/[a-zA-Z0-9_]-[a-z]/g, function ($0) { return $0[0] + $0[2].toUpperCase(); })] = s.slice(index + 1).trim();
}
}
return options;
};
addEventListener('pointerdown', function (event) {
if (event.button !== 0) {
return;
}
var currentTarget = findRippletTarget(event.target);
if (!currentTarget) {
return;
}
var options = parseOptions(currentTarget.getAttribute('data-ripplet'));
if (options.clearing !== 'false') {
options.clearing = 'false';
var clear_1 = function () {
ripplet.clear(currentTarget, container);
currentTarget.removeEventListener('pointerup', clear_1);
currentTarget.removeEventListener('pointerleave', clear_1);
};
currentTarget.addEventListener('pointerup', clear_1);
currentTarget.addEventListener('pointerleave', clear_1);
}
var container = ripplet({ currentTarget: currentTarget, clientX: event.clientX, clientY: event.clientY }, options);
}, true);