
Recently I was working on some app and wanted an opportunity for the user to write something down. As I was working with the html5 canvas, I found a very good looking library which I want to show you today: The signature pad. This library allows to draw on your device, with not just a normal bold line but with a quite realistic appeal. Let’s make a simple app to test it!
Setup a simple App
We start with a generic blank Ionic app and install our library via bower:
[bash]
ionic start devdactic-signature blank
cd devdactic-signature
bower install –save signature_pad
[/bash]
I like to install those packages whenever possible through bower, as it makes managing those dependencies a lot easier. As bower will install our libs always to the same folder, we can go ahead and include the js file at the top of our index.html file:
[html]
<script src=’lib/signature_pad/signature_pad.js’></script>
[/html]
That’s all we need to include the signature pad library in our app!
Include the Signature Pad functionalities
To use the library, we must define a canvas element inside our index.html which will be the area for the user to draw his signature (or anything else). For this tutorial, we will just have a tiny area at the top, which has the signatureCanvas
id so we can get it later in our controller. Additionally I created 2 buttons, which can clear the area or save the current content of the area. Below we have a image, which will show our last saved signature from the canvas. So go ahead and replace everything inside the body with this:
[html]
<body ng-app=’starter’ ng-controller=’SignatureCtrl’>
<ion-pane>
<ion-header-bar class=’bar-calm’>
<h1 class=’title’>Devdactic Signature Drawpad</h1>
</ion-header-bar>
<ion-content class=’has-header padding’ scroll=’false’>
<canvas id=’signatureCanvas’ width=’300′ height=’180′ style=’border: 1px solid black;’></canvas>
<div class=’button-bar’>
<a class=’button button-energized’ ng-click=’clearCanvas()’>Clear</a>
<a class=’button button-balanced’ ng-click=’saveCanvas()’>Save</a>
</div>
<br>
<img ng-src='{{signature}}’/>
</ion-content>
</ion-pane>
</body>
[/html]
We have now defined everything we need inside our index, now we will create the controller which will use the signature pad functionality. Open your app.js and add this:
[js highlight=”2,10″]
.controller(‘SignatureCtrl’, function($scope) {
var canvas = document.getElementById(‘signatureCanvas’);
var signaturePad = new SignaturePad(canvas);
$scope.clearCanvas = function() {
signaturePad.clear();
}
$scope.saveCanvas = function() {
var sigImg = signaturePad.toDataURL();
$scope.signature = sigImg;
}
})
[/js]
First of all, we get our canvas element through our defined id. Afterwards, we create a new SignaruePad from our canvas element. Now we can simply call functions on this element, thats all! Our clearCanvas()
will, well, obviously just clear the canvas drawing area, and our saveCanvas()
function gets the image data from the canvas by calling the toDataURL()
on our signature pad. This info can be directly used to update our image below.
You could add more drawing/color options and present the drawn images to the user in a cool lightbox!
These are just some simple functions, there are some more things you can edit, which include:
- dotSize – Size of dot
- minWidth – Minimum size of a line
- maxWidth – Maximum sizw of a line
- backgroundColor – Color used when the canvas is cleared
- penColor – Color of your line
- onBegin & onEnd – Callback functions
Now you have everything set up, and deployed on your device your result should look like this:
Conclusion
This tutorial showed how to integrate a tiny javascript library in your Ionic app to create a drawing area for the user. This area can be used for drawing a signature or anything else you like, which can then be saved as image data and used in other areas of your app! For example, you could allow the user to send his signature or drawn image via mail to others!
If this tutorial was helpful, follow me on twitter @schlimmson and leave a comment/ tweet it!
Don’t forget to subscribe to my newsletter to receive new posts and infos via mail!
Watch a video version of this article below (sorry for loud typing and the typo error 😉 )
So long,
Simon