Saturday, January 8, 2011

How To Draw a Circle in HTML <5 (without Canvas/SVG)

The following tiny script allows to draw circles in "regular" pre-HTML 5 document, it is so fast that it really allows for animations in real time.

Example:

   drawCircle(500, 500, 150, "red", 50, 1);

This will draw a  red circle, 50% transparent, with 150 px radius at the point (500,500). The circle will be drawn using 1px-fine pen (granularity).
The wider is the "pen" the faster is the routine. I usually increase granularity to 4px while dragging/sizing for speed and then re-render with 1px granularity upon drag grip release.


Here is the self-sufficient(does not rely on any libs) procedural source code:


//classic one
function isIE()
{
 return (navigator.appName.indexOf("Microsoft")!=-1);
}

function drawCircle(cx, cy, r, clr, op, gran)
{
 var x = 0;
 var div; 
 
 var dc = document.createElement("DIV");//aka "Device Context" wich is a DIV in doc tree
 dc.style.position="absolute";
 dc.innerHTML = "&nbsp;";
 dc.style.left = cx - r; 
 dc.style.top =  cy - r; 
 
 cx = r; cy = r;
 
 if (gran<1) gran = 1;
 
 if ((r/gran)> 280) gran = Math.round(r / 280);
  
 for(var y=0; y<=r; y+=gran)
 {
  x = Math.sqrt((r*r) - (y*y));
  
  div = document.createElement("DIV");
    
  div.style.position="absolute";
  div.style.background = clr;
  div.style.left = cx - x;
  div.style.top = cy+y;
  div.style.width= x*2;
  div.style.height=gran;
  div.style.fontSize=1;
  div.innerHTML = "&nbsp;";
  setObjectOpacity(div, op);
  dc.appendChild(div);
  
  div = document.createElement("DIV");
  div.style.position="absolute";
  div.style.background = clr;
  div.style.left = cx - x;
  div.style.top = cy-y-gran;
  div.style.width= x*2;
  div.style.height=gran;
  div.style.fontSize=1;
  div.innerHTML = "&nbsp;";
  setObjectOpacity(div, op);
  dc.appendChild(div);
  
 }
 
 return dc;
}//drawCircle

//semi-transparent through CSS/filter
function setObjectOpacity(obj, opacity) 
{
  //IE
  if (isIE())
   obj.style.filter = "alpha(opacity:"+opacity+")";
  else
  {
    opacity = (opacity == 100)?99.999:opacity;//99.9 for Firefox flicker bug
  
    // Konqueror, Safari
    obj.style.KHTMLOpacity = opacity / 100;
    // Old Mozilla and Firefox
    obj.style.MozOpacity = opacity / 100;
    // CSS3,  Safari , new Firefox (Gecko)
    obj.style.opacity = opacity / 100;
  }//else
}//setObjectOpacity


As you can see, this approach uses DIVs as a vehicle for graphics delivery. Also, one may ask why I did not use squares to reduce
 the number of DIVs - the answer is - flicker - squares would have overlapped and would have worked slower than interlaced DIVs.

Use as you please!


15 comments:

Anonymous said...

Cool, HTML5 will not come for some time yet

Anonymous said...

you forgot

document.body.appendChild(drawCircle(...))

Anonymous said...

This is obsolete, but great post though. One of my clients uses ie6 and plans to keep it till Xp supporting hardware is available bummmmmmr

web design Perth said...

Thank you for sharing, I've been dabbling with CSS and now I think I seem to live HTML5 better.

Anonymous said...

I am new to this, would you mind showing where the function drawCircle() is called from? Presume it is html?

Web Design Birmingham AL said...

Thank you for the hard work and effort putting on the website. Your blog is great with more informative and useful ideas.

Unknown said...

20150623meiqing
louis vuitton
louis vuitton
fitflop footwear
oakley store
kate spade outlet
ralph lauren outlet
ray ban sunglasses
jordan 8 playoffs
oakley vault
toms outlet
www.louisvuitton.com
hollister
jordan concord 11s
michael kors outlet online
chanel bags
christian louboutin outlet
coach outlet
fitflops clearance
louboutin
louis vuitton outlet
coach outlet
coach outlet store online
marc jacobs handbags
toms promo code
oakley sunglasses wholesale
lebron james basketball shoes
prada
jeremy scott shoes
oakley sunglasses
abercrombie outlet
louis vuitton
discount oakley sunglasses
christian louboutin outlet
michael kors uk
ray ban wayfarer
concords 11
kd shoes
kate spade handbags
pandora charms
abercrombie & fitch

