Web rental system, developed for WEBT Module at HSLU
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

141 lines
4.7 KiB

/************ GLOBAL VARS ***************/
let incrementStepsAnimation = 0.15;
let timeBetweenRedrawAnimationMS = 10;
/****************************************/
/************ CROSS SYMBOL **************/
/****************************************/
let crossProperties;
/* function that draws a Cross Symbol */
function drawCross(canvasElementId, size, canvasSize) {
// get canvas element from HTML
let canvas = document.getElementById(canvasElementId);
let c = canvas.getContext('2d');
// calculate some relative positions according to size:
// relativeSizeExclusions = 0...1 relative size of exclusions from the circle
// lineWidth = width of the stroke
let relativeSizeExclusions = 0.7; let lineWidth = 0.05*size;
// d = distance from canvas border
let d = lineWidth;
// clear canvas
c.clearRect(0,0,canvasSize,canvasSize);
// draw circle
c.lineWidth = lineWidth;
c.fillStyle = "red";
c.beginPath();
c.arc(canvasSize/2, canvasSize/2, size/2-d, 0, 2 * Math.PI, false);
c.stroke();
c.fill();
// draw exclusions
c.beginPath();
c.arc(canvasSize/2, canvasSize/2, relativeSizeExclusions*(size/2-d), 1.85 * Math.PI, 0.65 * Math.PI, false);
c.closePath();
c.fillStyle = "white";
c.lineWidth = lineWidth;
c.stroke();
c.fill();
c.beginPath();
c.arc(canvasSize/2, canvasSize/2, relativeSizeExclusions*(size/2-d), 1.65 * Math.PI, 0.85 * Math.PI, true);
c.closePath();
c.fillStyle = "white";
c.lineWidth = lineWidth;
c.stroke();
c.fill();
}
/* recurring function that draws the animation of the Cross Symbol */
function drawAnimatedCross() {
setTimeout(drawAnimatedCross, timeBetweenRedrawAnimationMS);
calculateNewSize(crossProperties);
drawCross(crossProperties.canvasElementId, crossProperties.currentSize, crossProperties.maxSize);
}
/* initiates an animation of the Cross Symbol */
function animateCross(canvasElementId, size, maxSize){
crossProperties = {
canvasElementId: canvasElementId,
minSize: size,
maxSize: maxSize,
currentSize: size,
growing: true
}
drawAnimatedCross();
}
/****************************************/
/********** CHECKMARK SYMBOL ***********/
/****************************************/
let checkmarkProperties;
/* function that draws a Checkmark Symbol */
function drawCheckmark(canvasElementId, size, canvasSize) {
// get canvas element from HTML
let canvas = document.getElementById(canvasElementId);
let c = canvas.getContext('2d');
// calculate some relative positions according to size:
// xPosKink = x position of kink of the checkmark
// yHeightHook = y position of highest point of the hook
// lineWidth = width of the stroke
let xPosKink = 0.25*size; let yHeightHook = 0.5*size; let lineWidth = 0.05*size;
// d = distance from canvas border
// t = thickness of checkmark
let d = (canvasSize-size)/2+lineWidth; let t = 0.2*size;
// clear canvas
c.clearRect(0,0,canvasSize,canvasSize);
// draw checkmark
c.lineWidth = lineWidth;
c.fillStyle = "green";
c.beginPath();
c.moveTo(xPosKink + d, canvasSize-d);
c.lineTo(canvasSize-d, d);
c.lineTo(canvasSize-d-t, d);
c.lineTo(xPosKink+d, canvasSize-d-t-lineWidth/2);
c.lineTo(d, yHeightHook+d-lineWidth/2);
c.lineTo(d, yHeightHook+d+t);
c.lineTo(xPosKink + d, canvasSize - d);
c.closePath();
c.stroke();
c.fill();
}
/* recurring function that draws the animation of the Checkmark Symbol */
function drawAnimatedCheckmark() {
setTimeout(drawAnimatedCheckmark, timeBetweenRedrawAnimationMS);
calculateNewSize(checkmarkProperties);
drawCheckmark(checkmarkProperties.canvasElementId, checkmarkProperties.currentSize, checkmarkProperties.maxSize);
}
/* initiates an animation of the Checkmark Symbol */
function animateCheckmark(canvasElementId, size, maxSize){
checkmarkProperties = {
canvasElementId: canvasElementId,
minSize: size,
maxSize: maxSize,
currentSize: maxSize,
growing: true
}
drawAnimatedCheckmark(); // start timed function
}
/****************************************/
/*************** HELPERS ***************/
/****************************************/
/* Function to calculate the new size of a canvas symbol. Requires object created in 'animateX' function. */
function calculateNewSize(symbol){
if(symbol.growing && symbol.currentSize < symbol.maxSize){
symbol.currentSize += incrementStepsAnimation;
}else if(symbol.growing && symbol.currentSize >= symbol.maxSize){
symbol.growing = false;
symbol.currentSize -= incrementStepsAnimation;
}else if(symbol.growing == false && symbol.currentSize > symbol.minSize){
symbol.currentSize -= incrementStepsAnimation;
}else if(symbol.growing == false && symbol.currentSize <= symbol.minSize){
symbol.growing = true;
symbol.currentSize += incrementStepsAnimation;
}
}