Making Circular Progress bar with html5 svg

I have made this circular graph with the canvas. Canvas Circular Graph
The green progress starts from 120 degrees clockwise and ends at 60 degrees clockwise. In canvas you do this with

  1. context.arc(centerx, centery,radius, startangle, endangle, anticlockwise);

But I am finding it too dificult from the SVG. Can anyone tell me how to do it from svg.
The reason why i like to do it from SVG is that when the progress is animated, the quality of the canvas degrades when the screen is zoomed. And by the way if you need a code for this i can give it to you. It is highly configurable:


1 Solution
Solution

The arc command of canvas is pretty simple. But in SVG you have to use path to draw circular progress and it is a bit complex.
The code for making progress is

  1. <path d="M startx starty A radiusx radiusy x-axis-rotation large-arc-flag sweep-flag endx endy " />

The idea behind drawing the progress is that you have to draw a path that passes from the circumference of a circle which starts from specified angle and ends at specified angle. There is a mathematical formula for finding point in the circumference of circle which you can use to create path in svg

  1. x = centerx + radius * Math.cos(anglein radians);
  2. y = centery + radius * Math.cos(anglein radians);

To simplify things, i have found a function that calculates the path. You just have to write this:

  1. progress(200, 200, 120, -150, 150);

The progress function takes the following parameters:

  1. progress(centerx,centery,startangle,endangle);

This draws a full progress.If you want to change the progress change the end angle i.e decrease it.This is just the idea behind drawing circular path.

Here is the JSFiddle link





JSFiddle code


<svg id="svg" width="1000" height="500">

<circle cx="200" cy="200" r="150" stroke="#ccc" stroke-width="1" fill="none" />

<circle cx="200" cy="200" r="135" stroke="#ccc" stroke-width="1" fill="#777" />

<text x="180" y="200" fill="white">Power</text>

<path id="arc1" fill="none" stroke="#0f0" stroke-width="30" />

</svg>


var svg = document.getElementById("svg");

function polarToCartesian(centerX, centerY, radius, angleInDegrees) {

var angleInRadians = (angleInDegrees-90) * Math.PI / 180.0;


return {

x: centerX + (radius * Math.cos(angleInRadians)),

y: centerY + (radius * Math.sin(angleInRadians))

};

}


function describeArc(x, y, radius, startAngle, endAngle){


var start = polarToCartesian(x, y, radius, endAngle);

var end = polarToCartesian(x, y, radius, startAngle);


//var arcSweep = endAngle - startAngle <= 180 ? "0" : "1";

var arcSweep = 1;

var d = [

"M", start.x, start.y, 

"A", radius, radius, 0, arcSweep, 0, end.x, end.y

].join(" ");

return d;       

}

document.getElementById("arc1").setAttribute("d", describeArc(200, 200, 120, -150, 150));



출처 - http://www.ggkf.com/html5/making-circular-progress-bar-with-html5-svg





'Development > HTML5' 카테고리의 다른 글

html5 - WebSocket javascript 설정  (0) 2014.03.26
Posted by linuxism
,


전역 고유 식별자(全域固有識別子, 영어: Globally Unique Identifier, GUID)는 응용 소프트웨어에서 사용되는 유사 난수이다. GUID는 생성할 때 항상 유일한 값이 만들어진다는 보장은 없지만, 사용할 수 있는 모든 값의 수가 2128 = 3.4028×1038개로 매우 크기 때문에, 적절한 알고리즘이 있다면 같은 숫자를 두 번 생성할 가능성은 매우 적다.

GUID는 오라클 데이터베이스 등 많은 곳에서 쓰이지만, 가장 눈에 띄는 구현은 아마도 마이크로소프트의 구현일 것이다. 표준으로는 오픈 소프트웨어 파운데이션(Open Software Foundation, OSF)이 지정한 범용 고유 식별자(Universally Unique Identifier, UUID)가 있다.

GUID는 '그위드'라 발음하는데, 이는 특히 마이크로소프트에 의해 사용된다. 다른 발음으로는 '구이드'가 있다.

기본 구조[편집]

GUID는 16바이트, 즉 128비트 숫자이다. 16진수로 쓰면 다음과 같은 형태이다:

3F 25 04 E0 4F 89 11 D3 9A 0C 03 05 E8 2C 33 01

특별히 규정된 텍스트 표현이 없기 때문에, GUID를 텍스트로 쓰는 방법은 구현에 따라 다를 수 있다. 많이 사용되는 표현 중 하나로 GUID를 순서대로 4바이트, 2바이트, 2바이트, 8바이트로 나눈 뒤 하이픈으로 구분하여 16진수로 작성하고 중괄호로 묶는 방법이 있다. 다음은 위의 GUID를 이 방법으로 표현한 것이다.

{3F2504E0-4F89-11D3-9A0C0305E82C3301}

비슷하게, 자료 구조로 사용할 때는 다음과 같은 형태가 가장 일반적이다.

