рдлреИрдмреНрд░рд┐рдХ рдХреЛ рдЬрд╛рдирд┐рдПред рдЬреЗ.рдПрд╕. рднрд╛рдЧ реи

рдпрд╣ рдЦреБрд▓реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрдирд╡рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлреИрдмреНрд░рд┐рдХ.рдЬреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╣реИред

рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ , рд╣рдо рдХреИрдирд╡рд╛рд╕ рдлреИрдмреНрд░рд┐рдХ.рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдкрд░ рдЧрдПред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдлреИрдмреНрд░рд┐рдХ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдЬрд╛рдВрдЪ рдХреА; рджреЗрдЦрд╛ рдХрд┐ рджреЛрдиреЛрдВ рд╕рд╛рдзрд╛рд░рдг рдЖрдХрд╛рд░ (рдЖрдпрдд, рддреНрд░рд┐рдХреЛрдг, рд╡реГрддреНрдд), рдФрд░ рдЬрдЯрд┐рд▓ (SVG) рд╣реИрдВред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рд░рд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрд╛ред

рдЦреИрд░, рд╣рдордиреЗ рдореВрд▓ рдмрд╛рддреЗрдВ рдкрддрд╛ рд▓рдЧрд╛ рд▓реА рд╣реИрдВ, рдЪрд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЛрдВ рдкрд░ рдЖрддреЗ рд╣реИрдВ!


рдПрдиреАрдореЗрд╢рди


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

рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдпрд╛рдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред рд╣рдо рдЙрдЪрд┐рдд рдореВрд▓реНрдп рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП рдмрд╕ set рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ:

 rect.set('angle', 45); 

рдЖрдк рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдФрд░ рд╕рдорд╛рди рд╕рд╣рдЬрддрд╛ рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдЪреЗрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ animate рддрд░реАрдХрд╛ (рдлреИрдмреНрд░рд┐рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред fabric.Object ) рдЬреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рддрд╛ рд╣реИред

 rect.animate('angle', 45, { onChange: canvas.renderAll.bind(canvas) }); 

рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдпрдд -15 ┬░ рдХреЗ рдХреЛрдг рдкрд░ рд╣реИ, рдФрд░ рд╣рдо "45" рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдг рдзреАрд░реЗ-рдзреАрд░реЗ -15 ┬░ рд╕реЗ 45 ┬░ рддрдХ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдЦреИрд░, рдЕрдВрддрд┐рдо рддрд░реНрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдЕрд╡рдзрд┐, рдХреЙрд▓, рд╕рд╣рдЬрддрд╛, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╕реНрддреБ рд╣реИред

рд╡реИрд╕реЗ animate рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ - рд╕рд╛рдкреЗрдХреНрд╖ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ 100px рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

 rect.animate('left', '+=100', { onChange: canvas.renderAll.bind(canvas) }); 

рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ 5 рдбрд┐рдЧреНрд░реА рд╡рд╛рдорд╛рд╡рд░реНрдд рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

 rect.animate('angle', '-=5', { onChange: canvas.renderAll.bind(canvas) }); 

рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ "onChange" рдХреЗ рдХреЙрд▓ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рддреАрд╕рд░рд╛ рддрд░реНрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ рд╣реИ? рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдкрд░ рдмрд╕ canvas.renderAll рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╕реНрд╡рдпрдВ рдПрдиреАрдореЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ! рдЪреЗрддрди animate рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдмрджрд▓рддреА рд╣реИ, рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд╕рд╣рдЬрддрд╛) рдХреЗ рдЕрдиреБрд╕рд╛рд░ред rect.animate('angle', 45) рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ rect.animate('angle', 45) рдХрд┐рдП рдмрд┐рдирд╛ред рдФрд░ рдПрдиреАрдореЗрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВ animate рд╕реНрдХреНрд░реАрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ redraw рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдгред рджрд░рдЕрд╕рд▓, рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рд╡рд╕реНрддреБрдПрдВ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдмрджрд▓рддреЗ рд╕рдордп рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ requestAnimationFrame рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП renderAll рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХреИрдирд╡рд╛рд╕ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП requestAnimationFrame ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ canvas.renderAll рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдПрдХ " canvas.renderAll " рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВред

рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?



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

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

 rect.animate('left', 500, { onChange: canvas.renderAll.bind(canvas), duration: 1000, easing: fabric.util.ease.easeOutBounce }); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рд╢рдорди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ fabric.util.ease.easeOutBounce рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ - easeInCubic , easeOutCubic , easeInElastic , easeOutElastic , easeInBounce , easeOutExpo , рдЖрджрд┐ред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рд╕рднреА рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдХреЛрдг рдХреЛ рдмрджрд▓ рджреЗрдВ; рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдПрдВ / рдКрдкрд░ рдЪреЗрддрди; рдЪреЗрддрди рдЪреМрдбрд╝рд╛рдИ / рдКрдБрдЪрд╛рдИ рдмрдврд╝рд╛рдиреЗ / рдШрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП; рдкреНрд░рдХрдЯ / рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреА рдЪреЗрддрди рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛; рдЖрджрд┐

рдЫрд╡рд┐ рдлрд╝рд┐рд▓реНрдЯрд░


рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, fabric.Image рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ <img> рддрддреНрд╡ рдкрд╛рд╕ рдХрд░рдирд╛ред рдПрдХ fabric.Image.fromURL рднреА рд╣реИред fabric.Image.fromURL рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк URL рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рдпреЗ fabric.Image рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреИрдирд╡рд╕ рдкрд░ рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЪреАрдЬ рдХреА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдордЬреЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЫрд╡рд┐ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде - рдФрд░ рднреА рдордЬреЗрджрд╛рд░ рд╣реИ!

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

