JavaScript Banner Rotator

Updated on November 21, 2018
carny profile image

I use this very script to rotate several graphical banners on my website. It's been tested on every modern browser (Firefox, Chrome, Edge).

What This Script Does

This free JavaScript banner rotator displays a random, clickable image on your website. It is written in plain JS and does not require any additional libraries like jQuery. The random selection is done client-side, so it's easier on your server, too.

As the rotator script is very basic and does not provide any additional features like click tracking, it will probably be of interest to webmasters just starting out on monetizing their site. Bigger projects might warrant the use of an ad manager - although they're not without downsides either, as they can be pricy and come with additional overhead.

The JavaScript

Place this code within a text file and save it as, let's say, rotator.js:

var banner = [
["", ""],
["", ""],
["", ""],
["", ""]

function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = a[i];
        a[i] = a[j];
        a[j] = x;
    return a;


document.getElementById('ad-container').innerHTML = '<a href="'+banner[0][0]+'" target="_blank" rel="nofollow"><img src="'+banner[0][1]+'" height="250" width="300" alt="300x250 Banner Ad" /></a>';

The example code contains four banners in an array, which is shuffled as to be random, and outputted into the container to which we'll get in a moment. You can add as many or as few banners as you like - just replace the with the real link, and with the URL of an actual image.

Unlike some similar banner rotator scripts found on the web, this one does not store the entire HTML of the banner in the array, but only the link and the image, which saves memory. The HTML output is at the very bottom of the script and should be edited with your actual banner dimensions (300x250 in the example).


You should have an empty container div with the ID of ad-container somewhere in your HTML, into which the script will dynamically insert the banner:

<div id="ad-container"></div>

The container's dimensions should be specified in CSS so as to avoid browser repaints when the banner is loaded. If you're using 300x250 size banners, for example, you'll want to put the following into your stylesheet:

#ad-container {height:250px;width:300px;}
#ad-container img {border:0;}

Or, just be a heathen and style the container inline:

<div id="ad-container" style="width:300px;height:250px;"></div>

Loading the Script

Now load the script by putting the following anywhere between your <body> tags:

<script src="/rotator.js" async></script>

As the script will be loaded asynchronously thanks to the async attribute, it won't block page rendering, nor is there any need to go out of your way and place it right before the closing </body> tag (although you still can, of course, if you're concerned about those outdated browsers which do not support async).

Responsive Design

If your website is responsive, perhaps the banner's container will be hidden on narrow-enough screens. If that's the case, you should prevent the banner from loading to make your website faster for mobile users. Edit the original rotator script by adding the following check:

if (window.matchMedia("(min-width: 1024px)").matches) {
	//the original script goes here

This will prevent the script from loading a banner unless the screen is at least 1024 pixels wide. Adjust the number to match the media queries in your stylesheet.

Questions & Answers

  • Would there be an easy way to tie two separate banners together? For instance, a sidebar + a footer banner - if the sidebar gets the first banner chosen, match the footer banner to that array number as well?

    Yes, that would be quite easy. Instead of a link + image in the array, you'd have a link + image + another image. Then at the bottom of the script, you'd call two divs (sidebar and footer) instead of one.

    I've made a JSFiddle that should be self-explanatory:

    In this example, the destination URL remains the same for both linked banners (300x250 and 160x600), but you can just as easily have a different URL - you would just need to add a fourth entry for each array element (so each would have two different links and two different images).


    0 of 8192 characters used
    Post Comment

    No comments yet.


    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at:

    Show Details
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the or domains, for performance and efficiency reasons. (Privacy Policy)
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)
    ClickscoThis is a data management platform studying reader behavior (Privacy Policy)