시작 위치(비트)끝 위치(비트)형식guiddef.h의 C 자료형[1]
03132비트 부호없는 정수unsigned long
324716비트 부호없는 정수unsigned short
486316비트 부호없는 정수unsigned short
641278비트 부호없는 정수 8개unsigned char[8]
[1] C 자료형은 컴파일러에 따라 크기가 다를 수 있다.

알고리즘[편집]

새로운 GUID를 생성하는 OSF의 알고리즘(V1 GUID)은 광범위한 비판을 받고 있다. 이 알고리즘은 GUID의 마지막 숫자 그룹을 생성할 때 사용자 네트워크 카드의 MAC 주소를 기반으로서 사용하기 때문에, 특정 문서를 작성한컴퓨터를 추적하는 일 등이 가능하도록 하고 있다. 이러한 헛점은 멜리사(Melissa) 을 만든 개발자를 찾는데 사용되기도 하였다.

MAC 주소를 사용하는 V1 GUID는 {2f1e4fc0-81fd-11da-9156-00036a0f876a}와 같이 세 번째 숫자 그룹의 첫 번째 숫자에 "1"을 사용한다. 이후의 알고리즘을 사용하는 GUID는 MAC 주소 대신 임의의 숫자를 사용하며, {38a52be4-9352-453e-af97-5c3b448652f0}처럼 숫자 "4"를 사용한다.

GUID의 사용[편집]

마이크로소프트 컴포넌트 오브젝트 모델(COM)에서는 GUID를 구성 요소의 인터페이스들을 구별하기 위해 사용한다. 즉 서로 호환되지 않을 수 있는 두개의 컴포넌트가 동일한 인터페이스 이름을 사용하더라도, 각각의 인터페이스는 언제나 고유한 GUID를 갖기 때문에 구별할 수 있게 된다.

COM에서 사용하는 GUID는 다음과 같다:

  • IID - 인터페이스 식별자
  • CLSID - 클래스 식별자
  • LIBID - 타입 라이브러리 식별자
  • CATID - 카테고리 식별자 (이 식별자가 클래스에 있으면, 해당 클래스가 특정 클래스 카테고리에 속한다는 것을 표시한다)

DCOM은 다음과 같은 GUID를 추가로 더 사용한다:

  • AppID - 응용 프로그램 식별자
  • MID - 기계 식별자
  • IPID - 인터페이스 포인터 식별자 (RPC 용 인터페이스에 사용)
  • CID - 커젤러티(causality) 식별자 (RPC 세션에 사용)
  • OID - 오브젝트 식별자 (오브젝트 인스턴스에 사용)
  • OXID - 오브젝트 익스포터 식별자 (RPC를 수행하는 시스템 오브젝트의 인스턴스에 사용)
  • SETID - 핑 셋 식별자 (오브젝트 그룹에 사용)

위의 GUID들은 쓰이는 형태가 서로 다르다면, 값이 중복되어도 문제가 되지 않는다. 예를 들어, 한 클래스의 CLSID와 다른 클래스의 IID가 서로 같더라도 두 클래스는 문제 없이 존재할 수 있다. 그러나 같은 CLSID를 가지는 두 개의 서로 다른 클래스가 존재하는 것은 불가능하다.

GUID는 또한 마이크로소프트 오피스 프로그램에서 작성한 문서에도 삽입된다. 능동 스트리밍 포맷(Advanced Streaming Format, ASF)에서는 각각의 오디오 및 비디오 스트림들에 GUID를 할당하여 식별한다.

XML 기반 배급 포맷[편집]

RSS의 일부 버전과 Atom에는 글 또는 웹로그 포스트를 유일하게 구별할 수 있도록 각각 guid 태그와 id 태그를 가지고 있지만, 이들의 쓰임은 조금 다르다. RSS의 guid 태그에는 어떠한 문자열도 사용할 수 있으며, 실제로는 일반적으로 포스트된 URL을 사용한다. Atom의 id 태그에는 반드시 유효한 URI를 사용해야 한다.

같이 보기[편집]

바깥 고리[편집]



출처 - http://ko.wikipedia.org/wiki/%EC%A0%84%EC%97%AD_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90


'Development > Common' 카테고리의 다른 글

First-class citizen, First-class function  (0) 2015.06.29
memory - Data segment, Code segment  (0) 2015.06.29
MD 확장자  (0) 2013.03.27
SMTP & POP3 Server list  (0) 2013.02.11
context  (0) 2012.11.21
Posted by linuxism
,


window.requestAnimationFrame()

The window.requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser call a specified function to update an animation before the next repaint. The method takes as an argument a callback to be invoked before the repaint.

Note: Your callback routine must itself call requestAnimationFrame() if you want to animate another frame at the next repaint.