рддреЛ рдЖрдк рдПрдХ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ? рдкреНрд░рддреНрдпреЗрдХ fabric.Image рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ "рдлрд┐рд▓реНрдЯрд░" рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдлрд┐рд▓реНрдЯрд░ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдлреИрдмреНрд░рд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдЦреИрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рддрд╕реНрд╡реАрд░ рдХреЛ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдмрдирд╛рддреЗ рд╣реИрдВ:

 fabric.Image.fromURL('pug.jpg', function(img) { //   img.filters.push(new fabric.Image.filters.Grayscale()); //        img.applyFilters(canvas.renderAll.bind(canvas)); //     canvas.add(img); }); 



рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕реАрдкрд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 fabric.Image.fromURL('pug.jpg', function(img) { img.filters.push(new fabric.Image.filters.Sepia()); img.applyFilters(canvas.renderAll.bind(canvas)); canvas.add(img); }); 



"рдлрд╝рд┐рд▓реНрдЯрд░" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ ( pop , splice , рдпрд╛ shift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ ( push , splice , unshift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЬрдм applyFilters , рддреЛ рд╕рд░рдгреА рдХреЗ рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдмрджрд▓реЗ рдореЗрдВ рдЪрд┐рддреНрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рд╕реЗ рдЪрдордХ рдмрдврд╝реЗ рдФрд░ рд╕реАрдкрд┐рдпрд╛ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде:

 fabric.Image.fromURL('pug.jpg', function(img) { img.filters.push( new fabric.Image.filters.Sepia(), new fabric.Image.filters.Brightness({ brightness: 100 })); img.applyFilters(canvas.renderAll.bind(canvas)); canvas.add(img); }); 



рдЧреМрд░ рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ рдмреНрд░рд╛рдЗрдЯрдиреЗрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП { brightness: 100 } рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреБрдЫ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрд╕реНрдХреЗрд▓, рдЗрдирд╡рд░реНрдЯ, рд╕реАрдкрд┐рдпрд╛) рдХреЛ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ luminance рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ luminance рдорд╛рди рд╕реНрд╡рдпрдВ (0-255) рд╣реИред рд╢реЛрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢реЛрд░ рдореВрд▓реНрдп (0-1000) рд╣реИред рдФрд░ рдлрд┐рд▓реНрдЯрд░ рд╕рдлреЗрдж рдкреГрд╖реНрдарднреВрдорд┐ ("рд╕рдлреЗрдж рд╣рдЯрд╛рдПрдВ") рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдПрдХ рджрд╣рд▓реАрдЬ (рджрд╣рд▓реАрдЬ) рдФрд░ рджреВрд░реА (рджреВрд░реА) рд╣реИред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЫрд╛рдВрдЯреЗ рдЧрдП рдлрд┐рд▓реНрдЯрд░; рдпрд╣ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!

рдлрд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдирдореВрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдПрдХ "рдХреНрд▓рд╛рд╕" рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ applyTo рд╡рд┐рдзрд┐ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдПрдХ toJSON рд╡рд┐рдзрд┐ (JSON рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди), рдФрд░ / рдпрд╛ initialize (рдпрджрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ)ред

 fabric.Image.filters.Redify = fabric.util.createClass({ type: 'Redify', applyTo: function(canvasEl) { var context = canvasEl.getContext('2d'), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data; for (var i = 0, len = data.length; i < len; i += 4) { data[i + 1] = 0; data[i + 2] = 0; } context.putImageData(imageData, 0, 0); } }); fabric.Image.filters.Redify.fromObject = function(object) { return new fabric.Image.filters.Redify(object); }; 




рдХреЛрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд▓реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рд╣рд░реЗ (рдбреЗрдЯрд╛ [i + 1]) рдФрд░ рдиреАрд▓реЗ (рдбреЗрдЯрд╛ [i + 2]) рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ 0 рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рд░рд╣реЗ рд╣реИрдВред рд▓рд╛рд▓ рдШрдЯрдХ рдЕрдЫреВрддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреВрд░реА рдЫрд╡рд┐ рд▓рд╛рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, applyTo рд╡рд┐рдзрд┐ рдПрдХ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЫрд╡рд┐ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХреИрдирд╡рд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЫрд╡рд┐ рдХреЗ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ ( getImageData().data ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рд░рдВрдЧ


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

 new fabric.Color('#f55'); new fabric.Color('#123123'); new fabric.Color('356735'); new fabric.Color('rgb(100,0,100)'); new fabric.Color('rgba(10, 20, 30, 0.5)'); 

рдкреНрд░рд╛рд░реВрдк рдЕрдиреБрд╡рд╛рдж рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред toHex() рд░рдВрдЧ рдХреЛ рд╣реЗрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред toRgb() рдЖрд░рдЬреАрдмреА рдореЗрдВ рд╣реИ, рдФрд░ toRgba() рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ (рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛) рдХреЗ рд╕рд╛рде рдЖрд░рдЬреАрдмреА рдореЗрдВ рд╣реИред

 new fabric.Color('#f55').toRgb(); // "rgb(255,85,85)" new fabric.Color('rgb(100,100,100)').toHex(); // "646464" new fabric.Color('fff').toHex(); // "FFFFFF" 

рд╡реИрд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ рдЕрдиреБрд╡рд╛рдж рд╕реЗ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдПрдХ рдХреЗ рдКрдкрд░ рдПрдХ рд░рдВрдЧ "рдУрд╡рд░рд▓реЗ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

 var redish = new fabric.Color('#f55'); var greenish = new fabric.Color('#5f5'); redish.overlayWith(greenish).toHex(); // "AAAA55" redish.toGrayscale().toHex(); // "A1A1A1" 

рдврд╝рд╛рд▓


рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╕реНрдирд╛рддрдХ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд░рдВрдЧ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рдлреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкреНрд░рднрд╛рд╡ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЦреБрд▓ рдЬрд╛рддреА рд╣реИред

рдлреИрдмреНрд░рд┐рдХ setGradient рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдореМрдЬреВрдж рд╣реИред setGradient('fill', ...) рдХреЛ setGradient('fill', ...) рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд┐рд▓ рд╡реИрд▓реНрдпреВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ, рдХреЗрд╡рд▓ рд░рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 var circle = new fabric.Circle({ left: 100, top: 100, radius: 50 }); circle.setGradient('fill', { x1: 0, y1: 0, x2: 0, y2: circle.height, colorStops: { 0: '#000', 1: '#fff' } }); 



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо 50px рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде 100,100 рдкрд░ рдПрдХ рд╕рд░реНрдХрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдврд╛рд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╕реНрддреБ рдХреА рдкреВрд░реА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рд▓реЗ рд╕реЗ рд╕рдлреЗрдж рддрдХ рдЪрд▓рддреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (X1, y1 рдФрд░ x2, y2) рдХреЗ 2 рдЬреЛрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ "colorStops" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рдврд╛рд▓ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред colorStops рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреМрди рд╕реЗ рд░рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ 0 рд╕реЗ 1 рддрдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0, 0.1, 0.3, 0.5, 0.75, 1)ред 0 рдврд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, 1 рдЗрд╕рдХреЗ рдЕрдВрдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд▓рд╛рд▓ рд╕реЗ рдиреАрд▓реА рдврд╛рд▓ рдХреЛ рдмрд╛рдПрдБ рд╕реЗ рджрд╛рдПрдБ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 circle.setGradient('fill', { x1: 0, y1: circle.height / 2, x2: circle.width, y2: circle.height / 2, colorStops: { 0: "red", 1: "blue" } }); 



рдФрд░ рдпрд╣рд╛рдВ рдПрдХ 5-рдЪрд░рдг рдврд╛рд▓ рд╡рд╛рд▓рд╛ рдЗрдВрджреНрд░рдзрдиреБрд╖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реА рд▓рдВрдмрд╛рдИ рдХреЗ 20% рдлреВрд▓ рд╣реИрдВ:

 circle.setGradient('fill', { x1: 0, y1: circle.height / 2, x2: circle.width, y2: circle.height / 2, colorStops: { 0: "red", 0.2: "orange", 0.4: "yellow", 0.6: "green", 0.8: "blue", 1: "purple" } }); 



рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдХрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВ?

рдЯреЗрдХреНрд╕реНрдЯ


рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рди рдХреЗрд╡рд▓ рдЪрд┐рддреНрд░реЛрдВ рдФрд░ рд╡реЗрдХреНрдЯрд░ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд╛рда рднреА? рдХрдкрдбрд╝реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! fabric.Text рдорд┐рд▓реЛред

рдкрд╛рда рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреИрдирд╡рд╕ рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рддрд░реАрдХреЗ рдлрд┐рд▓рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рд╕реНрдЯреНрд░реЛрдХрдЯреЗрдХреНрд╕реНрдЯ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред рдмрд┐рд▓реНрдЯ-рдЗрди рдХреИрдирд╡рд╛рд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ - рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ - рдЖрдкрдХреЛ рдмрд╣реБрдд рдХрдо рд╕реНрддрд░ рдкрд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░ рдХреЗ fabric.Text рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде - рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓реЗрдВ, рдЖрджрд┐ред

рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдореГрджреНрдз рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдореЗрдВ рдирд╣реАрдВ:



рдареАрдХ рд╣реИ, рддреЛ рдЖрдЗрдП рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдХреЛ рджреЗрдЦреЗрдВ?

 var text = new fabric.Text('hello world', { left: 100, top: 100 }); canvas.add(text); 

рд╡рд╣ рд╕рдм рд╣реИ! рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЗрдЪреНрдЫрд┐рдд fabric.Text рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ fabric.Text рд╣реЛрдЧрд╛ред рдХреИрдирд╡рд╛рд╕ рдкрд░, рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рда рдХреА рд░реЗрдЦрд╛ рд╣реИред рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣; рдЖрдк рдмрд╛рдПрдВ, рдКрдкрд░, рднрд░рдг, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЖрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рда рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВ, рдкрд╛рда рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

FontFamily


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдореНрд╕ рдиреНрдпреВ рд░реЛрдорди рд╣реИред рдЖрдкрдХреЛ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдлрд╝реЙрдиреНрдЯ рдкрд░рд┐рд╡рд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 var comicSansText = new fabric.Text("I'm in Comic Sans", { fontFamily: 'Comic Sans' }); 



fONTSIZE



рдкрд╛рда рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдЪреМрдбрд╝рд╛рдИ / рдКрдВрдЪрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдлреЙрдиреНрдЯрд╕рд╛рдЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓рдПрдХреНрд╕ / рд╕реНрдХреЗрд▓ред

 var text40 = new fabric.Text("I'm at fontSize 40", { fontSize: 40 }); var text20 = new fabric.Text("I'm at fontSize 20", { fontSize: 20 }); 



fontWeight



рдЖрдкрдХреЛ рдкрд╛рда рдХреЛ рдореЛрдЯрд╛ рдпрд╛ рдкрддрд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реАрдПрд╕рдПрд╕ рдХреА рддрд░рд╣, рдЖрдк рдпрд╛ рддреЛ рд╢рдмреНрджреЛрдВ ("рд╕рд╛рдорд╛рдиреНрдп", "рдмреЛрд▓реНрдб") рдпрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдиреЛрдВ (100, 200, 400, 600, 800) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЛрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдлрд╝реЙрдиреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдлрд╝реЙрдиреНрдЯ рдореЗрдВ "рдмреЛрд▓реНрдб" (рдмреЛрд▓реНрдб) рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреЛ рдмреЛрд▓реНрдб рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

 var normalText = new fabric.Text("I'm a normal text", { fontWeight: 'normal' }); var boldText = new fabric.Text("I'm a bold text", { fontWeight: 'bold' }); 



textDecoration



рдЖрдкрдХреЛ рдкрд╛рда рдореЗрдВ рд╕реНрдЯреНрд░рд╛рдЗрдХрдереНрд░реВ, рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдпрд╛ рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдШреЛрд╖рдгрд╛ рд╕реАрдПрд╕рдПрд╕ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлреИрдмреНрд░рд┐рдХ рдЖрдкрдХреЛ рдЗрди рд╕рдЬрд╛рд╡рдЯреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдФрд░ рднреА рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдЦрд╛рдВрдХрди рдФрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХрдЖрдЙрдЯ) рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗред

 var underlineText = new fabric.Text("I'm an underlined text", { textDecoration: 'underline' }); var strokeThroughText = new fabric.Text("I'm a stroke-through text", { textDecoration: 'line-through' }); var overlineText = new fabric.Text("I'm an overline text", { textDecoration: 'overline' }); 



рдЫрд╛рдпрд╛



рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ред рдЗрд╕рдореЗрдВ 4 рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ: рд░рдВрдЧ, рдХреНрд╖реИрддрд┐рдЬ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди, рд╡рд░реНрдЯрд┐рдХрд▓ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдФрд░ рдмреНрд▓рд░ рд╕рд╛рдЗрдЬред рдпрджрд┐ рдЖрдк рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдЫрд╛рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдм рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрди 4 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 var shadowText1 = new fabric.Text("I'm a text with shadow", { shadow: 'rgba(0,0,0,0.3) 5px 5px 5px' }); var shadowText2 = new fabric.Text("And another shadow", { shadow: 'rgba(0,0,0,0.2) 0 0 5px' }); var shadowText3 = new fabric.Text("Lorem ipsum dolor sit", { shadow: 'green -5px -5px 3px' }); 



fontStyle



рдкрд╛рда рд╢реИрд▓реАред рдХреЗрд╡рд▓ рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: "рд╕рд╛рдорд╛рдиреНрдп" рдпрд╛ "рдЗрдЯреИрд▓рд┐рдХ"ред рдлрд┐рд░ рд╕реЗ, рдпрд╣ CSS рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

 var italicText = new fabric.Text("A very fancy italic text", { fontStyle: 'italic', fontFamily: 'Delicious' }); var anotherItalicText = new fabric.Text("another italic text", { fontStyle: 'italic', fontFamily: 'Hoefler Text' }); 



рд╕реНрдЯреНрд░реЛрдХ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ



рд╕реНрдЯреНрд░реЛрдХ (рдмрд╛рд╣рд░реА рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рд░рдВрдЧ) рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ (рдмрд╛рд╣рд░реА рд╕реНрдЯреНрд░реЛрдХ рдХреА рдЪреМрдбрд╝рд╛рдИ), рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

 var textWithStroke = new fabric.Text("Text with a stroke", { stroke: '#ff1318', strokeWidth: 1 }); var loremIpsumDolor = new fabric.Text("Lorem ipsum dolor", { fontFamily: 'Impact', stroke: '#c3bfbf', strokeWidth: 3 }); 



textAlign



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

рд╕рдВрднрд╡ рдорд╛рди: "рдмрд╛рдПрдВ", "рдХреЗрдВрджреНрд░", "рд╕рд╣реА", рдФрд░ "рдЙрдЪрд┐рдд"

 var text = 'this is\na multiline\ntext\naligned right!'; var alignedRightText = new fabric.Text(text, { textAlign: 'right' }); 



lineHeight



рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЗрдирд╣рд╛рдЗрдЯ (рд▓рд╛рдЗрди рдКрдВрдЪрд╛рдИ) рд╣реИред рдЖрдкрдХреЛ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдкрд╛рда рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд▓рд╛рдЗрдирд╣рд╛рдЗрдЯ 3 рдХреЗ рд╕рд╛рде рдкрд╛рда рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рд▓рд╛рдЗрдирд╣рд╛рдЗрдЯ 1 рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рд╣реИред

 var lineHeight3 = new fabric.Text('Lorem ipsum ...', { lineHeight: 3 }); var lineHeight1 = new fabric.Text('Lorem ipsum ...', { lineHeight: 1 }); 



textBackgroundColor



рдЕрдВрдд рдореЗрдВ, рдЖрдк textBackgroundColor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗрд╡рд▓ рдкрд╛рда рдХреЗ рдиреАрдЪреЗ рд╣реА рднрд░реА рд╣реБрдИ рд╣реИ, рди рдХрд┐ рдкреВрд░реЗ "рдмреЙрдХреНрд╕" рдкрд░ред рд╕рдВрдкреВрд░реНрдг рдкрд╛рда рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ "рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдбрд░реЗрд▓рд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд╛рда рдФрд░ рд▓рд╛рдЗрдирд╣рд╛рдЗрдЯ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдпрджрд┐ рд▓рд╛рдЗрдирд╣рд╛рдЗрдЯ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рддреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗрд╡рд▓ рдкрд╛рда рдХреЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред

 var text = 'this is\na multiline\ntext\nwith\ncustom lineheight\n&background'; var textWithBackground = new fabric.Text(text, { textBackgroundColor: 'rgb(0,200,0)' }); 



рдШрдЯрдирд╛рдУрдВ


рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЙрдкрдХрд░рдг рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдШрдЯрдирд╛ рдкреНрд░рдгрд╛рд▓реА рд╣реИ; рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛рдУрдВ рддрдХред

рдЬрдм рдХреИрдирд╡рд╛рд╕ рдкрд░ рдХреБрдЫ рдШрдЯрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдШрдЯрдирд╛рдХреНрд░рдо рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖рдгреЛрдВ рдХреЛ "рдкрдХрдбрд╝рдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдЙрд╕ рдХреЛ рдХрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рд╣рдо рдорд╛рдЙрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ: рдШрдЯрдирд╛ред рдХреИрд╕реЗ рдЬрдм рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛? рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ "рдСрдмреНрдЬреЗрдХреНрдЯ: рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛" рд╣реИред рдЦреИрд░, рдХреИрдирд╡рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╣рдо "рдХреЗ рдмрд╛рдж: рд░реЗрдВрдбрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдИрд╡реЗрдВрдЯ API рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ jQuery, Underscore.js, рдпрд╛ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп JS рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП on рдореЗрдердб рд╣реИ, рдФрд░ рдЗрд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ off рдореЗрдердб рд╣реИред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

 var canvas = new fabric.Canvas('...'); canvas.on('mouse:down', function(options) { console.log(options.e.clientX, options.e.clientY); }); 

рд╣рдордиреЗ рдХреИрдирд╡рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ "рдорд╛рдЙрд╕: рдбрд╛рдЙрди" рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛, рдФрд░ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдШрдЯрдирд╛ рд╣реБрдИ рдереАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдареАрдХ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд╣рд╛рдВ рд╣реБрдЖред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ: e - рдореВрд▓ рдШрдЯрдирд╛, рдФрд░ target - рдХреИрдирд╡рд╛рд╕ рдкрд░ рдлреИрдмреНрд░рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ, рдпрджрд┐ рдпрд╣ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рд╣реБрдЖ рд╣реЛред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, target рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдорд╛рдЙрд╕: рдбрд╛рдЙрди" рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди "рдХреЗ рдмрд╛рдж: рд░реЗрдВрдбрд░" рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ "рдХреЛрдИ рд╡рд╕реНрддреБ" рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рд╕реАрдзрд╛ рд╕рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рдерд╛)ред

 canvas.on('mouse:down', function(options) { if (options.target) { console.log('an object was clicked! ', options.target.type); } }); 

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

рдлреИрдмреНрд░рд┐рдХ рдореЗрдВ рдЕрдиреНрдп рдХреМрди рд╕реЗ рдЗрд╡реЗрдВрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ? рдорд╛рдЙрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ " рдорд╛рдЙрд╕: рдбрд╛рдЙрди ", " рдорд╛рдЙрд╕: рдореВрд╡ ", рдФрд░ " рдорд╛рдЙрд╕: рдЕрдк " рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ, "рдХреЗ рдмрд╛рдж: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ " рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ: " рдкрд╣рд▓реЗ: рдЪрдпрди: рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ ", " рдЪрдпрди: рдмрдирд╛рдпрд╛ рдЧрдпрд╛ ", " рдЪрдпрди: рд╕рд╛рдлрд╝ "ред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╕реНрддреБрдУрдВ рдХреА рдШрдЯрдирд╛рдПрдВ: " рдСрдмреНрдЬреЗрдХреНрдЯ: рд╕рдВрд╢реЛрдзрд┐рдд ", " рдСрдмреНрдЬреЗрдХреНрдЯ: рдЪрдпрдирд┐рдд ", " рдСрдмреНрдЬреЗрдХреНрдЯ: рдореВрд╡рд┐рдВрдЧ ", " рдСрдмреНрдЬреЗрдХреНрдЯ: рд╕реНрдХреЗрд▓рд┐рдВрдЧ ", " рдСрдмреНрдЬреЗрдХреНрдЯ: рд░реЛрдЯреЗрдЯрд┐рдВрдЧ ", рдФрд░ " рдСрдмреНрдЬреЗрдХреНрдЯ: рдПрдбреЗрдб "ред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ "рдСрдмреНрдЬреЗрдХреНрдЯ: рдореВрд╡рд┐рдВрдЧ" (рдпрд╛ "рдСрдмреНрдЬреЗрдХреНрдЯ: рд╕реНрдХреЗрд▓рд┐рдВрдЧ") рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдПрдБ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЧрддрд┐ рдпрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреА рд░рд╣рддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡рд╣ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛред рдЙрд╕реА рд╕рдордп, "рдСрдмреНрдЬреЗрдХреНрдЯ: рд╕рдВрд╢реЛрдзрд┐рдд" рдпрд╛ "рдЪрдпрди: рдирд┐рд░реНрдорд┐рдд" рдЬреИрд╕реА рдШрдЯрдирд╛рдПрдВ рдХреЗрд╡рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдирд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдирд╛, рдЖрджрд┐)ред

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЛ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ ( canvas.on('mouse:down', ...) ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдШрдЯрдирд╛рдПрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрдИ рдХреИрдирд╡рд╕ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реНрд░реЛрддрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдХреИрдирд╡рд╕ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдиреНрдп рдХреИрдирд╡рд╕ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдлреИрдмреНрд░рд┐рдХ рдЖрдкрдХреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдлреИрдмреНрд░рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕реАрдзреЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ!

 var rect = new fabric.Rect({ width: 100, height: 50, fill: 'green' }); rect.on('selected', function() { console.log('selected a rectangle'); }); var circle = new fabric.Circle({ radius: 75, fill: 'blue' }); circle.on('selected', function() { console.log('selected a circle'); }); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╢реНрд░реЛрддрд╛ рд╕реАрдзреЗ рдЖрдпрдд рдФрд░ рд╡реГрддреНрдд рд╕реЗ "рдЬреБрдбрд╝рддреЗ рд╣реИрдВ"ред "рдСрдмреНрдЬреЗрдХреНрдЯ: рдЪрдпрдирд┐рдд" рдХреЗ рдмрдЬрд╛рдп, рд╣рдо "рдЪрдпрдирд┐рдд" рдИрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛, рдЖрдк "рд╕рдВрд╢реЛрдзрд┐рдд" ("рд╡рд╕реНрддреБ: рд╕рдВрд╢реЛрдзрд┐рдд" рдЬрдм рдХреИрдирд╡рд╛рд╕ рдкрд░ "рд▓рдЯрдХрд╛"), "рдШреВрд░реНрдгрди" ("рд╡рд╕реНрддреБ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ: рдШреВрд░реНрдгрди"), рдЖрджрд┐ рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдЗрд╕ рдбреЗрдореЛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд░реАрдм рдФрд░ рд╕реАрдзреЗ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкрд░, рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдмрд╣реБрдд рд╕рд╛рд░реА рдирдИ рдЪреАрдЬреЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ! рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдореВрд╣, рдХреНрд░рдорд╛рдВрдХрди / рдХреИрдирд╡рд╛рд╕ рдХреЗ рдирд┐рд░реНрд╡рдиреАрдХрд░рдг рдФрд░ JSON рдкреНрд░рд╛рд░реВрдк, SVG рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

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


All Articles