Author: Saim Khalid

  • HTML5 Server-Sent Events

    What is Server-Sent Event?

    HTML5 server-sent event is a new way for the web pages to communicating with the web server. It is also possible with the XMLHttpRequest object that lets your JavaScript code make a request to the web server, but it’s a one-for-one exchange — that means once the web server provides its response, the communication is over. XMLHttpRequest object is the core of all Ajax operations.

    However, there are some situations where web pages require a longer-term connection to the web server. A typical example is stock quotes on finance websites where price updated automatically. Another example is a news ticker running on various media websites.

    You can create such things with the HTML5 server-sent events. It allows a web page to hold an open connection to a web server so that the web server can send a new response automatically at any time, there’s no need to reconnect, and run the same server script from scratch over and over again.

    Note: Server-Sent Events (SSE) are unidirectional that means data are delivered in one direction from the server to client. A client typically is a web browser.

    Tip: The HTML5’s server-sent events feature is supported in all major modern web browsers like Firefox, Chrome, Safari and Opera except Internet Explorer.

    Sending Messages with a Server Script

    Let’s create a PHP file named “server_time.php” and type the following script into it. It will simply report the current time of the web server’s built-in clock in regular intervals. We will retrieve this time and update the web page accordingly later in this tutorial.

    Example

    <?php
    header("Content-Type: text/event-stream");
    header("Cache-Control: no-cache");
     
    // Get the current time on server
    $currentTime = date("h:i:s", time());
     
    // Send it in a message
    echo "data: " . $currentTime . "\n\n";
    flush();
    ?>

    The first two line of the PHP script sets two important headers. First, it sets the MIME type to text/event-stream, which is required by the server-side event standard. The second line tells the web server to turn off caching otherwise the output of your script may be cached.

    Every message send through HTML5 server-sent events must start with the text data: followed by the actual message text and the new line character sequence (\n\n).

    And finally, we have used the PHP flush() function to make sure that the data is sent right away, rather than buffered until the PHP code is complete.


    Processing Messages in a Web Page

    The EventSource object is used to receive server-sent event messages.

    Now let’s create an HTML document named “demo_sse.html” and place it in the same project directory where the “server_time.php” file is located. This HTML document simply receives the current time reported by the web server and display it to the user.

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>Using Server-Sent Events</title>
    <script>
        window.onload = function() {
            var source = new EventSource("server_time.php");
            source.onmessage = function(event) {
                document.getElementById("result").innerHTML += "New time received from web server: " + event.data + "<br>";
            };
        };
    </script>
    </head>
    <body>
        <div id="result">
            <!--Server response will be inserted here-->
        </div>
    </body>
    </html>
  • HTML5 Web Workers

    What is Web Worker?

    If you try to do intensive task with JavaScript that is time-consuming and require hefty calculations browser will freeze up the web page and prevent the user from doing anything until the job is completed. It happens because JavaScript code always runs in the foreground.

    HTML5 introduces a new technology called web worker that is specifically designed to do background work independently of other user-interface scripts, without affecting the performance of the page. Unlike normal JavaScript operations, web worker doesn’t interrupt the user and the web page remains responsive because they are running the tasks in the background.

    Tip: The HTML5’s web worker feature is supported in all major modern web browsers like Firefox, Chrome, Opera, Safari and Internet Explorer 10 and above.


    Create a Web Worker File

    The simplest use of web workers is for performing a time-consuming task. So here we are going to create a simple JavaScript task that counts from zero to 100,000.

    Let’s create an external JavaScript file named “worker.js” and type the following code.

    Example

    var i = 0;
    function countNumbers() {
        if(i < 100000) {
            i = i + 1;
            postMessage(i);
        }
     
        // Wait for sometime before running this script again
        setTimeout("countNumbers()", 500);
    }
    countNumbers();

    Note: Web workers have no access to the DOM. That means you can’t access any DOM elements in the JavaScript code that you intend to run using web workers.

    Tip: The worker object’s postMessage() method is used to send a message (like the numbers in the example above) back to the web page from the web worker file.


    Doing Work in the Background with Web Worker

    Now that we have created our web worker file. In this section we are going to initiate the web worker from an HTML document that runs the code inside the file named “worker.js” in the background and progressively displays the result on the web page. Let’s see how it works:

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Using Web Worker</title>
    <script>
        if(window.Worker) {
            // Create a new web worker
            var worker = new Worker("worker.js");
            
            // Fire onMessage event handler
            worker.onmessage = function(event) {
                document.getElementById("result").innerHTML = event.data;
            };
        } else {
            alert("Sorry, your browser do not support web worker.");
        }
    </script>
    </head>
    <body>
        <div id="result">
            <!--Received messages will be inserted here-->
        </div>
    </body>
    </html>

    Example explained:

    The JavaScript code in the above example has the following meaning:

    • The statement var worker = new Worker(“worker.js”); creates a new web worker object, which is used to communicate with the web worker.
    • When the worker posts a message, it fires the onmessage event handler (line no-14) that allows the code to receive messages from the web worker.
    • The event.data element contains the message sent from the web worker.

    Note: The code that a worker runs is always stored in a separate JavaScript file. This is to prevent web developer from writing the web worker code that attempts to use global variables or directly access the elements on the web page.


    Terminate a Web Worker

    So far you have learnt how to create worker and start receiving messages. However, you can also terminate a running worker in the middle of the execution.

    The following example will show you how to start and stop worker from a web page through clicking the HTML buttons. It utilizes the same JavaScript file ‘worker.js’ what we have used in the previous example to count the numbers from zero to 100000. Let’s try it out:

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Start/Stop Web Worker</title>
    <script>
        // Set up global variable
        var worker;
        
        function startWorker() {
            // Initialize web worker
            worker = new Worker("worker.js");
            
            // Run update function, when we get a message from worker
            worker.onmessage = update;
            
            // Tell worker to get started
            worker.postMessage("start");
        }
        
        function update(event) {
            // Update the page with current message from worker
            document.getElementById("result").innerHTML = event.data;
        }
        
        function stopWorker() {
            // Stop the worker
            worker.terminate();
        }
    </script>
    </head>
    <body>
        <h1>Web Worker Demo</h1>
        <button onclick="startWorker();" type="button">Start web worker</button>
        <button type="button" onclick="stopWorker();">Stop web worker</button>
        <div id="result">
            <!--Received messages will be inserted here-->
        </div>
    </body>
    </html>
  • HTML5 Application Cache

    What is Application Cache?

    Typically most web-based applications will work only if you’re online. But HTML5 introduces an application cache mechanism that allows the browser to automatically save the HTML file and all the other resources that needs to display it properly on the local machine, so that the browser can still access the web page and its resources without an internet connection.

    Here are some advantages of using the HTML5 application cache feature:

    • Offline browsing — Users can use the application even when they’re offline or there are unexpected disruptions in the network connection.
    • Improve performance — Cached resources load directly from the user’s machine rather than the remote server hence web pages load faster and performing better.
    • Reduce HTTP request and server load — The browser will only have to download the updated/changed resources from the remote server that minimize the HTTP requests and saves precious bandwidth as well as reduce the load on the web server.

    Tip: The HTML5’s application cache feature is supported in all major modern web browsers like Firefox, Chrome, Opera, Safari and Internet Explorer 10 and above.


    Caching Files with a Manifest

    To cache the files for offline uses, you need to complete the following steps:

    Step 1: Create a Cache Manifest File

    A manifest is a special text file that tells the browsers what files to store, what files not to store, and what files to replace with something else. The manifest file always starts with the words CACHE MANIFEST (in uppercase). Here is an example of a simple manifest file:

    Example

    CACHE MANIFEST
    # v1.0 : 10-08-2014
     
    CACHE:
    # pages
    index.html
     
    # styles & scripts
    css/theme.css
    js/jquery.min.js
    js/default.js
     
    # images
    /favicon.ico
    images/logo.png
     
    NETWORK:
    login.php
     
    FALLBACK:
    / /offline.html

    Explanation of code

    You might think what that code was all about. OK, let’s get straight into it. A manifest file can have three distinct sections: CACHE, NETWORK, and FALLBACK.

    • Files listed under the CACHE: section header (or immediately after the CACHE MANIFEST line) are explicitly cached after they’re downloaded for the first time.
    • Files listed under the NETWORK: section header are white-listed resources that are never cached and aren’t available offline. It means users can only access login.php page when they’r online.
    • The FALLBACK: section specifies fallback pages the browser should use in case the connection to the server cannot be established. Each entry in this section lists two URIs — first is the primary resource, the second is the fallback. For example, in our case offline.html page will be displayed if the user is offline. Also, both URIs must be from the same origin as the manifest file.
    • Lines starting with a hash symbol (#) are comment lines.

    Note: If an application cache exists, the browser loads the document and its associated resources directly from the cache, without accessing the network. After that browser checks to see whether the manifest file has been updated on the server, and if it has been updated, the browser downloads the new version of the manifest and the resources listed in it.

    Warning: Do not specify the manifest file itself in the cache manifest file, otherwise it will be nearly impossible to inform the browser a new manifest is available.


    Step 2: Using Your Cache Manifest File

    After creating, upload your cache manifest file on the web server — make sure the web server is configured to serve the manifest files with the MIME type text/cache-manifest.

    Now to put your cache manifest into effect, you need enable it in your web pages, by adding the manifest attribute to the root <html> element, as shown below:

    Example

    <!DOCTYPE html>
    <html lang="en" manifest="example.appcache">
    <head>
        <title>Using the Application Cache</title>
    </head>
    <body>
        <!--The document content will be inserted here-->
    </body>
    </html>
  • HTML5 Web Storage

    What is Web Storage?

    The HTML5’s web storage feature lets you store some information locally on the user’s computer, similar to cookies, but it is faster and much better than cookies. However, web storage is no more secure than cookies. Please check out the tutorial on PHP cookies to learn more about cookies.

    The information stored in the web storage isn’t sent to the web server as opposed to the cookies where data sent to the server with every request. Also, where cookies let you store a small amount of data (nearly 4KB), the web storage allows you to store up to 5MB of data.

    There are two types of web storage, which differ in scope and lifetime:

    • Local storage — The local storage uses the localStorage object to store data for your entire website on a permanent basis. That means the stored local data will be available on the next day, the next week, or the next year unless you remove it.
    • Session storage — The session storage uses the sessionStorage object to store data on a temporary basis, for a single browser window or tab. The data disappears when session ends i.e. when the user closes that browser window or tab.

    Tip: The HTML5’s web storage feature is supported in all major modern web browsers like Firefox, Chrome, Opera, Safari and Internet Explorer 8 and above.


    The localStorage Object

    As stated earlier, the localStorage object stores the data with no expiration date. Each piece of data is stored in a key/value pair. The key identifies the name of the information (like ‘first_name’), and the value is the value associated with that key (say ‘Peter’). Here’s an example:

    Example

    <script>
    // Check if the localStorage object exists
    if(localStorage) {
        // Store data
        localStorage.setItem("first_name", "Peter");
        
        // Retrieve data
        alert("Hi, " + localStorage.getItem("first_name"));
    } else {
        alert("Sorry, your browser do not support local storage.");
    }
    </script>

    Example explained:

    The above JavaScript code has the following meaning:

    • localStorage.setItem(key, value) stores the value associated with a key.
    • localStorage.getItem(key) retrieves the value associated with the key.

    You can also remove a particular item from the storage if it exists, by passing the key name to the removeItem() method, like localStorage.removeItem("first_name").

    However, if you want to remove the complete storage use the clear() method, like localStorage.clear(). The clear() method takes no arguments, and simply clears all key/value pairs from localStorage at once, so think carefully before you using it.

    Note: The web storage data (both localStorage and sessionStorage) will not be available between different browsers, for example the data stored in Firefox browser will not available in Google Chrome, Safari, Internet Explorer or other browsers.


    The sessionStorage Object

    The sessionStorage object work in the same way as localStorage, except that it stores the data only for one session i.e. the data remains until the user closes that window or tab.

    Let’s try out the following example to understand how it basically works:

    Example

    <script>
    // Check if the sessionStorage object exists
    if(sessionStorage) {
        // Store data
        sessionStorage.setItem("last_name", "Parker");
        
        // Retrieve data
        alert("Hi, " + localStorage.getItem("first_name") + " " + sessionStorage.getItem("last_name"));
    } else {
        alert("Sorry, your browser do not support session storage.");
    }
    </script>
  • HTML5 Video

    Embedding Video in HTML Document

    Inserting video onto a web page was not relatively easy, because web browsers did not have a uniform standard for defining embedded media files like video.

    In this chapter we’ll demonstrates some of the many ways of adding videos on web pages, from the latest HTML5 <video> element to the popular YouTube videos.

    Using the HTML5 video Element

    The newly introduced HTML5 <video> element provides a standard way to embed video in web pages. However, the video element is relatively new, but it works in most of the modern web browsers.

    The following example simply inserts a video into the HTML document, using the browser default set of controls, with one source defined by the src attribute.

    Example

    <video controls="controls" src="media/shuttle.mp4">
        Your browser does not support the HTML5 Video element.
    </video>

    A video, using the browser default set of controls, with alternative sources.

    Example

    <video controls="controls">
        <source src="media/shuttle.mp4" type="video/mp4">
        <source src="media/shuttle.ogv" type="video/ogg">
        Your browser does not support the HTML5 Video element.
    </video>

    Using the object Element

    The <object> element is used to embed different kinds of media files into an HTML document. Initially, this element was used to insert ActiveX controls, but according to the specification, an object can be any media object such as video, audio, PDF files, Flash animations or even images.

    The following code fragment embeds a Flash video into a web page.

    Example

    <object data="media/blur.swf" width="400px" height="200px"></object>

    Only browsers or applications that support Flash will play this video.

    Warning: The <object> element is not supported widely and very much depends on the type of the object that’s being embedded. Other methods could be a better choice in many cases. iPad and iPhone device cannot display Flash videos.


    Using the embed Element

    The <embed> element is used to embed multimedia content into an HTML document.

    The following code fragment embeds a Flash video into a web page.

    Example

    <embed src="media/blur.swf" width="400px" height="200px">

    Warning: However, the <embed> element is very well supported in current web browsers and it is also defined as standard in HTML5, but your video might not played due to lack of browser support for Flash or unavailability of plugins.


    Embedding the YouTube Videos

    This is the easiest and popular way to embed videos files in the web pages. Just upload the video on YouTube and insert HTML code to display that video in your web page.

    Here’s a live example followed by the explanation of whole process:

    Step 1: Upload video

    Go to YouTube upload video page and follow the instructions to upload your video.

    Step 2: Creating the HTML Code to embed the video

    When you open your uploaded video in YouTube you will see something like the following figure at the bottom of the video. Browse and open your uploaded video in YouTube. Now look for the share button which is located just below the video as shown in the figure.

    Share YouTube Videos

    When you click the share button, a share panel will open displaying some more buttons. Now click on the Embed button, it will generate the HTML code to directly embed the video into the web pages. Just copy and paste that code into your HTML document where you want to display the video and you’re all set. By default video embedded inside an iframe.

    Share YouTube Videos

    You can further customize this embed code such as changing the video size by selecting the customization option given just below the embed-code input box.

    The following example simply embeds a video from the YouTube. Let’s try it out:

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>YouTube Video</title>
    </head>
    <body>
        <iframe width="560" height="315" src="//www.youtube.com/embed/YE7VzlLtp-4" frameborder="0" allowfullscreen></iframe>
    </body>
    </html>
  • HTML5 Audio

    Embedding Audio in HTML Document

    Inserting audio onto a web page was not easy before, because web browsers did not have a uniform standard for defining embedded media files like audio.

    In this chapter we’ll demonstrates some of the many ways to embed sound in your webpage, from the use of a simple link to the use of the latest HTML5 <audio> element.

    Using the HTML5 audio Element

    The newly introduced HTML5 <audio> element provides a standard way to embed audio in web pages. However, the audio element is relatively new but it works in most of the modern web browsers.

    The following example simply inserts an audio into the HTML5 document, using the browser default set of controls, with one source defined by the src attribute.

    Exampl

    <audio controls="controls" src="media/birds.mp3">
        Your browser does not support the HTML5 Audio element.
    </audio>

    An audio, using the browser default set of controls, with alternative sources.

    Example

    <audio controls="controls">
        <source src="media/birds.mp3" type="audio/mpeg">
        <source src="media/birds.ogg" type="audio/ogg">
        Your browser does not support the HTML5 Audio element.
    </audio>

    The ‘ogg’ track in the above example works in Firefox, Opera and Chrome, while the same track in the ‘mp3’ format is added to make the audio work in Internet Explorer and Safari.


    Linking Audio Files

    You can make links to your audio files and play it by ticking on them.

    Let’s try out the following example to understand how this basically works:

    Example

    <a href="media/sea.mp3">Track 1</a>
    <a href="media/wind.mp3">Track 2</a>

    Using the object Element

    The <object> element is used to embed different kinds of media files into an HTML document. Initially, this element was used to insert ActiveX controls, but according to the specification, an object can be any media object such as audio, video, PDF files, Flash animations or even images.

    The following example code embeds a simple audio file into a web page.

    Example

    <object data="media/sea.mp3"></object>
    <object data="media/sea.ogg"></object>

    Warning: The <object> element is not supported widely and very much depends on the type of the object that’s being embedded. Other methods like HTML5 <audio> element or third-party HTML5 audio players could be a better choice in many cases.


    Using the embed Element

    The <embed> element is used to embed multimedia content into an HTML document.

    The following code fragment embeds audio files into a web page.

    Example

    <embed src="media/wind.mp3">
    <embed src="media/wind.ogg">
  • HTML5 SVG

    What is SVG?

    The Scalable Vector Graphics (SVG) is an XML-based image format that is used to define two-dimensional vector based graphics for the web. Unlike raster image (e.g. .jpg.gif.png, etc.), a vector image can be scaled up or down to any extent without losing the image quality.

    An SVG image is drawn out using a series of statements that follow the XML schema — that means SVG images can be created and edited with any text editor, such as Notepad. There are several other advantages of using SVG over other image formats like JPEG, GIF, PNG, etc.

    • SVG images can be searched, indexed, scripted, and compressed.
    • SVG images can be created and modified using JavaScript in real time.
    • SVG images can be printed with high quality at any resolution.
    • SVG content can be animated using the built-in animation elements.
    • SVG images can contain hyperlinks to other documents.

    Tip: The vector images are composed of a fixed set of shapes defined by math, while the bitmap or raster images are composed of a fixed set of dots called pixels.


    Embedding SVG into HTML Pages

    You can embed SVG graphics directly into your document using the HTML5 <svg> element.

    Let’s take a look at the following example to understand how it basically works:

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Embedding SVG in HTML</title>
    </head>
    <body>
        <svg width="300" height="200">
            <text x="10" y="20" style="font-size:14px;">
                Your browser support SVG.
            </text>
            Sorry, your browser does not support SVG.
        </svg>
    </body>
    </html>

    Note: All the major modern web browsers like Chrome, Firefox, Safari, and Opera, as well as Internet Explorer 9 and above support inline SVG rendering.


    Drawing Path and Shapes with SVG

    The following section will explain you how to draw basic vector-based paths and shapes on the web pages using the newly introduced HTML5 <svg> element.

    Drawing a Line

    The most basic path you can draw with SVG is a straight line. The following example will show you how to create a straight line using the SVG <line> element:

    Example

    <svg width="300" height="200">
        <line x1="50" y1="50" x2="250" y2="150" style="stroke:red; stroke-width:3;" />
    </svg>

    The attributes x1x2y1 and y2 of the <line> element draw a line from (x1,y1) to (x2,y2).


    Drawing a Rectangle

    You can create simple rectangle and square shapes using the SVG <rect> element. The following example will show you how to create and style a rectangular shape with SVG:

    Example

    <svg width="300" height="200">
        <rect x="50" y="50" width="200" height="100" style="fill:orange; stroke:black; stroke-width:3;" />
    </svg>

    The attributes x and y of <rect> element defines the co-ordinates of the top-left corner of the rectangle. The attributes width and height specifies the width and height of the shape.


    Drawing a Circle

    You can also create the circle shapes using the SVG <circle> element. The following example will show you how to create and style a circular shape with SVG:

    Example

    <svg width="300" height="200">
        <circle cx="150" cy="100" r="70" style="fill:lime; stroke:black; stroke-width:3;" />
    </svg>

    The attributes cx and cy of the <circle> element defines the co-ordinates of the center of the circle and the attribute r specifies the radius of the circle. However, if the attributes cx and cy are omitted or not specified, the center of the circle is set to (0,0).


    Drawing Text with SVG

    You can also draw text on the web pages with SVG. The text in SVG is rendered as a graphic so you can apply all the graphic transformation to it but it is still acts like text — that means it can be selected and copied as text by the user. Let’s try an example to see how this works:

    Example

    <svg width="300" height="200">
        <text x="20" y="30" style="fill:purple; font-size:22px;">
            Welcome to Our Website!
        </text>
        <text x="20" y="30" dx="0" dy="20" style="fill:navy; font-size:14px;">
            Here you will find lots of useful information.
        </text>
    </svg>

    The attributes x and y of the <text> element defines the location of the top-left corner in absolute terms whereas the attributes dx and dy specifies the relative location.

    You can even use the <tspan> element to reformat or reposition the span of text contained within a <text> element. Text contained in separate tspans, but inside the same text element can all be selected at once — when you click and drag to select the text. However, the text in separate text elements cannot be selected at the same time. Let’s check out an example:

    Example

    <svg width="300" height="200">
        <text x="30" y="15" style="fill:purple; font-size:22px; transform:rotate(30deg);">
            <tspan style="fill:purple; font-size:22px;">
                Welcome to Our Website!
            </tspan>
            <tspan dx="-230" dy="20" style="fill:navy; font-size:14px;">
                Here you will find lots of useful information.
            </tspan>
        </text>
    </svg>

    Differences between SVG and Canvas

    The HTML5 introduced the two new graphical elements <canvas> and <svg> for creating rich graphics on the web, but they are fundamentally different.

    The following table summarizes some of the basic differences between these two elements, which will help you to understand how to use these elements effectively and appropriately.

    SVGCanvas
    Vector based (composed of shapes)Raster based (composed of pixel)
    Multiple graphical elements, which become the part of the page’s DOM treeSingle element similar to <img> in behavior. Canvas diagram can be saved to PNG or JPG format
    Modified through script and CSSModified through script only
    Good text rendering capabilitiesPoor text rendering capabilities
    Give better performance with smaller number of objects or larger surface, or bothGive better performance with larger number of objects or smaller surface, or both
    Better scalability. Can be printed with high quality at any resolution. Pixelation does not occurPoor scalability. Not suitable for printing on higher resolution. Pixelation may occur
  • HTML5 Canvas

    What is Canvas?

    The HTML5 canvas element can be used to draw graphics on the webpage via JavaScript. The canvas was originally introduced by Apple for the Mac OS dashboard widgets and to power graphics in the Safari web browser. Later it was adopted by the Firefox, Google Chrome and Opera. Now the canvas is a part of the new HTML5 specification for next generation web technologies.

    By default the <canvas> element has 300px of width and 150px of height without any border and content. However, custom width and height can be defined using the CSS height and width property whereas the border can be applied using the CSS border property.

    Understanding Canvas Coordinates

    The canvas is a two-dimensional rectangular area. The coordinates of the top-left corner of the canvas are (0, 0) which is known as origin, and the coordinates of the bottom-right corner are (canvas widthcanvas height). Here’s a simple demonstration of canvas default coordinate system.


    (0,0)

    Tip: Place your mouse pointer within the canvas area demonstrated above and you will get its current coordinates relative to the canvas. The <canvas> element is supported in all major web browsers such as Chrome, Firefox, Safari, Opera, IE 9 and above.


    Drawing Path and Shapes on Canvas

    In this section we’re going to take a closer look at how to draw basic paths and shapes using the newly introduced HTML5 canvas element and JavaScript.

    Here is the base template for drawing paths and shapes onto the 2D HTML5 canvas.

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Drawing on Canvas</title>
    <script>
        window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            // draw stuff here
        };
    </script>
    </head>
    <body>
        <canvas id="myCanvas" width="300" height="200"></canvas>
    </body>
    </html>

    All the lines except those from 7 to 11 are pretty straight forward. The anonymous function attached to the window.onload event will execute when the page load. Once the page is loaded, we can access the canvas element with document.getElementById() method. Later we have defined a 2D canvas context by passing 2d into the getContext() method of the canvas object.

    Drawing a Line

    The most basic path you can draw on canvas is a straight line. The most essential methods used for this purpose are moveTo()lineTo() and the stroke().

    The moveTo() method defines the position of drawing cursor onto the canvas, whereas the lineTo() method used to define the coordinates of the line’s end point, and finally the stroke() method is used to make the line visible. Let’s try out an example:

    Example

    <script>
        window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.moveTo(50, 150);
            context.lineTo(250, 50);
            context.stroke();
        };
    </script>

    Drawing a Arc

    You can create arcs using the arc() method. The syntax of this method is as follow:

    context.arc(centerX, centerY, radius, startingAngle, endingAngle, counterclockwise);

    The JavaScript code in the following example will draw an arc on the canvas.

    Example

    <script>
        window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.arc(150, 150, 80, 1.2 * Math.PI, 1.8 * Math.PI, false);
            context.stroke();
        };
    </script>

    Drawing a Rectangle

    You can create rectangle and square shapes using the rect() method. This method requires four parameters x, y position of the rectangle and its width and height.

    The basic syntax of the rect() method can be given with:

    context.rect(x, y, width, height);

    The following JavaScript code will draw a rectangle shape centered on the canvas.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.rect(50, 50, 200, 100); 
            context.stroke();
        };
    </script>

    Drawing a Circle

    There is no specific method for creating circle like rectangle’s rect() method. However, you can create a fully enclosed arc such as circle using the arc() method.

    The syntax for drawing a complete circle using the arc() method can be given with:

    context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);

    The following example will draw a complete circle centered on the canvas.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.arc(150, 100, 70, 0, 2 * Math.PI, false);
            context.stroke();
        };
    </script>

    Applying Styles and Colors on Stroke

    The default color of the stroke is black and its thickness is one pixel. But, you can set the color and width of the stoke using the strokeStyle and lineWidth property respectivley.

    The following example will draw an orange color line having 5 pixels width.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.lineWidth = 5;
            context.strokeStyle = "orange";
            context.moveTo(50, 150);
            context.lineTo(250, 50);
            context.stroke();
        };
    </script>

    You can also set the cap style for the lines using the lineCap property. There are three styles available for the line caps — butt, round, and square. Here’s an example:

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.lineWidth = 10;
            context.strokeStyle = "orange";
            context.lineCap = "round";
            context.arc(150, 150, 80, 1.2 * Math.PI, 1.8 * Math.PI, false);
            context.stroke();
        };
    </script>

    Filling Colors inside Canvas Shapes

    You can also fill color inside the canvas shapes using the fillStyle() method.

    The following example will show you how to fill a solid color inside a rectangle shape.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.rect(50, 50, 200, 100); 
            context.fillStyle = "#FB8B89";
            context.fill();
            context.lineWidth = 5;
            context.strokeStyle = "black";
            context.stroke();
        };
    </script>

    Tip: While styling the shapes on canvas, it is recommended to use the fill() method before the stroke() method in order to render the stroke correctly.

    Similarly, you can use the fillStyle() method to fill solid color inside a circle too.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.arc(150, 100, 70, 0, 2 * Math.PI, false);
            context.fillStyle = "#FB8B89";
            context.fill();
            context.lineWidth = 5;
            context.strokeStyle = "black";
            context.stroke();
        };
    </script>

    Filling Gradient Colors inside Canvas Shapes

    You can also fill gradient color inside the canvas shapes. A gradient is just a smooth visual transition from one color to another. There are two types of gradient available — linear and radial.

    The basic syntax for creating a linear gradient can be given with:

    var grd = context.createLinearGradient(startX, startY, endX, endY);

    The following example uses the createLinearGradient() method to fill a linear gradient color inside a rectangle. Let’s try it out to understand how it basically works:

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.rect(50, 50, 200, 100); 
            var grd = context.createLinearGradient(0, 0, canvas.width, canvas.height);
            grd.addColorStop(0, '#8ED6FF');   
            grd.addColorStop(1, '#004CB3');
            context.fillStyle = grd;
            context.fill();
            context.stroke();
        };
    </script>

    Similarly, you can fill canvas shapes with radial gradient using the createRadialGradient() method. The basic syntax for creating a radial gradient can be given with:

    var grd = context.createRadialGradient(startX, startY, startRadius, endX, endY, endRadius);

    The following example uses the createRadialGradient() method to fill a radial gradient color inside a circle. Let’s try it out to understand how it actually works:

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.arc(150, 100, 70, 0, 2 * Math.PI, false);
            var grd = context.createRadialGradient(150, 100, 10, 160, 110, 100);
            grd.addColorStop(0, '#8ED6FF');   
            grd.addColorStop(1, '#004CB3');
            context.fillStyle = grd;
            context.fill();
            context.stroke();
        };
    </script>

    Drawing Text on Canvas

    You can also draw text onto canvas. These texts can contain any Unicode characters. The following example will draw a simple greeting message “Hello World!” onto a canvas.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.font = "bold 32px Arial";
            context.fillText("Hello World!", 50, 100);
        };
    </script>

    You can additionally set the color and alignment of the text on the canvas, like this:

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.font = "bold 32px Arial";
            context.textAlign = "center";
            context.textBaseline = "middle";
            context.fillStyle = "orange";
            context.fillText("Hello World!", 150, 100);
        };
    </script>

    You can also apply stroke on text using the strokeText() method. This method will color the perimeter of the text instead of filling it. However if you want to set both the fill and stroke on canvas text you can use both the fillText() and the strokeText() methods together.

    Example

    <script>
    	window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            context.font = "bold 32px Arial";
            context.textAlign = "center";
            context.textBaseline = "middle";
            context.strokeStyle = "orange";
            context.strokeText("Hello World!", 150, 100);
        };
    </script>
  • HTML5 New Input Types

    New Input Types in HTML5

    HTML5 introduces several new <input> types like email, date, time, color, range, and so on. to improve the user experience and to make the forms more interactive. However, if a browser failed to recognize these new input types, it will treat them like a normal text box.

    In this section we’re going to take a brief look at each of the following new input types:

    • color
    • date
    • datetime-local
    • email
    • month
    • number
    • range
    • search
    • tel
    • time
    • url
    • week

    There was also a datetime input type for entering a date and time, but it is now obsolete.


    Input Type Color

    The color input type allows the user to select a color from a color picker and returns the color value in hexadecimal format (#rrggbb). If you don’t specify a value, the default is #000000, which is black.

    Let’s try out the following example to understand how it basically works:

    Example

    <form>
        <label for="mycolor">Select Color:</label>
        <input type="color" value="#00ff00" id="mycolor">
    </form>

    Note: The color input (i.e. type="color") is supported in all major modern web browsers such as Firefox, Chrome, Opera, Safari (12.1+), Edge (14+). Not supported by the Microsoft Internet Explorer and older version of Apple Safari browsers.


    Input Type Date

    The date input type allows the user to select a date from a drop-down calendar.

    The date value includes the year, month, and day, but not the time.

    Example

    <form>
        <label for="mydate">Select Date:</label>
        <input type="date" value="2019-04-15" id="mydate">
    </form>

    Note: The date input (i.e. type="date") is supported by the Chrome, Firefox, Opera and Edge browsers. Not supported by the Internet Explorer and Safari browsers.


    Input Type Datetime-local

    The datetime-local input type allows the user to select both local date and time, including the year, month, and day as well as the time in hours and minutes.

    Let’s try out the following example to understand how it basically works:

    Example

    <form>
        <label for="mydatetime">Choose Date and Time:</label>
        <input type="datetime-local" id="mydatetime">
    </form>
    
    

    Input Type Email

    The email input type allows the user to enter e-mail address. It is very similar to a standard text input type, but if it is used in combination with the required attribute, the browser may look for the patterns to ensure a properly-formatted e-mail address should be entered.

    Let’s try out this example by entering any e-mail address to see how it actually works:

    Example

    <form>
        <label for="myemail">Enter Email Address:</label>
        <input type="email" id="myemail" required>
    </form>

    Tip: You can style the email input field for different validation states, when an value is entered using the :valid:invalid or :required pseudo-classes.

    Note: The validation for the email input (i.e. type="email") is supported by all major browsers like Firefox, Chrome, Safari, Opera, Internet Explorer 10 and above.


    Input Type Month

    The month input type allows the user to select a month and year from a drop-down calendar.

    The value is a string in the format “YYYY-MM”, where YYYY is the four-digit year and MM is the month number. Let’s try out an example to see how this basically works:

    Example

    <form>
        <label for="mymonth">Select Month:</label>
        <input type="month" id="mymonth">
    </form>
    
    

    Input Type Number

    The number input type can be used for entering a numerical value. You can also restrict the user to enter only acceptable values using the additional attributes minmax, and step.

    The following example will allow you to enter a numeric value between 1 to 10.

    Example

    <form>
        <label for="mynumber">Enter a Number:</label>
        <input type="number" min="1" max="10" step="0.5" id="mynumber">
    </form>

    Note: The number input (i.e. type="number") is supported by all major web browsers such as Firefox, Chrome, Safari, Opera, Internet Explorer 10 and above. Internet Explorer however recognized the number but do not provide increment and decrement spin buttons.


    Input Type Range

    The range input type can be used for entering a numerical value within a specified range. It works very similar to number input, but it offers a simpler control for entering a number.

    Let’s try out the following example to understand how it basically works:

    Example

    <form>
        <label for="mynumber">Select a Number:</label>
        <input type="range" min="1" max="10" step="0.5" id="mynumber">    
    </form>

    Note: The range input (i.e. type="range") is supported by all major web browsers such as Firefox, Chrome, Safari, Opera, Internet Explorer 10 and above.


    Input Type Search

    The search input type can be used for creating search input fields.

    A search field typically behaves like a regular text field, but in some browsers like Chrome and Safari as soon as you start typing in the search box a small cross appears on the right side of the field that lets you quickly clear the search field. Let’s try out an example to see how it works:

    Example

    <form>
        <label for="mysearch">Search Website:</label>
        <input type="search" id="mysearch">
    </form>

    Note: The search input (i.e. type="search") is supported by all major web browsers such as Firefox, Chrome, Safari, Opera, Internet Explorer 10 and above.


    Input Type Tel

    The tel input type can be used for entering a telephone number.

    Browsers don’t support tel input validation natively. However, you can use the placeholder attribute to help users in entering the correct format for a phone number, or specify a regular expression to validate the user input using the pattern attribute. Let’s check out an example:

    Example

    <form>
        <label for="myphone">Telephone Number:</label>
        <input type="tel" id="myphone" placeholder="xx-xxxx-xxxx" required>
    </form>

    Note: The validation for tel input (i.e. type="tel") is currently not supported by any browser because format for phone numbers vary so much across countries, but it is still useful. Mobile browsers display a numeric keyboard for tel input field for entering phone numbers.


    Input Type Time

    The time input type can be used for entering a time (hours and minutes).

    Browser may use 12- or 24-hour format for inputting times, based on local system’s time setting.

    Example

    Try this code »

    <form>
        <label for="mytime">Select Time:</label>
        <input type="time" id="mytime">
    </form>
    
    

    Input Type URL

    The url input type can be used for entering URL’s or web addresses.

    You can use the multiple attribute to enter more than one URL. Also, if required attribute is specified browser will automatically carry out validation to ensure that only text that matches the standard format for URLs is entered into the input box. Let’s see how this works:

    Example

    <form>
        <label for="myurl">Enter Website URL:</label>
        <input type="url" id="myurl" required>
    </form>

    Note: The validation for the url input (i.e. type="url") is supported by all major browsers like Firefox, Chrome, Safari, Opera, Internet Explorer 10 and above.


    Input Type Week

    The week input type allows the user to select a week and year from a drop-down calendar.

    Let’s try out the following example to understand how this works:

    Example

    <form>
        <label for="myweek">Select Week:</label>
        <input type="week" id="myweek">
    
  • HTML Head

    The HTML head Element

    The <head> element primarily is the container for all the head elements, which provide extra information about the document (metadata), or reference to other resources that are required for the document to display or behave correctly in a web browser.

    The head elements collectively describes the properties of the document such as title, provide meta information like character set, instruct the browser where to find the style sheets or scripts that allows you to extend the HTML document in a highly active and interactive ways.

    The HTML elements that can be used inside the <head> element are: <title><base><link><style><meta><script> and the <noscript> element.

    The HTML title Element

    The <title> element defines the title of the document.

    The title element is required in all HTML/XHTML documents to produce a valid document. Only one title element is permitted in a document and it must be placed within the <head> element. The title element contains plain text and entities; it may not contain other markup tags.

    The title of the document may be used for different purposes. For example:

    • To display a title in the browser title bar and in the task bar.
    • To provide a title for the page when it is added to favorites or bookmarked.
    • To displays a title for the page in search-engine results.

    The following example demonstrates how to place title in an HTML document.

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>A simple HTML document</title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
    </html>

    Tip: A good title should be short and specific to the document’s content, because search engine’s web crawlers pay particular attention to the words used in the title. The title should ideally be less than 65 characters in length. See the guidelines for titles.


    The HTML base Element

    The HTML <base> element is used to define a base URL for all relative links contained in the document, e.g. you can set the base URL once at the top of your page, and then all subsequent relative links will use that URL as a starting point. Here’s an example:

    Example

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Defining a base URL</title>
        <base href="https://www.tutorialrepublic.com/">
    </head>
    <body>
        <p><a href="html-tutorial/html-head.php">HTML Head</a>.</p>
    </body>
    </html>

    The hyperlink in the example above will actually resolve to https://www.foobrdigital.com/html-tutorial/html-head.php regardless of the URL of the current page. This is because the relative URL specified in the link: html-tutorial/html-head.php is added to the end of the base URL: https://www.tutorialrepublic.com/.

    Warning: The HTML <base> element must appear before any element that refers to an external resource. HTML permits only one base element for each document.


    The HTML link Element

    The <link> element defines the relationship between the current document and an external documents or resources. A common use of link element is to link to external style sheets.

    Example

    <head>
        <title>Linking Style Sheets</title>
        <link rel="stylesheet" href="style.css">
    </head>

    Please check out the CSS tutorial section to learn about style sheets in detail.

    Note: An HTML document’s <head> element may contain any number of <link> elements. The <link> element has attributes, but no contents.


    The HTML style Element

    The <style> element is used to define embedded style information for an HTML document. The style rules inside the <style> element specify how HTML elements render in a browser.

    Example

    <head>
        <title>Embedding Style Sheets</title>
        <style>
            body { background-color: YellowGreen; }
            h1 { color: red; }
            p { color: green; }
        </style>
    </head>

    Note: An embedded style sheet should be used when a single document has a unique style. If the same style sheet is used in multiple documents, then an external style sheet would be more appropriate. See the tutorial on HTML styles to learn more about it.


    The HTML meta Element

    The <meta> element provides metadata about the HTML document. Metadata is a set of data that describes and gives information about other data. Here’s an example:

    Example

    <head>
        <title>Specifying Metadata</title>
        <meta charset="utf-8">
        <meta name="author" content="John Smith">
    </head>

    The meta element will be explained in more detail in the next chapter.


    The HTML script Element

    The <script> element is used to define client-side script, such as JavaScript in HTML documents.

    The following example will display a greeting message in the browser:

    Example

    <head>
        <title>Adding JavaScript</title>
        <script>
            document.write("<h1>Hello World!</h1>") 
        </script>
    </head>

    The script and noscript element will be explained in detail in the later chapter.