Ripple.JS (GitHub | Demo | CDN) adds a Material style ripple to HTML Elements like this:
$.ripple(".btn", {
on: 'mousedown', // The event to trigger a ripple effect
opacity: 0.4, // The opacity of the ripple
color: "auto", // Set the background color. "auto" will use the text color
duration: 0.7, // The duration of the ripple
easing: 'linear' // The CSS3 easing function of the ripple
});
Demo in jsFiddle & Stack Snippets
$.ripple(".btn", {
on: 'mousedown', // The event to trigger a ripple effect
opacity: 0.4, // The opacity of the ripple
color: "auto", // Set the background color. "auto" will use the text color
duration: 0.7, // The duration of the ripple
easing: 'linear' // The CSS3 easing function of the ripple
});
body {
padding: 15px;
}
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/paper/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Ripple.js/1.2.1/ripple.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Ripple.js/1.2.1/ripple.js"></script>
<button class="btn btn-primary btn-lg" >Click Me</button>
Ripples are created by the local function named Trigger
inside of the library. Since it's locally declared, we can't execute it directly, but we can add a custom event type in the options.on
setting.
The only road bump we'll hit is that all ripples must come from somewhere (both intuitively and programatically), and the trigger function will rely on getting this info from the event coordinates passed in like this ripple.js#L107:
var x = e.pageX - $this.offset().left - $ripple.width() / 2;
var y = e.pageY - $this.offset().top - $ripple.height() / 2;
To fake this, we'll have to build and trigger our own custom jQuery Event object from scratch and then stub out the pageX
and pageY
properties by finding the center our our new object using $.offset
, .outerWidth()
, and .outerHeight()
like this
$.ripple(".btn", {
on: 'mousedown ripple', // The event(s) to trigger a ripple effect
});
function InvokeRipple($el) {
var event = jQuery.Event("ripple");
event.pageX = $el.offset().left + $el.outerWidth() / 2;
event.pageY = $el.offset().top + $el.outerHeight() / 2;
$($el).trigger(event)
}
$.ripple(".btn", {
on: 'mousedown ripple', // The event to trigger a ripple effect
opacity: 0.4, // The opacity of the ripple
color: "auto", // Set the background color. "auto" will use the text color
duration: 0.7, // The duration of the ripple
easing: 'linear' // The CSS3 easing function of the ripple
});
$("#click").click(function() {
InvokeRipple($("#info"))
});
function InvokeRipple($el) {
var event = jQuery.Event("ripple");
event.pageX = $el.offset().left + $el.outerWidth() / 2;
event.pageY = $el.offset().top + $el.outerHeight() / 2;
$($el).trigger(event)
}
body {
padding: 15px;
}
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/paper/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Ripple.js/1.2.1/ripple.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Ripple.js/1.2.1/ripple.js"></script>
<button class="btn btn-primary btn-lg" id="click" >Invoke Ripple on other button</button>
<button class="btn btn-info btn-lg" id="info" >More Info</button>