First Initial
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
###
|
||||
Easy pie chart is a jquery plugin to display simple animated pie charts for only one value
|
||||
|
||||
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
|
||||
Built on top of the jQuery library (http://jquery.com)
|
||||
|
||||
@source: http://github.com/rendro/easy-pie-chart/
|
||||
@autor: Robert Fleischmann
|
||||
@version: 1.0.1
|
||||
|
||||
Inspired by: http://dribbble.com/shots/631074-Simple-Pie-Charts-II?list=popular&offset=210
|
||||
Thanks to Philip Thrasher for the jquery plugin boilerplate for coffee script
|
||||
###
|
||||
|
||||
(($) ->
|
||||
$.easyPieChart = (el, options) ->
|
||||
|
||||
@el = el
|
||||
@$el = $ el
|
||||
@$el.data "easyPieChart", @
|
||||
|
||||
@init = =>
|
||||
@options = $.extend {}, $.easyPieChart.defaultOptions, options
|
||||
|
||||
#get relevant data
|
||||
percent = parseInt @$el.data('percent'), 10
|
||||
@percentage = 0
|
||||
|
||||
#create canvas element and set the origin to the center
|
||||
@canvas = $("<canvas width='#{@options.size}' height='#{@options.size}'></canvas>").get(0)
|
||||
@$el.append @canvas
|
||||
G_vmlCanvasManager.initElement @canvas if G_vmlCanvasManager?
|
||||
@ctx = @canvas.getContext '2d'
|
||||
|
||||
if window.devicePixelRatio > 1
|
||||
scaleBy = window.devicePixelRatio
|
||||
$(@canvas).css({
|
||||
width: @options.size
|
||||
height: @options.size
|
||||
})
|
||||
@canvas.width *= scaleBy
|
||||
@canvas.height *= scaleBy
|
||||
@ctx.scale scaleBy, scaleBy
|
||||
|
||||
@ctx.translate @options.size/2, @options.size/2
|
||||
@$el.addClass 'easyPieChart'
|
||||
@$el.css {
|
||||
width: @options.size
|
||||
height: @options.size
|
||||
lineHeight: "#{@options.size}px"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@update percent
|
||||
@
|
||||
|
||||
@update = (percent) =>
|
||||
if @options.animate == false
|
||||
drawLine percent
|
||||
else
|
||||
animateLine @percentage, percent
|
||||
|
||||
renderScale = =>
|
||||
@ctx.fillStyle = @options.scaleColor
|
||||
@ctx.lineWidth = 1
|
||||
addScaleLine i for i in [0..24]
|
||||
|
||||
addScaleLine = (i) =>
|
||||
offset = if i%6==0 then 0 else @options.size*0.017
|
||||
@ctx.save()
|
||||
@ctx.rotate i * Math.PI / 12
|
||||
@ctx.fillRect @options.size/2-offset, 0, -@options.size*0.05+offset, 1
|
||||
@ctx.restore()
|
||||
|
||||
renderTrack = =>
|
||||
offset = @options.size/2-@options.lineWidth/2
|
||||
offset -= @options.size*0.08 if @options.scaleColor != false
|
||||
|
||||
@ctx.beginPath()
|
||||
@ctx.arc 0, 0, offset, 0, Math.PI * 2, true
|
||||
@ctx.closePath()
|
||||
@ctx.strokeStyle = @options.trackColor
|
||||
@ctx.lineWidth = @options.lineWidth
|
||||
@ctx.stroke()
|
||||
|
||||
renderBackground = =>
|
||||
do renderScale if @options.scaleColor != false
|
||||
do renderTrack if @options.trackColor != false
|
||||
|
||||
drawLine = (percent) =>
|
||||
do renderBackground
|
||||
|
||||
@ctx.strokeStyle = if $.isFunction @options.barColor then @options.barColor percent else @options.barColor
|
||||
@ctx.lineCap = @options.lineCap
|
||||
@ctx.lineWidth = @options.lineWidth
|
||||
|
||||
offset = @options.size/2-@options.lineWidth/2
|
||||
offset -= @options.size*0.08 if @options.scaleColor != false
|
||||
|
||||
@ctx.save()
|
||||
@ctx.rotate -Math.PI/2
|
||||
@ctx.beginPath()
|
||||
@ctx.arc 0, 0, offset, 0, Math.PI * 2 * percent/100, false
|
||||
@ctx.stroke()
|
||||
@ctx.restore()
|
||||
|
||||
animateLine = (from, to) =>
|
||||
fps = 30
|
||||
steps = fps * @options.animate/1000
|
||||
currentStep = 0
|
||||
|
||||
@options.onStart.call @
|
||||
@percentage = to
|
||||
|
||||
if @animation
|
||||
clearInterval @animation
|
||||
@animation = false
|
||||
|
||||
@animation = setInterval =>
|
||||
@ctx.clearRect -@options.size/2, -@options.size/2, @options.size, @options.size
|
||||
renderBackground.call @
|
||||
drawLine.call @, [easeInOutQuad currentStep, from, to-from, steps]
|
||||
|
||||
currentStep++
|
||||
|
||||
if (currentStep/steps) > 1
|
||||
clearInterval @animation
|
||||
@animation = false
|
||||
@options.onStop.call @
|
||||
|
||||
, 1000/fps
|
||||
|
||||
#t=time;b=beginning value;c=change in value;d=duration
|
||||
easeInOutQuad = (t, b, c, d) ->
|
||||
|
||||
easeIn = (t) ->
|
||||
return Math.pow(t, 2) # Quad
|
||||
easing = (t) ->
|
||||
if (t < 1)
|
||||
return easeIn(t)
|
||||
else
|
||||
return 2 - easeIn( (t/2) * -2 + 2 )
|
||||
|
||||
t /= d / 2
|
||||
return c / 2 * easing(t) + b
|
||||
|
||||
@init()
|
||||
|
||||
$.easyPieChart.defaultOptions =
|
||||
barColor: '#ef1e25'
|
||||
trackColor: '#f2f2f2'
|
||||
scaleColor: '#dfe0e0'
|
||||
lineCap: 'round'
|
||||
size: 110
|
||||
lineWidth: 3
|
||||
animate: false
|
||||
onStart: $.noop
|
||||
onStop: $.noop
|
||||
|
||||
$.fn.easyPieChart = (options) ->
|
||||
$.each @, (i, el) ->
|
||||
$el = ($ el)
|
||||
|
||||
unless $el.data 'easyPieChart'
|
||||
$el.data 'easyPieChart', new $.easyPieChart el, options
|
||||
|
||||
undefined
|
||||
)(jQuery)
|
||||
Reference in New Issue
Block a user