mirror of
https://github.com/dawidolko/Website-Templates.git
synced 2025-10-27 07:53:11 +01:00
153 lines
3.5 KiB
JavaScript
153 lines
3.5 KiB
JavaScript
/*
|
||
|
||
jQuery-плагин для построения круговых диаграмм
|
||
|
||
Вызов:
|
||
|
||
в html создается разметка
|
||
<div data-percent="15.2%"></div>
|
||
|
||
здесь указывается data-атрибут data-percent с данными,
|
||
которые затем будут отображены на диаграмме.
|
||
|
||
$(jQuery Selector).diagram({
|
||
size: "200",
|
||
borderWidth: "20",
|
||
bgFill: "#95a5a6",
|
||
frFill: "#1abc9c",
|
||
textSize: 54,
|
||
textColor: '#2a2a2a'
|
||
});
|
||
|
||
параметры:
|
||
size - размер диаграммы в px
|
||
borderWidth - толщина обводки
|
||
bgFill - цвет незаполненной части
|
||
frFill - цвет заполненной части
|
||
textSize - размер шрифта для надписи
|
||
textColor - цвет шрифта для надписи
|
||
font - семейство шрифтов (например, "'PT Sans', Arial, sans-serif")
|
||
|
||
если не передать параметры, то будут установлены параметры по-умолчанию
|
||
var defaults = {
|
||
size: "100",
|
||
borderWidth: "10",
|
||
bgFill: '#bbb',
|
||
frFill: '#0bf',
|
||
textSize: 50,
|
||
font: "serif",
|
||
textColor: '#000'
|
||
};
|
||
|
||
|
||
поддержка браузерами: в IE не работает
|
||
|
||
*/
|
||
|
||
|
||
(function($) {
|
||
|
||
$.fn.diagram = function(params){
|
||
|
||
function rotate(angle) {
|
||
return {
|
||
"-webkit-transform": "rotate("+angle+"deg)",
|
||
"-moz-transform": "rotate("+angle+"deg)",
|
||
"-ms-transform": "rotate("+angle+"deg)",
|
||
"-o-transform": "rotate("+angle+"deg)",
|
||
"transform": "rotate("+angle+"deg)"
|
||
};
|
||
}
|
||
|
||
var defaults = {
|
||
size: "100",
|
||
borderWidth: "10",
|
||
bgFill: '#bbb',
|
||
frFill: '#0bf',
|
||
textSize: 50+'px',
|
||
font: "serif",
|
||
textColor: '#000'
|
||
};
|
||
|
||
var options = $.extend({}, defaults, params);
|
||
|
||
var $this = $(this);
|
||
var dataAttr = $this.data("percent");
|
||
var data = parseFloat(dataAttr);
|
||
|
||
var cssMain = {
|
||
"position": "relative",
|
||
"width": options.size+"px",
|
||
"height": options.size+"px",
|
||
"border": options.borderWidth + "px " + "solid" + options.bgFill,
|
||
"border-radius": "50%",
|
||
"z-index": "1"
|
||
};
|
||
|
||
var cssElems = {
|
||
"position": "absolute",
|
||
"top": -options.borderWidth+"px",
|
||
"right": -options.borderWidth+"px",
|
||
"bottom": -options.borderWidth+"px",
|
||
"left": -options.borderWidth+"px",
|
||
"border": options.borderWidth+"px " + "solid",
|
||
"border-radius": "50%"
|
||
};
|
||
|
||
$this.css(cssMain);
|
||
|
||
var text = $('<span></span>')
|
||
.appendTo($this)
|
||
.css({
|
||
"display": "block",
|
||
"position": "relative",
|
||
"z-index": "2",
|
||
"text-align": "center",
|
||
"font-size": options.textSize,
|
||
"font-family": options.font,
|
||
"height": options.size+"px",
|
||
"line-height": options.size+"px",
|
||
"color": options.textColor
|
||
})
|
||
.text(dataAttr);
|
||
|
||
var bg = $('<div></div>')
|
||
.appendTo($this)
|
||
.css(cssElems)
|
||
.css({
|
||
"border-color": options.frFill,
|
||
"border-left-color": "transparent",
|
||
"border-bottom-color": "transparent",
|
||
"z-index": "1"
|
||
});
|
||
|
||
var fill = $('<div></div>')
|
||
.appendTo($this)
|
||
.css(cssElems)
|
||
.css({
|
||
"border-color": options.bgFill,
|
||
"border-left-color": "transparent",
|
||
"border-bottom-color": "transparent",
|
||
"z-index": "1"
|
||
});
|
||
|
||
var angle;
|
||
if (data >= 0 && data <= 50) {
|
||
angle = (225 - 45)/50*data + 45;
|
||
} else {
|
||
angle = (405 - 225)/50*data + 225;
|
||
fill.css({
|
||
"border-color": options.frFill,
|
||
"border-left-color": "transparent",
|
||
"border-bottom-color": "transparent",
|
||
"z-index": "1"
|
||
});
|
||
}
|
||
|
||
bg.css(rotate(45));
|
||
fill.css(rotate(angle));
|
||
|
||
return this;
|
||
};
|
||
|
||
})(jQuery); |