рдирдорд╕реНрддреЗ! рдореИрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкрд░ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВ рдмреИрдХ-рдПрдВрдб рдХреЗ рд▓рд┐рдП Vue.js рдкрд░ SPA рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЦреЛрдЬ рдмреЙрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдмреЙрдЯ 0 рд╕реЗ 500 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдирджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд▓реЛрдб, рд╕реЙрд░реНрдЯ рдХрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдПрдВред
рди рддреЛ рдмреИрдХ-рдПрдВрдб рдФрд░ рди рд╣реА рдмреЙрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддрд░рдл рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЫрдВрдЯрд╛рдИ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрддрд┐ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдФрд░ рд╕рдВрдХреЗрдд рджрд┐рдП рдЧрдП 500 рд░рд┐рдХреЙрд░реНрдб 10 рд╕реЗ 40 рд╕реЗрдХрдВрдб рддрдХ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдПрдХ рд╕реНрдкрд┐рдирд░ рджрд┐рдЦрд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреЙрдЯ рдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ% рд░рд┐рдХреЙрд░реНрдб рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдЙрдЬреНрдЬрд╡рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
- рдЕрдВрдХ - рдХрд┐рддрдиреЗ% рд░рд┐рдХреЙрд░реНрдб рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рд╣реИрдВ
- рдЕрдиреБрд╕реВрдЪреА - рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд▓реЛрдб рд╕рдордп
- рднрд░рдиреЗ -% рднрд╛рд░ред рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рдл рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдмреНрд▓реЙрдХ рдХреЛ рднрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рднрд░рд╛ рд░рд╣рдирд╛ рдмрд╛рдХреА рд╣реИ
рдпрд╣рд╛рдБ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдПрдиреАрдореЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдорд┐рд▓рд╛:

... рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдЕрдЬреАрдм рдирд┐рдХрд▓рд╛ред
рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрджрдо рджрд░ рдХрджрдо рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рдХреИрд╕реЗ рдмрдврд╝рд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ рдЧрд╛рдБрд╡ рд╕реЗ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЧреНрд░рд╛рдлрд╝ рдирд╣реАрдВ рдЦреАрдВрдЪреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХреЗрддрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдиреЗ рдореБрдЭреЗ рдПрд╕рд╡реАрдЬреА рдФрд░ рд╡реАрдпреВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдирдпрд╛ рдЬреНрдЮрд╛рди рджрд┐рдпрд╛ред
рдПрдХ рдХреИрдирд╡рд╕ рдпрд╛ рдПрд╕рд╡реАрдЬреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЪреБрдирдирд╛
рдореИрдВрдиреЗ JS, рдФрд░ SVG рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╛рдБрдк рдХреЗ рдЦреЗрд▓ рдореЗрдВ рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреИрдЧ рдореЗрдВ рдкреЗрдЬ рдореЗрдВ рдбрд╛рд▓рд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╕рдордп, SVG рдЗрдореЗрдЬ рд╣рдореЗрд╢рд╛ рд╢рд╛рд░реНрдк рд░рд╣рддреА рд╣реИрдВ (рдЗрд╕реАрд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдерд╛) рдФрд░ рдХреИрдирд╡рд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ред рдзреБрдВрдзрд▓реА рдЫрд╡рд┐ред рдЗрд╕ рдЕрд╡рд▓реЛрдХрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдПрд╕рд╡реАрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧреНрд░рд╛рдл рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордп рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛
рдПрд╕рд╡реАрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрдпрдирд┐рдд рд╡реНрдпреВ рдлреНрд░реЗрдорд╡рд░реНрдХ, рдФрд░ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдХреА рдЪрдпрдирд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ:
- Vue рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ SVG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬреЗрдВ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ
- Vue рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ SVG рдХреЗ рдЧрдарди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ
- рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ
- рдПрдХ рдЕрд▓рдЧ Vue рдШрдЯрдХ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ рдХрд╛ рдЖрд╡рдВрдЯрди
- рдПрд╕рдкреАрдП рдореЗрдВ рдШрдЯрдХ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ
рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рдХреНрдд рдмрдирд╛рдирд╛рдореЗрд░реЗ рдкрд╛рд╕ рд╡реАрдпреВ рдХреНрд▓рд┐ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ ред рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ рдореИрдВ vue create loadprogresser рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ , рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ , рдПрдХ рдирдпрд╛ vue рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо loadprogresser рд╣реИ, рдлрд┐рд░ рдореИрдВ рдЗрд╕рдореЗрдВ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ:
Vue рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ SVG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬреЗрдВ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ
HTML, CSS рдФрд░ SVG css.yoksel.ru рдкрд░ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдмрдврд╝рд┐рдпрд╛ рд╕рд╛рдЗрдЯред SVG рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг Vue рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред SVG-graph рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓рд┐рдВрдХ ред рдЗрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрд╕рд╡реАрдЬреА рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ:
<template> <div class="wrapper"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"> //svg // svg- </svg> </div> </template>
Vue рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ SVG рдХреЗ рдЧрдарди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ
рдПрд╕рд╡реАрдЬреА рдЖрдпрдд рдЖрдпрдд
рдЖрдпрдд - рдПрдХ рдЖрдпрдд, рд╕рд░рд▓рддрдо рдЖрдХреГрддрд┐ред рдореИрдВ рдЖрдпрд╛рдо 100x100px рдХреЗ рд╕рд╛рде svg рдмрдирд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ 25:25 рдФрд░ рдЖрдХрд╛рд░ 50x50 px рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрдд рдХреА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд░рдг рд░рдВрдЧ рдХрд╛рд▓рд╛ рд╣реИ (рдХреЛрдИ рд╕реНрдЯрд╛рдЗрд▓ рдирд╣реАрдВ)
SVG рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рд╣реЛрд╡рд░ рдЫрджреНрдо рд╡рд░реНрдЧ:
рдореИрдВ svg рдореЗрдВ рд░реЗрдХреНрдЯреЗрдВрдЧрд▓ рд░реЗрдХреНрдЯ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ "рдирдореВрдирд╛" рд╡рд░реНрдЧ рдХреЛ svg рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, vue рдлрд╛рдЗрд▓ рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдореИрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдирдореВрдирд╛ рдирдореВрдирд╛ (рдореИрдВ рдкреАрд▓реЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдпрддрд╛рдХрд╛рд░ рд░рдВрдЧ) рдФрд░ред рдирдореВрдирд╛ рдирдореВрдирд╛: рд╣реЛрд╡рд░ рдЬреЛ рдЙрд╕ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдордВрдбрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓ рддрддреНрд╡ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ:
рд╕реНрд░реЛрдд рдХреЛрдб <template> <div id="app"> <svg class="sample" version="1.1" xmlns="http://www.w3.org/2000/svg" width="100px" height="100px"> <rect x=25 y=25 width="50px" height="50px"/> </svg> </div> </template> <script> export default { name: 'app' } </script> <style> .sample rect { fill: yellow; stroke: green; stroke-width: 4; transition: all 350ms; } .sample rect:hover { fill: gray; } </style>
JSfiddle рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдирд┐рд╖реНрдХрд░реНрд╖: svg рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ vue-file рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╢реБрд░реБрдЖрдд рдХреА рдЧрдИ рд╣реИ!
рд╕рдВрдХреЗрддрдХ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрд╕рд╡реАрдЬреА рдкрде
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВ рд░реВрдЯ рдХреЛ рдкрде рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛, <path :d="D" class="path"/>
рдкрде рдЯреИрдЧ рдХреА d рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ, рдореИрдВ v рд╕реЗ рдкрде рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ D рдкрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдХрдиреЗрдХреНрд╢рди v-bind:d="D"
рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ :d="D"
рд▓рд╛рдЗрди D = "M 0 0 0 50 50 50 50 0 Z" рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рддреАрди рд▓рд╛рдЗрдиреЗрдВ рдЦреАрдВрдЪрддрд╛ рд╣реИ 0: 0-> 0: 50-> 50: 50-> 0:50 рдФрд░ Z рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рдореЛрдЪреНрдЪ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ 50x50xpx рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рд╕рдордиреНрд╡рдп реж: режред рдкрде рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдХреГрддрд┐ рдХреЛ рдПрдХ рдкреАрд▓рд╛ рднрд░рд╛рд╡ рд░рдВрдЧ рдФрд░ 1px рдХреА рдЧреНрд░реЗ рд╕реАрдорд╛ рджреА рдЧрдИ рд╣реИред
рдкреАрд▓рд╛ рдкрд╛рде рд╕реНрд░реЛрдд <template> <div id="app"> <svg class="sample" version="1.1" xmlns="http://www.w3.org/2000/svg" width="100px" height="100px"> <path :d="D" class="path"/> </svg> </div> </template> <script> export default { name: 'app', data(){ return { D:"M 0 0 0 50 50 50 50 0 Z" } } } </script> <style> .path { fill:yellow; stroke:gray; } </style>
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ
рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдЖрд░реЗрдЦ рдмрдирд╛рдпрд╛ред 100px рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ svg рдХрдВрдЯреЗрдирд░, 400px рдХреА рдЪреМрдбрд╝рд╛рдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдбрд╛рд▓реА рдЧрдИ рд╣реИ, рдПрдХ рдкрде рдЯреИрдЧ рдЕрдВрджрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ vue рдбреЗрдЯрд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рдкрде рд╕реНрдЯреНрд░рд┐рдВрдЧ d рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕рдордп рдмрд┐рдВрджреБ рд╕рд░рдгреА рд╕реЗ рдмрдирддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ, рдкреНрд░рддреНрдпреЗрдХ 10ms, 400 рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рджреНрд╡рд╛рд░рд╛) рдХрдВрдЯреЗрдирд░ рдХреА рдЪреМрдбрд╝рд╛рдИ 0 рд╕реЗ 100 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдмрдирд╛рдП рдЧрдП рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ рдореЗрдВ, рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ AddTime рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░реЗрдЦ рдореЗрдВ рдирдП (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ) рдЕрдВрдХ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ getVVGTimePoints рд╡рд┐рдзрд┐ PATH рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИред setTimeout рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
рдкреАрдПрдЯреАрдПрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧрдарди рдкрд░ рдЕрдзрд┐рдХ
PATH рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ getSVGTimePoints рд╡рд┐рдзрд┐ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЯрд╛рдЗрдордкрд╛рд╕ рдкреЙрдЗрдВрдЯреНрд╕ рд╕реЗ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХрдо рдХрд░рддрд╛ рд╣реВрдВред рдХрдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ "рдПрдо 0 0" (рд╕рдордиреНрд╡рдп 0: 0 рдкрд░ рд╢реБрд░реВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрдо, рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдХреЗ рдирдП рдЬреЛрдбрд╝реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ dX рдФрд░ dY рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдкрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ "l" рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдмрдбрд╝реЗ "L" рдирд┐рд░рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ), "l" рдХреЛ dX рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ dY, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, dY = 1 (1px рджреНрд╡рд╛рд░рд╛ рд╡реГрджреНрдзрд┐), рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдореИрдВ рдХрдВрдЯреЗрдирд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рд╡реЗрддрди рд╡реГрджреНрдзрд┐ dX рдФрд░ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред PATH рдкреАрдврд╝реА рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ
path +=`L ${this.timePoints.length} 0`
рдореИрдВ рдЬрдмрд░рди, рдЖрдЦрд┐рд░реА рдмрд┐рдВрджреБ рд╕реЗ, рдореИрдВ рд▓рд╛рдЗрди рдХреЛ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рдмрдирд╛рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдореЛрдЪреНрдЪ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ "рдЬреЗрдб" рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрдХ рдмрдВрдж рд╕рдореЛрдЪреНрдЪ рдХреЗ рдмрд┐рдирд╛, рдкрд░рд┐рдгрд╛рдореА рдЖрдВрдХрдбрд╝рд╛ рдирд╣реАрдВ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ (рднрд░реЗрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рдирд┐рдХрд▓рд╛ред рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕реНрдЯреНрд░реЛрдХ - рд╕реНрдЯреНрд░реЛрдХ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред
getSVGTimePoints:function(){ let predY = 0 let path = this.timePoints.reduce((str, item)=>{ let dY = item - predY predY = item return str + `l 1 ${dY} ` },'M 0 0 ') path +=`L ${this.timePoints.length} 0`
рдореИрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддрд╛ рд░рд╣реВрдВрдЧрд╛ред рдореЗрд░реЗ рд╕реВрдЪрдХ рдХреЛ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдореЗрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рднреА рдкреНрд░реЗрд╖рд┐рдд рдмрд┐рдВрджреБ рджрд┐рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рд╕рдХреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, DOM рдХреА рдУрд░ рдореБрдбрд╝реЗрдВ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдпрд╛рдореЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
рд░реЗрдл - рдПрдХ рдбреЛрдо рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдбрд┐рд╡ рдХрдВрдЯреЗрдирд░ (рдЬрд┐рд╕рдореЗрдВ svg рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдФрд░ рдЗрддрдирд╛ рд╣реИ рдХрд┐ svg рдкреВрд░реЗ рдХрдВрдЯреЗрдирд░ рд╕реНрдерд╛рди рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ 100% рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред RECT, рдмрджрд▓реЗ рдореЗрдВ, рдкреВрд░реЗ рдХрдВрдЯреЗрдирд░ рд╕реНрдерд╛рди рдкрд░ рднреА рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ рдФрд░ PATH рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рд╣реЛрдЧреА
<div id="app" class="wrapper" ref="loadprogresser"> <svg id="sample" version="1.1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"> <rect x=0 y=0 width="100%" height="100%"/> <path :d="d" fill="transparent" stroke="black"/> </svg> </div>
рд╡рд░реНрдЪреБрдЕрд▓ рдбреЛрдо Vue рдореЗрдВ рдореЗрд░реЗ DIV рдХрдВрдЯреЗрдирд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд░реЗрдлрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдВ ref="loadprogresser"
ред mounted
рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдореЗрдВ, рдореИрдВ getScales () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ const {width, height} = this.$refs.loadprogresser.getBoundingClientRect()
рдореБрдЭреЗ рдбреЛрдо рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ const {width, height} = this.$refs.loadprogresser.getBoundingClientRect()
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ DOM рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рд╕рд░рд▓ рдЧрдгрдирд╛, рдХрдВрдЯреЗрдирд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдо рдЙрд╕рдореЗрдВ рдлрд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкреИрдорд╛рдиреЗ рдХреЛ рд╣рд░ рдмрд╛рд░ рдкреБрдирд░реНрдЧрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЪрд░рд┐рдд рдореВрд▓реНрдп рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрджрд▓рдирд╛ - рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрджрд▓рдирд╛
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ 0: 0 рд╕рдордиреНрд╡рдп рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛ, рдФрд░ рд╡рд╛рдИ рдЕрдХреНрд╖ рдКрдкрд░ рдмрдврд╝рддрд╛ рд╣реИ, рдиреАрдЪреЗ рдирд╣реАрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрд╕рд╡реАрдЬреА рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ Y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ -1 рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рд╡рд╛рдИ рдорд╛рди рд╡рд╛рдкрд╕ рд░рдЦреА рдЬрд╛рдП), рдФрд░ рдореВрд▓ рдХреЛ рдорд╛рдЗрдирд╕ рдХрдВрдЯреЗрдирд░ рдКрдВрдЪрд╛рдИ рдкрд░ рд╢рд┐рдлреНрдЯ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ), рд╣рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде mounted
рд╣реБрдХ рдореЗрдВ рдПрдХ рд╕рдордиреНрд╡рдп рд░реВрдкрд╛рдВрддрд░рдг рд░реЗрдЦрд╛ this.transform = `scale( 1, -1) translate(0,${-this.wrapHeight})`
: рдЗрд╕ this.transform = `scale( 1, -1) translate(0,${-this.wrapHeight})`
рд▓реЗрдХрд┐рди рдЕрдХреЗрд▓реЗ рдкреИрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╕рдореВрд╣ (рдЬреА рдЯреИрдЧ) рдореЗрдВ рдкреИрдЯ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдордиреНрд╡рдпрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
<g :transform="transform"> <path :d="d" fill="transparent" stroke="black"/> </g>
рдирддреАрдЬрддрди, рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрд▓рдЯ рд╣реЛ рдЧрдП, рдбрд╛рдЙрдирд▓реЛрдб рд╕рдВрдХреЗрддрдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдХрд░реАрдм рд╣реЛ рдЧрдпрд╛
рдПрд╕рд╡реАрдЬреА рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗрдВрдЯрд░рд┐рдВрдЧ
% рд▓реЛрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрд╕рд╡реАрдЬреА рдореЗрдВ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЦрдбрд╝реА рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдкрд╛рда рдХрд╛ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (HTML / CSS рдХреА рддреБрд▓рдирд╛ рдореЗрдВ), рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА рд╣реИрдВ (рдореИрдВ рддреБрд░рдВрдд рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ) рдкреНрд░рдореБрдЦ-рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ = "рдХреЗрдВрджреНрд░реАрдп" рдФрд░ рдкрд╛рда-рдПрдВрдХрд░ = "рдордзреНрдп"
рдПрд╕рд╡реАрдЬреА рдореЗрдВ рдкрд╛рда рдЗрд╕реА рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<text x="50%" y="50%" dominant-baseline="central" text-anchor="middle">{{TextPrc}}</text>
рдЬрд╣рд╛рдБ TextPrc рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд░рд╛рд╢рд┐ рдХреЗ рдЕрдВрдХреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкрд╛рдд рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред this.TextPrc = `${((this.Samples * 100)/this.maxSamples) | 0} %`
this.TextPrc = `${((this.Samples * 100)/this.maxSamples) | 0} %`
ред
рд╢реБрд░реБрдЖрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ x = "50%" y = "50%" рдХрдВрдЯреЗрдирд░ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рдореБрдЦ-рдмреЗрд╕рд▓рд╛рдЗрди рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ-рдПрдВрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдкрд╛рда рд▓рдВрдмрд╡рдд рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИред
рд╡рд┐рд╖рдп рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдореЗрдВ рд╕рдВрдХреЗрддрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдЕрд▓рдЧ Vue рдШрдЯрдХ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ рдХрд╛ рдЖрд╡рдВрдЯрди
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдШрдЯрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдпреЗ рд╣реЛрдВрдЧреЗ: рдЕрдзрд┐рдХрддрдо рдирдореВрдиреЗ - 100% рдЪреМрдбрд╝рд╛рдИ рдкрд░ рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдФрд░ рдмрд┐рдВрджреБ - рдбреЗрдЯрд╛ (рдмрд┐рдВрджреБ) рдХреА рдЗрдХрд╛рдИ рдЬреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рджрд░реНрдЬ рдХреА рдЬрд╛рдПрдЧреА (рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдЧреНрд░рд╛рдл)ред рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдШрдЯрдХ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛, рдореИрдВ рд╕рд╣рд╛рд░рд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВ
props:{ maxSamples: {
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдореБрджреНрджреЗ
рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдЧреЗрдЯрдкрд╛рде рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдирдпрд╛ рдмрд┐рдВрджреБ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИ, рдЬреЛ рдкреНрд╡рд╛рдЗрдВрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд╡рд╛рдЗрдВрдЯ рдмрджрд▓ рдЬрд╛рдиреЗ рдкрд░ рдкреБрди: рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ)
рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рдПрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдСрдлрд╝ рдЯрд╛рдЗрдк рдирдВрдмрд░ рдмрдирд╛рдпрд╛, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХреА рдЧрдИ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЗрд╡рд▓ 10 рдирдВрдмрд░ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдРрд╕реЗ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪрд╛рд░реНрдЯ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд╛рдж рдХреЗ рд╕рднреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред
рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ {value: 0} рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ - рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ getPath () рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЗрд╖рд┐рдд рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдореИрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ
Progresser.vue рдШрдЯрдХ рд╕реНрд░реЛрдд <template> <div class="wrapper" ref="loadprogresser"> <svg class="wrapper__content" version="1.1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" > <g :transform="transform"> <path :d="getPath"/> </g> <text x="50%" y="50%" dominant-baseline="central" text-anchor="middle"> {{TextPrc}} </text> </svg> </div> </template> <script> export default { props:{ maxSamples: {
рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛
рдПрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
import Progresser from "./components/Progresser"
рдФрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
components: {Progresser }
рдкреИрд░реЗрдВрдЯ рдШрдЯрдХ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ, рдЙрддреНрддрд░реЛрддреНрддрд░ рд╕рдВрдХреЗрддрдХ рдШрдЯрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:
<progresser class="progresser" :maxSamples = "SamplesInProgresser" :Point = "Point" ></progresser>
"рдкреНрд░реЛрдЧреНрд░реЗрд╕рд░" рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдХреЗрддрдХ рдХреЗ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред SamSInProgresser рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрд░ рд╕реЗ MaxSamples (рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЕрдВрдХ) рдШрдЯрдХ рдкреНрд░реЙрдкрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреЙрдЗрдВрдЯ рдЪрд░ рд╕реЗ рдЕрдЧрд▓рд╛ рдмрд┐рдВрджреБ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЛ рдкреНрд░реЙрдкрд░ рдкреЙрдЗрдВрдЯ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдмрд╛рдд рдХреЛ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЪрд┐рддреНрд░ рдорд┐рд▓рд╛:

App.vue рдореВрд▓ рд╕реНрд░реЛрдд <template> <div> <progresser class="progresser" :maxSamples = "SamplesInProgresser" :Point = "Point" ></progresser> </div> </template> <script> import Progresser from "./components/Progresser" export default { name: 'app', data(){ return { SamplesInProgresser:400,// - Point:{value:0},//"" index:0, // - TimeM:100 // } }, created: function () { this.update() }, methods:{ update(){ if (this.index < this.SamplesInProgresser) { this.index++; this.Point = {value:(this.TimeM*Math.random() | 0)} this.TimeM *= 1.01 setTimeout(this.update, 0) } } }, components: { Progresser } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; margin-top: 60px; } /* */ .progresser { width: 300px; height: 80px; } </style>
рдПрд╕рдкреАрдП рдореЗрдВ рдШрдЯрдХ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рдЙрд╕ рдореБрдХрд╛рдо рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдКрдкрд░ рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВред рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдирдИ рддрд┐рдерд┐ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдПрдХ рддреБрдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ рдорд╛рдкреВрдВрдЧрд╛, рдФрд░ рдореИрдВ рдШрдЯрдХ рдХреЛ рдкрд░рд┐рдгрд╛рдореА рд╕рдордп рдЕрдВрддрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдВрдХреЗрддрдХ рдЙрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдЙрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
async getCandidatesData(){ ... this.LoadRecords = true
рдореВрд▓ рдШрдЯрдХ рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдореИрдВ рд▓реЛрдб рд╕рдВрдХреЗрдд рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:
data (){ return { ...
рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ:
<div class="wait_loading" v-show="LoadRecords"> <progresser class="progresser" :maxSamples = "SamplesInProgresser" :Point = "Point" ></progresser> </div>
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдмрд┐рдВрджреБ рддрдХ, рдЖрдк рдПрд╕рд╡реАрдЬреА рдХреЛ рдирд┐рдпрдорд┐рдд HTML рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдПрд╕рд╡реАрдЬреА рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЕрдм рдореИрдВ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛
рд╕рдВрджрд░реНрдн
рдЗрдВрдбрд┐рдХреЗрдЯрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВSvg- рдкрде рд▓реЗрдЦ