Unknown said...

ddddd0925fred perry polo, http://www.fredperrypoloshirts.com/
coach outlet online,coach purses,coach handbags,coach bags,coach handbags sale,coach handbags outlet
hollister,hollister canada,abercrombie and fitch,abercrombie,abercrombie fitch,abercrombie kids,a&f
nike air foamposite one,foamposite,foamposites,foamposite release 2015,foamposite sneakers,foamposites for sale,foamposite gold
ugg boots, http://www.uggboot.com.co/
links of london uk, http://www.linksoflondons.co.uk/
louis vuitton outlet online, http://www.louisvuittonoutlet.in.net/
rolex watches,rolex,watches for men,watches for women,omega watches,replica watches,rolex watches for sale,rolex replica,rolex watch,cartier watches,rolex submariner,fake rolex,rolex replica watches,replica rolex
ralph lauren,ralph lauren uk,ralph lauren outlet,ralph lauren outlet online,polo ralph lauren outlet,ralph lauren polo
dansko clogs, http://www.dansko-shoes.us/
kobe bryants shoes 2015, http://www.kobeshoes.us/
michael kors outlet store, http://www.michaelkorsoutletonlinstore.us.com/
monster beats, http://www.beats-headphones.in.net/
san antonio spurs, http://www.sanantoniospursjersey.com/
kobe bryant store, http://www.kobebryantshoes.in.net/
nfl jerseys wholesale, http://www.nfljerseys-wholesale.us.com/
new york knicks, http://www.newyorkknicksjerseys.com/
chanel handbags, http://www.chanelhandbags-outlet.us.com/

mmjiaxin said...

Cheap Oakley Sunglasses
nike huaraches
http://www.cheapauthenticjordans.us.com
mlb jerseys authentic
fitflop shoes
oakley sunglasses,oakley vault,oakley sunglasses cheap,oakleys,oakley.com,sunglasses outlet,cheap oakley
http://www.christian-louboutin-outlet.uk
tiffany & co
michael kors outlet online
mlb jerseys authentic
cheap air jordans
tiffany and co
michael kors outlets
nfl jerseys
michael kors purses
http://www.jordansforcheap.us.com
http://www.michaeljordanshoes.us.com
nike huarache
ralph lauren online,cheap ralph lauren
http://www.kobesneakers.com
gg

chenlina said...

michael kors outlet
ugg outlet
ray bans
fitflop shoes
seattle seahawks jerseys
cheap ray ban sunglasses
kate spade outlet
los angeles clippers jerseys
adidas outlet
oakley sunglasses
chenlina20161027

Unknown said...

pittsburgh steelers jersey
skechers outlet
bears jerseys
michael kors outlet
dolce and gabbana outlet
michael kors handbags
coach outlet
colts jerseys
coach outlet
oakley sunglasses

John said...

cavaliers jerseys
nike roshe one
michael kors outlet store
pandora charms sale clearance
jerseys cheap
mlb jerseys
ysl bags
pandora
christian louboutin shoes
pandora bracelet
20170704yuanyuan

Pengobatan Sakit Pinggang said...

Obat Penghancur Benjolan di Leher
Pengobatan efektif Menghilangkan Benjolan di Payudara
Pengobatan Miom tanpa Operasi
Obat Luka Berair yang Tak Kunjung Sembuh
Obat Tradisional Radang Tenggorokan
Khasiat Daun Sirsak untuk Benjolan

Unknown said...

2018531 leilei3915
canada goose
ray ban sunglasses
pandora outlet
coach outlet store online
pandora charms
kate spade outlet online
michael kors handbags
christian louboutin shoes
louis vuitton outlet online
true religion

Obat Maag Alami said...

thank you for joining us. his article is very helpful

Obat Keputihan Alami