angular-sunburst-radar-chart
Version:
A Sunburst Radar chart with SVG,No Dependencies
45 lines • 6.36 kB
JavaScript
import { __read } from "tslib";
import { getCurrentPointFromEvent } from './utils';
import { calculateAngleRadian } from './trignometry';
export function createSvgHandlerWithSelector(selectorName, center) {
var svg = document.querySelector(selectorName);
var pt = svg.createSVGPoint();
var maxRad = 6.283185307179586;
var maxDeg = 360;
return {
initPoint: 0,
cursorPoint: function (evt) {
var _a = getCurrentPointFromEvent(evt), x = _a.x, y = _a.y;
pt.x = x;
pt.y = y;
return pt.matrixTransform(svg.getScreenCTM().inverse());
},
startDrag: function (evt, initialPoint) {
this.previousPoint = this.angleFromCenter(evt);
this.initPoint = initialPoint;
},
updateInitPointFromCurrentPoint: function (currentPoint) {
var difference = Math.abs(this.previousPoint - currentPoint);
if (currentPoint < this.previousPoint) {
this.initPoint += difference;
}
else {
this.initPoint -= difference;
}
},
getRotationAngle: function (evt) {
var currentPoint = this.angleFromCenter(evt);
this.updateInitPointFromCurrentPoint(currentPoint);
this.previousPoint = currentPoint;
return this.initPoint;
},
angleFromCenter: function (evt) {
var _a = __read([center.x, center.y], 2), centerX = _a[0], centerY = _a[1];
var _b = this.cursorPoint(evt), x = _b.x, y = _b.y;
var angleInRadian = calculateAngleRadian({ x: x, y: y, centerX: centerX, centerY: centerY, maxRad: maxRad });
var currentDegree = maxDeg * angleInRadian / (2 * Math.PI);
return currentDegree;
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLXJvdGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXN1bmJ1cnN0LXJhZGFyLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3N2Zy1yb3RhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsTUFBTTtJQUMvRCxJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pELElBQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUdoQyxJQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztJQUNqQyxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFHbkIsT0FBTztRQUVMLFNBQVMsRUFBRSxDQUFDO1FBR1osV0FBVyxZQUFDLEdBQUc7WUFDUCxJQUFBLGtDQUFzQyxFQUFyQyxRQUFDLEVBQUUsUUFBa0MsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNULEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRTFELENBQUM7UUFDRCxTQUFTLFlBQUMsR0FBRyxFQUFFLFlBQVk7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLENBQUM7UUFDRCwrQkFBK0IsWUFBQyxZQUFZO1lBRTFDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsQ0FBQztZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQzthQUM5QjtRQUVILENBQUM7UUFDRCxnQkFBZ0IsWUFBQyxHQUFHO1lBQ2xCLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1lBRWxDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV4QixDQUFDO1FBRUQsZUFBZSxZQUFDLEdBQUc7WUFFWCxJQUFBLG9DQUF5QyxFQUF4QyxlQUFPLEVBQUUsZUFBK0IsQ0FBQztZQUMxQyxJQUFBLDBCQUE4QixFQUE3QixRQUFDLEVBQUUsUUFBMEIsQ0FBQztZQUVyQyxJQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxFQUFDLENBQUMsR0FBQSxFQUFFLENBQUMsR0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFFLE1BQU0sUUFBQSxFQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RCxPQUFPLGFBQWEsQ0FBQztRQUV2QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldEN1cnJlbnRQb2ludEZyb21FdmVudH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7Y2FsY3VsYXRlQW5nbGVSYWRpYW59IGZyb20gJy4vdHJpZ25vbWV0cnknO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0hhbmRsZXJXaXRoU2VsZWN0b3Ioc2VsZWN0b3JOYW1lLCBjZW50ZXIpIHtcclxuICBjb25zdCBzdmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yTmFtZSk7XHJcbiAgY29uc3QgcHQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcclxuXHJcblxyXG4gIGNvbnN0IG1heFJhZCA9IDYuMjgzMTg1MzA3MTc5NTg2O1xyXG4gIGNvbnN0IG1heERlZyA9IDM2MDtcclxuXHJcblxyXG4gIHJldHVybiB7XHJcblxyXG4gICAgaW5pdFBvaW50OiAwLFxyXG5cclxuXHJcbiAgICBjdXJzb3JQb2ludChldnQpIHtcclxuICAgICAgY29uc3Qge3gsIHl9ID0gZ2V0Q3VycmVudFBvaW50RnJvbUV2ZW50KGV2dCk7XHJcbiAgICAgIHB0LnggPSB4O1xyXG4gICAgICBwdC55ID0geTtcclxuICAgICAgcmV0dXJuIHB0Lm1hdHJpeFRyYW5zZm9ybShzdmcuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcclxuXHJcbiAgICB9LFxyXG4gICAgc3RhcnREcmFnKGV2dCwgaW5pdGlhbFBvaW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQb2ludCA9IHRoaXMuYW5nbGVGcm9tQ2VudGVyKGV2dCk7XHJcbiAgICAgIHRoaXMuaW5pdFBvaW50ID0gaW5pdGlhbFBvaW50O1xyXG4gICAgfSxcclxuICAgIHVwZGF0ZUluaXRQb2ludEZyb21DdXJyZW50UG9pbnQoY3VycmVudFBvaW50KSB7XHJcblxyXG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnModGhpcy5wcmV2aW91c1BvaW50IC0gY3VycmVudFBvaW50KTtcclxuICAgICAgaWYgKGN1cnJlbnRQb2ludCA8IHRoaXMucHJldmlvdXNQb2ludCkge1xyXG4gICAgICAgIHRoaXMuaW5pdFBvaW50ICs9IGRpZmZlcmVuY2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbml0UG9pbnQgLT0gZGlmZmVyZW5jZTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICBnZXRSb3RhdGlvbkFuZ2xlKGV2dCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50UG9pbnQgPSB0aGlzLmFuZ2xlRnJvbUNlbnRlcihldnQpO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGVJbml0UG9pbnRGcm9tQ3VycmVudFBvaW50KGN1cnJlbnRQb2ludCk7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQb2ludCA9IGN1cnJlbnRQb2ludDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmluaXRQb2ludDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGFuZ2xlRnJvbUNlbnRlcihldnQpIHtcclxuXHJcbiAgICAgIGNvbnN0IFtjZW50ZXJYLCBjZW50ZXJZXSA9IFtjZW50ZXIueCwgY2VudGVyLnldO1xyXG4gICAgICBjb25zdCB7eCwgeX0gPSB0aGlzLmN1cnNvclBvaW50KGV2dCk7XHJcblxyXG4gICAgICBjb25zdCBhbmdsZUluUmFkaWFuID0gY2FsY3VsYXRlQW5nbGVSYWRpYW4oe3gsIHksIGNlbnRlclgsIGNlbnRlclksIG1heFJhZH0pO1xyXG4gICAgICBjb25zdCBjdXJyZW50RGVncmVlID0gbWF4RGVnICogYW5nbGVJblJhZGlhbiAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgIHJldHVybiBjdXJyZW50RGVncmVlO1xyXG5cclxuICAgIH1cclxuICB9O1xyXG59XHJcbiJdfQ==