A simple drawing grid with HTML5 part 4

This week, we will complete the simple drawing grid by adding support for mobile browsers. Support for mobile browsers consists of enabling interaction with the canvas with touch events rather than the mouse events that are currently used.
The first step however is to add some detection for whether or not the client is using a mobile device. There really isn’t a standard way to accomplish this that I am aware of, but we can use a bit of javascript to do the job.

```javascript
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Android/i) ? true : false;
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i) ? true : false;
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i) ? true : false;
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i) ? true : false;
},
Any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Windows());
}
};
```

This is not a comprehensive detection of all mobile devices, but should cover the most popular ones.

Once we determine if the client is using a mobile browser, we can choose wheter or not to bind mouse events or touch events. This is a simple matter of adding an if condition when the page has been loaded.

```javascript
if (!isMobile.Any()) {
alert('not mobile');
$("#grid").mousedown(function(e) {
mouseDown = true;
}).bind('mouseup', function() {
mouseDown = false;
}).bind('mouseleave', function() {
mouseDown = false;
});

$("#grid").mousemove(function(e) {
if (mouseDown) {
drawOnCanvas(e);
}
});
} else {
grid_canvas.addEventListener('touchstart', function(e) {
mouseDown = true;
});

grid_canvas.addEventListener('touchend', function(e) {
mouseDown = false;
});

grid_canvas.addEventListener('touchmove', function(e) {
e.preventDefault();
if (mouseDown) {
drawOnCanvas(e);
}
});
}
```

You should note that by default, some mobile browsers have the default behavior for ‘ touchmove’ already defined to move the entire browser window. We can disable this by adding the following to the ‘touchmove’ event that is bound to the canvas.

```javascript
e.preventDefault();
```

Now that we have detection and handling for mobile browsers, the drawing grid is supported in both mobile and non-mobile web browsers. As an exercise, you may choose to increase the size of the canvas and controls to make it more visible for mobile devices with smaller screens.

The entire source for our completed drawing grid application can be seen by [viewing the source of the demo](http://www.yojimbocorp.com/demos/drawing/part4/drawing_grid.html).