You should call this method whenever you're ready to update your animation onscreen. This will request that your animation function be called before the browser performs the next repaint. The number of callbacks is usually 60 times per second, but will generally match the display refresh rate in most web browsers as per W3C recommendation. The callback rate may be reduced to a lower rate when running in background tabs.

The callback method is passed a single argument, a DOMHighResTimeStamp, which indicates the current time when callbacks queued by requestAnimationFrame begin to fire. Multiple callbacks in a single frame, therefore, each receive the same timestamp even though time has passed during the computation of every previous callback's workload. This timestamp is a decimal number, in milliseconds, but with a minimal precision of 10 µs.

Syntax

requestID = window.requestAnimationFrame(callback);       // Firefox 23 / IE 10 / Chrome / Safari 7 (incl. iOS)
requestID = window.mozRequestAnimationFrame(callback);    // Firefox < 23
requestID = window.webkitRequestAnimationFrame(callback); // Older versions of Safari / Chrome

Parameters

callback
A parameter specifying a function to call when it's time to update your animation for the next repaint. The callback has one single argument, aDOMHighResTimeStamp, which indicates the current time for when requestAnimationFrame starts to fire callbacks.

Return value

requestID is a long integer value that uniquely identifies the entry in the callback list. This is a non-zero value, but you may not make any other assumptions about its value. You can pass this value to window.cancelAnimationFrame() to cancel the refresh callback request.

Example

window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
                              window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;


var start = null;

var d = document.getElementById("SomeElementYouWantToAnimate");

function step(timestamp) {
  var progress;
  if (start === null) start = timestamp;
  progress = timestamp - start;
  d.style.left = Math.min(progress/10, 200) + "px";
  if (progress < 2000) {
    requestAnimationFrame(step);
  }
}

requestAnimationFrame(step);

Browser compatibility

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support10.0 webkit
24.0
4.0 moz [1]
23 [2]
10.0(Yes) -o
15.0
6.0 webkit
6.1
requestID return value23.0 webkit
24.0
11.0 (11.0) moz10.0(Yes) -o
15.0
(Yes)

Gecko notes

[1] Prior to Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8), mozRequestAnimationFrame() could be called with no input parameters. This is no longer supported, as it's not likely to become part of the standard.

[2] The callback parameter is a DOMTimeStamp instead of a DOMHighResTimeStamp if the prefixed version of this method was used. DOMTimeStamp only has millisecond precision, but DOMHighResTimeStamp has a minimal precision of ten microseconds.

Chrome notes

The correct call in Chrome to cancel the request is currently window.cancelAnimationFrame(). Older versions, window.webkitCancelAnimationFrame() &window.webkitCancelRequestAnimationFrame(), have been deprecated but are still supported for now.

Specification

Timing control for script-based animations: requestAnimationFrameWD

See also


source - https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame







Using requestAnimationFrame


There used to be just one way to do a timed loop in JavaScript:setInterval(). If you needed to repeat something pretty fast (but not as-fast-as-absolutely-possible like a for loop), you'd use that. For the purposes of animation, the goal is sixty "frames" per second to appear smooth, so you'd run a loop like this:

setInterval(function() {
  // animiate something
}, 1000/60);

There is a better alternative to this now. Paul Irish introduced requestAnimationFrame over two years ago. I don't have a whole lot to add to it, I just had never actually used it before and now I have so I thought I'd help spread the word and write about its basic usage.

Why better?

As Paul explained:

  • The browser can optimize it, so animations will be smoother
  • Animations in inactive tabs will stop, allowing the CPU to chill
  • More battery-friendly

The Simplest Possible Example

function repeatOften() {
  // Do whatever
  requestAnimationFrame(repeatOften);
}
requestAnimationFrame(repeatOften);

Call it once to kick it off, and your function recursively calls itself.

Start and Stop

requestAnimationFrame returns an ID you can use to cancel it, just like setTimeout orsetInterval does. jQuery used here only to demonstrate a simple animation and bind events.

var globalID;

function repeatOften() {
  $("<div />").appendTo("body");
  globalID = requestAnimationFrame(repeatOften);
}

$("#start").on("click", function() {
  globalID = requestAnimationFrame(repeatOften);
});

$("#stop").on("click", function() {
  cancelAnimationFrame(globalID);
});

Example of this:

Browser Support

See the Can I Use... tables.

The only notable problems are IE 9-, iOS 5-, and Android. But not actually a problem, because:

Polyfill

Like many fancy web features, it's nice to use it when available and fallback to something that works when you can't. Probably best just to refer to this Gist. Literally just include that chunk anywhere before you use requestAnimationFrame or cancelAnimationFrame.

Using this, you'll be able to use requestAnimationFrame in literally any browser.

Slightly More Complex Example

I learned about this while making a dumb little demo to learn canvas better:

What would actually be more complex is several animations running at once using this (that still falls back OK). Feel free to link some of that goodness up in the comments if you know of examples.



출처 - http://css-tricks.com/using-requestanimationframe/



Posted by linuxism
,