Advantages of clearRect() method may not seem obvious at first, but will be helpful in game development – to draw transparent paths between your drawings/graphics.
Today lets learn about canvas states, which will come handy once we start drawing complex shapes/graphics. Canvas state keeps track of current values of lineWidth, strokeStyle, fillStyle, lineCap, transformation matrix, clipping regions etc.
Each time we save a state, it’s pushed onto a stack of saved states from which we can restore the state later.
We have 3 rectangle boxes. First one is filled with red color. Second one is filled with blue color.
Using save() method, we have saved the fillStyle property value. Now we restore fillStyle property before drawing the third rectangle. Saved canvas state has fillStyle as red, so our third rectangle gets red color.
This video tutorial illustrates the drawing of rectangle with styling.
Tutorial Includes: Drawing rectangle. Specifying x-axis and y-axis for drawing rectangle. Specifying width and height for drawing rectangle. Filling the border(strokeStyle) with color. Filling the body(fillStyle) of rectangle with color. Specifying the border width(lineWidth). etc
Once the index.html file loads, it calls a method called canvas.
Validation Inside canvas method, we check if the canvas element is actually present on the webpage. If present, we check if the browser actually supports context object.
If both of them are present, then we make use of the API provided by context object and draw the rectangle and assign some styling to it.
Defaults By default, lineWidth has 1px. In our example we’re setting it to 2px. By default, strokeStyle and fillStyle has black color. In our example, we’re setting it to red and blue respectively.
Result Canvas element has some margin by default. And the top left corner of canvas is considered x-axis = 0 and y-axis = 0. In our example, we are placing our rectangle at 10px x-axis and 10px y-axis, with 100px width and height.
With all these, we get a 100px wide and 100px tall, blue rectangle with a red border.
Now you maybe thinking, we’ll have fillCircle and strokeCircle, fillTriangle and strokeTriangle methods to draw circles and triangles. But NO. We don’t have such methods. We need to achieve shapes other than rectangle using paths and lines. Lets see how it can be done in our coming video tutorials. Stay subscribed.
Here we have attached a style sheet to index.html and we have the canvas element with an id, width and a height property applied to it.
We can specify some text in-between the opening and closing canvas tag, which shows up in the browser which doesn’t support HTML5’s canvas element.
CSS file myStyle.css
1
2
3
canvas {
border: 3px groove black;
}
canvas {
border: 3px groove black;
}
Here we’re applying some basic style to our canvas.
Since canvas is transparent by nature, we can’t see it unless we give it a border or fill some color into it. So, using CSS we apply 3px wide black border, for the purpose of illustration.
Here we are setting the 3rd parameter of watchPosition() method. We’re enabling HighAccuracy, setting timeout to Infinity – i.e., it’ll keep looking for the location information for ever or until it gets it. We can set this to some numerical value and it’ll check till then before it’ll show a “Timed out” message to the user. maximumAge is set to 0, so that it fetches new location each time it’s asked for. If we set it to Infinity, it’ll forever show the cached data and will never fetch or update the new location information.
watchPosition() is a geolocation method, which keeps watching/fetching new user location data. This would be helpful for tracking users location information in realtime.
We also have a stop button added to our index.html page, once the user clicks on that button, we call clearWatch() method of geolocation API and ask watchPosition() method to stop tracking the users location.
Video Tutorial: Realtime Location Tracking – Google Maps: HTML5
By combining all the things you have learnt in this Google MAPs and geolocation API video tutorial series, you can build real time location tracking applications, which returns users location on a map, pin points it. Combining this, you could store users initial and final location, store it in database, pin point both locations on Google MAP and show them the distance or route etc.
var watchID = null;
$(document).ready(function(){
var optn = {
enableHighAccuracy: true,
timeout: Infinity,
maximumAge: 0
};
if( navigator.geolocation )
navigator.geolocation.watchPosition(success, fail, optn);
else
$("p").html("HTML5 Not Supported");
$("button").click(function(){
if(watchID)
navigator.geolocation.clearWatch(watchID);
watchID = null;
return false;
});
});
function success(position)
{
var googleLatLng = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
var mapOtn={
zoom:10,
center:googleLatLng,
mapTypeId:google.maps.MapTypeId.ROAD
};
var Pmap=document.getElementById("map");
var map=new google.maps.Map(Pmap, mapOtn);
addMarker(map, googleLatLng, "Technotip.com",
"SATISH B
About Me:https://technotip.com/about/");
}
function addMarker(map, googleLatLng, title, content){
var markerOptn={
position:googleLatLng,
map:map,
title:title,
animation:google.maps.Animation.DROP
};
var marker=new google.maps.Marker(markerOptn);
var infoWindow=new google.maps.InfoWindow({ content: content,
position: googleLatLng});
google.maps.event.addListener(marker, "click", function(){
infoWindow.open(map);
});
}
function fail(error)
{
var errorType={
0:"Unknown Error",
1:"Permission denied by the user",
2:"Position of the user not available",
3:"Request timed out"
};
var errMsg = errorType[error.code];
if(error.code == 0 || error.code == 2){
errMsg = errMsg+" - "+error.message;
}
$("p").html(errMsg);
}
You can integrate MAPs feature into your existing application and release this module to your users and impress them by telling their location or you can show other users nearby to their location, this would amaze some, as to how you could know about the person living nearby :-)
Remember the position.coords.accuracy property, which returns the accuracy value in meters? Using this value, show all the users present around a users location with that accuracy(position.coords.accuracy).