| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /**
- * @license MIT
- * topbar 1.0.0, 2021-01-06
- * http://buunguyen.github.io/topbar
- * Copyright (c) 2021 Buu Nguyen
- */
- (function (window, document) {
- "use strict";
- // https://gist.github.com/paulirish/1579671
- (function () {
- var lastTime = 0;
- var vendors = ["ms", "moz", "webkit", "o"];
- for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
- window.requestAnimationFrame =
- window[vendors[x] + "RequestAnimationFrame"];
- window.cancelAnimationFrame =
- window[vendors[x] + "CancelAnimationFrame"] ||
- window[vendors[x] + "CancelRequestAnimationFrame"];
- }
- if (!window.requestAnimationFrame)
- window.requestAnimationFrame = function (callback, element) {
- var currTime = new Date().getTime();
- var timeToCall = Math.max(0, 16 - (currTime - lastTime));
- var id = window.setTimeout(function () {
- callback(currTime + timeToCall);
- }, timeToCall);
- lastTime = currTime + timeToCall;
- return id;
- };
- if (!window.cancelAnimationFrame)
- window.cancelAnimationFrame = function (id) {
- clearTimeout(id);
- };
- })();
- var canvas,
- progressTimerId,
- fadeTimerId,
- currentProgress,
- showing,
- addEvent = function (elem, type, handler) {
- if (elem.addEventListener) elem.addEventListener(type, handler, false);
- else if (elem.attachEvent) elem.attachEvent("on" + type, handler);
- else elem["on" + type] = handler;
- },
- options = {
- autoRun: true,
- barThickness: 3,
- barColors: {
- 0: "rgba(26, 188, 156, .9)",
- ".25": "rgba(52, 152, 219, .9)",
- ".50": "rgba(241, 196, 15, .9)",
- ".75": "rgba(230, 126, 34, .9)",
- "1.0": "rgba(211, 84, 0, .9)",
- },
- shadowBlur: 10,
- shadowColor: "rgba(0, 0, 0, .6)",
- className: null,
- },
- repaint = function () {
- canvas.width = window.innerWidth;
- canvas.height = options.barThickness * 5; // need space for shadow
- var ctx = canvas.getContext("2d");
- ctx.shadowBlur = options.shadowBlur;
- ctx.shadowColor = options.shadowColor;
- var lineGradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
- for (var stop in options.barColors)
- lineGradient.addColorStop(stop, options.barColors[stop]);
- ctx.lineWidth = options.barThickness;
- ctx.beginPath();
- ctx.moveTo(0, options.barThickness / 2);
- ctx.lineTo(
- Math.ceil(currentProgress * canvas.width),
- options.barThickness / 2
- );
- ctx.strokeStyle = lineGradient;
- ctx.stroke();
- },
- createCanvas = function () {
- canvas = document.createElement("canvas");
- var style = canvas.style;
- style.position = "fixed";
- style.top = style.left = style.right = style.margin = style.padding = 0;
- style.zIndex = 100001;
- style.display = "none";
- if (options.className) canvas.classList.add(options.className);
- document.body.appendChild(canvas);
- addEvent(window, "resize", repaint);
- },
- topbar = {
- config: function (opts) {
- for (var key in opts)
- if (options.hasOwnProperty(key)) options[key] = opts[key];
- },
- show: function () {
- if (showing) return;
- showing = true;
- if (fadeTimerId !== null) window.cancelAnimationFrame(fadeTimerId);
- if (!canvas) createCanvas();
- canvas.style.opacity = 1;
- canvas.style.display = "block";
- topbar.progress(0);
- if (options.autoRun) {
- (function loop() {
- progressTimerId = window.requestAnimationFrame(loop);
- topbar.progress(
- "+" + 0.05 * Math.pow(1 - Math.sqrt(currentProgress), 2)
- );
- })();
- }
- },
- progress: function (to) {
- if (typeof to === "undefined") return currentProgress;
- if (typeof to === "string") {
- to =
- (to.indexOf("+") >= 0 || to.indexOf("-") >= 0
- ? currentProgress
- : 0) + parseFloat(to);
- }
- currentProgress = to > 1 ? 1 : to;
- repaint();
- return currentProgress;
- },
- hide: function () {
- if (!showing) return;
- showing = false;
- if (progressTimerId != null) {
- window.cancelAnimationFrame(progressTimerId);
- progressTimerId = null;
- }
- (function loop() {
- if (topbar.progress("+.1") >= 1) {
- canvas.style.opacity -= 0.05;
- if (canvas.style.opacity <= 0.05) {
- canvas.style.display = "none";
- fadeTimerId = null;
- return;
- }
- }
- fadeTimerId = window.requestAnimationFrame(loop);
- })();
- },
- };
- if (typeof module === "object" && typeof module.exports === "object") {
- module.exports = topbar;
- } else if (typeof define === "function" && define.amd) {
- define(function () {
- return topbar;
- });
- } else {
- this.topbar = topbar;
- }
- }.call(this, window, document));
|