рдХреИрдирд╡рд╕ рд╕рдВрдХреЗрддрдХ - AjaxLoad.gif рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк

рдХрдИ рд╢рд╛рдпрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдХреЗрддрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд / рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдЬрдм рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╡рд╣реА рд╕рдВрдХреЗрддрдХ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдареЛрд╕ рдереА, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕рдордп, рдбрд┐рдЬрд╛рдЗрдирд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рдереЗ, рдпрд╛ рдПрдХ рдврд╛рд▓ рднреА рдмрдирд╛ рд╕рдХрддреЗ рдереЗред

рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ GIF рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╣реА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИред



рдкрд╣рд▓реЗ рдорд┐рдирдЯреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЖрдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрдо рд╕реЗ рдХрдо рдРрд╕реЗ рд╕рдВрдХреЗрддрдХ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реБрдИ, рддрдХрдиреАрдХреА рдкрдХреНрд╖ рд╕реЗ рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд╛рдЗрди рдХреА рдУрд░ рд╕реЗред рдЗрди рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдЬреЛрд░ рджреЗрдХрд░ рдХрд╣рд╛ рдХрд┐ рд▓рд╛рдареА рдХреЛ рд╣рд▓рдХреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреА рддрд░рд╣:


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рднреА рдирд╣реАрдВ рдмрдирд╛рдИ рдереАред рдЦреЛрдЬ рдЬрд╛рд░реА рд░рдЦрдиреА рдереАред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдЖрдпрд╛ рдЬрд┐рд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓рдЧрднрдЧ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред

рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдХрд░, рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рдореИрдВ рдЦрд╝реБрд╢реА рд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдХрд░реВрдБрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╣реА рдЬрдЧрд╣ рдкрд░, рдХреИрдирд╡рд╛рд╕ рдЯреИрдЧ рд▓рдЧрд╛рдПрдВ:

<canvas id="loader"></canvas> 


рдФрд░ CanvasIndicator рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБ:
 new CanvasIndicator(document.getElementById("loader"),{ bars:11, innerRadius:4, size:[2,5], rgb:[255,255,255], fps:10 }); 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреИрдирд╡рд╕рдЗрдВрдбрд╛рдЗрдЯрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ: рдкрд╣рд▓рд╛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреИрдирд╡рд╛рд╕ рд╣реИ, рдЬрд╣рд╛рдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрдЧреАред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдпрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЧреБрдг рд╕рдВрдХреЗрддрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред

рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг:

рдмрд╛рд░ - рдмреНрд▓реЙрдХ рдХреА рд╕рдВрдЦреНрдпрд╛
рдЗрдирд░рд░реЗрдбрд┐рдпрд╕ - рдЖрдВрддрд░рд┐рдХ рддреНрд░рд┐рдЬреНрдпрд╛
рдЖрдХрд╛рд░ - рдПрдХ рд╕рд░рдгреА рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдмреНрд▓реЙрдХ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ рд╣реИ
рдЖрд░рдЬреАрдмреА - рд╕рдВрдХреЗрддрдХ рд░рдВрдЧ, рддреАрди рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд, рдЬрд╣рд╛рдВ рдХреНрд░рдорд╢рдГ рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛ -
рдПрдлрдкреАрдПрд╕ - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдлреНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛, рдмрдбрд╝рд╛ рдореВрд▓реНрдп, рдЬрд┐рддрдирд╛ рддреЗрдЬрд╝реА рд╕реЗ рд╕рдВрдХреЗрддрдХ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ

рдЦреИрд░, рд╕реАрдзреЗ CanvasIndicator.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдХреЛрдб

 function CanvasIndicator(el, opt) { this.ctx = el.getContext("2d"); this.currentOffset = 0; var defaults = { bars: 11, innerRadius: 4, size: [2, 5], rgb: [255, 255, 255], fps: 10 } if (typeof(opt) == 'object') { defaults.bars = opt.bars ? opt.bars : defaults.bars; defaults.innerRadius = opt.innerRadius ? opt.innerRadius : defaults.innerRadius; defaults.size = opt.size ? opt.size : defaults.size; defaults.rgb = opt.rgb ? opt.rgb : defaults.rgb; defaults.fps = opt.fps ? opt.fps : defaults.fps; } this.opt = defaults; this.w = this.opt.size[1] + this.opt.innerRadius; el.setAttribute("width", this.w * 2); el.setAttribute("height", this.w * 2); (function nextAnimation(obj) { obj.currentOffset = (obj.currentOffset + 1) % obj.opt.bars; obj.draw(obj.currentOffset); setTimeout(function () { nextAnimation(obj); }, 1000 / obj.opt.fps); })(this); } CanvasIndicator.prototype.makeRGBA = function () { return "rgba(" + [].slice.call(arguments, 0).join(",") + ")"; } CanvasIndicator.prototype.drawBlock = function (barNo) { this.ctx.fillStyle = this.makeRGBA(this.opt.rgb[0], this.opt.rgb[1], this.opt.rgb[2], (this.opt.bars + 1 - barNo) / (this.opt.bars + 1)); this.ctx.fillRect(-this.opt.size[0] / 2, 0, this.opt.size[0], this.opt.size[1]); } CanvasIndicator.prototype.calculatePosition = function (barNo) { angle = 2 * barNo * Math.PI / this.opt.bars; return { y: (this.opt.innerRadius * Math.cos(-angle)), x: (this.opt.innerRadius * Math.sin(-angle)), angle: angle }; } CanvasIndicator.prototype.draw = function (offset) { this.clearFrame(); this.ctx.save(); this.ctx.translate(this.w, this.w); for (var i = 0; i < this.opt.bars; i++) { var curbar = (offset + i) % this.opt.bars, pos = this.calculatePosition(curbar); this.ctx.save(); this.ctx.translate(pos.x, pos.y); this.ctx.rotate(pos.angle); this.drawBlock(i); this.ctx.restore(); } this.ctx.restore(); } CanvasIndicator.prototype.clearFrame = function () { this.ctx.clearRect(0, 0, this.ctx.canvas.clientWidth, this.ctx.canvas.clientHeight); } 


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВред
рдЖрдк рдпрд╣рд╛рдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In114080/


All Articles