{"id":8641,"date":"2021-11-26T09:04:37","date_gmt":"2021-11-26T01:04:37","guid":{"rendered":"https:\/\/sdeno.com\/?p=8641"},"modified":"2021-11-26T09:17:20","modified_gmt":"2021-11-26T01:17:20","slug":"canvas%e6%8f%92%e4%bb%b6fabric-js","status":"publish","type":"post","link":"https:\/\/sdeno.com\/?p=8641","title":{"rendered":"canvas\u63d2\u4ef6fabric.js"},"content":{"rendered":"<p>Fabric.js \u662f\u4e00\u4e2a\u5f3a\u5927\u800c\u7b80\u5355\u7684 Javascript HTML5 \u753b\u5e03\u5e93 Fabric \u5728\u753b\u5e03\u5143\u7d20\u4e4b\u4e0a\u63d0\u4f9b\u4ea4\u4e92\u5f0f\u5bf9\u8c61\u6a21\u578b Fabric \u8fd8\u5177\u6709 SVG-to-canvas\uff08\u548c canvas-to-SVG\uff09\u89e3\u6790\u5668<\/p>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:650px\"><div style=\"padding-top:65.076923076923%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"650\" height=\"423\" class=\"alignnone size-full wp-image-8660 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can17.png\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can17.png\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can17.png 650w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can17-300x195.png 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\"><\/figure>\n<p>&nbsp;<\/p>\n<p>\u4e00\u3001\u5b89\u88c5<\/p>\n<pre>yarn add fabric -S\r\n#or\r\nnpm i fabric -S<\/pre>\n<p>\u4e5f\u53ef\u4ee5\u5728 \u5b98\u7f51 \u4e0b\u8f7d\u6700\u65b0 js \u6587\u4ef6,\u901a\u8fc7 script \u6807\u7b7e\u5f15\u5165<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e8c\u3001\u4f7f\u7528<\/p>\n<pre>&lt;!-- html --&gt;\r\n&lt;canvas id=\"canvas\" width=\"500\" height=\"500\"&gt;&lt;\/canvas&gt;<\/pre>\n<p>2.1 \u7ed8\u5236\u4e00\u4e2a\u7b80\u5355\u7684\u56fe\u5f62<\/p>\n<p>Fabric \u63d0\u4f9b\u4e86 7 \u79cd\u57fa\u7840\u5f62\u72b6\uff1a<\/p>\n<p>fabric.Circle (\u5706)<\/p>\n<p>fabric.Ellipse (\u692d\u5706)<\/p>\n<p>fabric.Line (\u7ebf)<\/p>\n<p>fabric.Polyline (\u591a\u6761\u7ebf\u7ed8\u5236\u6210\u56fe\u5f62)<\/p>\n<p>fabric.triangle (\u4e09\u89d2\u5f62)<\/p>\n<p>fabric.Rect (\u77e9\u5f62)<\/p>\n<p>fabric.Polygon (\u591a\u8fb9\u5f62)<\/p>\n<p>\u77e9\u5f62<\/p>\n<pre>\/\/ js\r\n\r\n\/\/\u5f15\u5165fabric\r\nimport { fabric } from \"fabric\";\r\n\r\n\/\/ \u521b\u5efa\u4e00\u4e2afabric\u5b9e\u4f8b\r\nlet canvas = new fabric.Canvas(\"canvas\"); \/\/\u53ef\u4ee5\u901a\u8fc7\u9f20\u6807\u65b9\u6cd5\u7f29\u5c0f,\u65cb\u8f6c\r\n\/\/ or\r\n\/\/ let canvas = new fabric.StaticCanvas(\"canvas\");\/\/\u6ca1\u6709\u9f20\u6807\u4ea4\u4e92\u7684fabric\u5bf9\u8c61\r\n\r\n\/\/ \u521b\u5efa\u4e00\u4e2a\u77e9\u5f62\u5bf9\u8c61\r\nlet rect = new fabric.Rect({\r\n  left: 200, \/\/\u8ddd\u79bb\u5de6\u8fb9\u7684\u8ddd\u79bb\r\n  top: 200, \/\/\u8ddd\u79bb\u4e0a\u8fb9\u7684\u8ddd\u79bb\r\n  fill: \"green\", \/\/\u586b\u5145\u7684\u989c\u8272\r\n  width: 200, \/\/\u77e9\u5f62\u5bbd\u5ea6\r\n  height: 200, \/\/\u77e9\u5f62\u9ad8\u5ea6\r\n});\r\n\r\n\/\/ \u5c06\u77e9\u5f62\u6dfb\u52a0\u5230canvas\u753b\u5e03\u4e0a\r\ncanvas.add(rect);<\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u754c\u9762\u4e2d\u586b\u5145\u4e86\u4e00\u4e2a\u53ef\u4ee5\u901a\u8fc7\u9f20\u6807\u653e\u5927\u7f29\u5c0f\u4e14\u53ef\u4ee5\u65cb\u8f6c\u7684\u7eff\u8272\u77e9\u5f62<br \/>\n\u901a\u8fc7\u5bf9\u8c61\u7684\u5f62\u5f0f\u914d\u7f6e\u5143\u7d20\u6837\u5f0f,\u975e\u5e38\u7684\u65b9\u4fbf!<\/p>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:720px\"><div style=\"padding-top:59.444444444444%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"720\" height=\"428\" class=\"alignnone size-full wp-image-8642 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can1.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can1.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can1.jpg 720w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can1-300x178.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\"><\/figure>\n<p>\u5706\u5f62\u548c\u4e09\u89d2\u5f62<\/p>\n<pre>\/\/ \u521b\u5efa\u4e00\u4e2a\u5706\u5f62\u5bf9\u8c61\r\nlet circle = new fabric.Circle({\r\n  left: 0, \/\/\u8ddd\u79bb\u5de6\u8fb9\u7684\u8ddd\u79bb\r\n  top: 0, \/\/\u8ddd\u79bb\u4e0a\u8fb9\u7684\u8ddd\u79bb\r\n  fill: \"red\", \/\/\u586b\u5145\u7684\u989c\u8272\r\n  radius: 50, \/\/\u5706\u7684\u534a\u5f84\r\n});\r\n\/\/ \u521b\u5efa\u4e00\u4e2a\u4e09\u89d2\u5f62\u5bf9\u8c61\r\nlet triangle = new fabric.Triangle({\r\n  left: 200, \/\/\u8ddd\u79bb\u5de6\u8fb9\u7684\u8ddd\u79bb\r\n  top: 0, \/\/\u8ddd\u79bb\u4e0a\u8fb9\u7684\u8ddd\u79bb\r\n  fill: \"blue\", \/\/\u586b\u5145\u7684\u989c\u8272\r\n  width: 100, \/\/\u5bbd\u5ea6\r\n  height: 100, \/\/\u9ad8\u5ea6\r\n});\r\n\/\/ \u5c06\u56fe\u5f62\u5f62\u6dfb\u52a0\u5230canvas\u753b\u5e03\u4e0a\r\ncanvas.add(circle, triangle);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:500px\"><div style=\"padding-top:100.8%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"500\" height=\"504\" class=\"alignnone size-full wp-image-8643 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can2.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can2.gif\"><\/figure>\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u5c5e\u6027\u8bbe\u7f6e,\u51b3\u5b9a\u662f\u5426\u53ef\u4ee5\u5bf9\u76f8\u5173\u5143\u7d20\u8fdb\u884c\u4ea4\u4e92<\/p>\n<pre>canvas.selection = false; \/\/ \u7981\u6b62\u6240\u6709\u9009\u4e2d\r\nrect.set(\"selectable\", false); \/\/ \u53ea\u662f\u7981\u6b62\u8fd9\u4e2a\u77e9\u5f62\u9009\u4e2d<\/pre>\n<p>&nbsp;<\/p>\n<p>2.2 \u7ed8\u5236\u56fe\u7247<\/p>\n<p>\u4e3b\u8981\u6709\u901a\u8fc7 url \u548c img \u6807\u7b7e\u7ed8\u5236\u4e24\u79cd\u65b9\u5f0f<\/p>\n<pre>\/\/\u901a\u8fc7url\u7ed8\u5236\u56fe\u7247\r\nfabric.Image.fromURL(\r\n  \/\/\u672c\u5730\u56fe\u7247\u9700\u8981\u901a\u8fc7require\u6765\u5f15\u5165,require(\".\/xxx.jpeg\")\r\n  \"https:\/\/gimg2.baidu.com\/image_search\/src=http%3A%2F%2Fimg.thaihot.com.cn%2Fuploadimg%2Fico%2F2021%2F0711%2F1625982535739193.jpg&amp;refer=http%3A%2F%2Fimg.thaihot.com.cn&amp;app=2002&amp;size=f9999,10000&amp;q=a80&amp;n=0&amp;g=0n&amp;fmt=jpeg?sec=1630940858&amp;t=e1d24ff0a7eaeea2ff89cedf656a9374\",\r\n  (img) =&gt; {\r\n    img.scale(0.5);\r\n    canvas.add(img);\r\n  }\r\n);\r\n\/\/\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6807\u7b7e\u7ed8\u5236\r\nlet img = document.getElementById(\"img\");\r\nlet image = new fabric.Image(img, {\r\n  left: 100,\r\n  top: 100,\r\n  opacity: 0.8,\r\n});\r\ncanvas.add(image);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:720px\"><div style=\"padding-top:63.472222222222%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"720\" height=\"457\" class=\"alignnone size-full wp-image-8644 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can3.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can3.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can3.jpg 720w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can3-300x190.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\"><\/figure>\n<p>&nbsp;<\/p>\n<p>2.3 \u901a\u8fc7\u81ea\u5b9a\u4e49\u7684\u8def\u5f84\u7ed8\u5236<\/p>\n<p data-tool=\"mdnice\u7f16\u8f91\u5668\">\u5728\u6b64\u4e4b\u524d\u6211\u4eec\u9700\u8981\u4e86\u89e3\u51e0\u4e2a\u53c2\u6570\u7684\u542b\u4e49<\/p>\n<ul class=\"list-paddingleft-2\" data-tool=\"mdnice\u7f16\u8f91\u5668\">\n<li>\n<section>M : \u201cmove\u201d\u79fb\u52a8\u5230\u67d0\u70b9<\/section>\n<\/li>\n<li>\n<section>L : \u201cline\u201d\u753b\u7ebf x,y<\/section>\n<\/li>\n<li>\n<section>C : \u201ccurve\u201d\u66f2\u7ebf<\/section>\n<\/li>\n<li>\n<section>A : \u201carc\u201d\u5f27<\/section>\n<\/li>\n<li>\n<section>z : \u95ed\u5408\u8def\u5f84(\u7c7b\u4f3c PS \u4e2d\u7684\u521b\u5efa\u9009\u533a)<\/section>\n<\/li>\n<\/ul>\n<pre>let customPath = new fabric.Path(\"M 0 0 L 300 100 L 170 100  z\");\r\ncustomPath.set({\r\n  left: 100,\r\n  top: 100,\r\n  fill: \"green\",\r\n});\r\ncanvas.add(customPath);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:772px\"><div style=\"padding-top:65.80310880829%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"772\" height=\"508\" class=\"alignnone size-full wp-image-8645 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can4.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can4.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can4.jpg 772w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can4-300x197.jpg 300w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can4-768x505.jpg 768w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\"><\/figure>\n<pre>let customPath = new fabric.Path(\r\n  \"M 0 0 L 300 100 L 170 100 L 70 300 L 20 200 C136.19,2.98,128.98,0,121.32,0 z\"\r\n);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:808px\"><div style=\"padding-top:62.871287128713%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"808\" height=\"508\" class=\"alignnone size-full wp-image-8646 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can5.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can5.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can5.jpg 808w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can5-300x189.jpg 300w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can5-768x483.jpg 768w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\"><\/figure>\n<p>\u53ef\u4ee5\u770b\u5230\u901a\u8fc7\u8def\u5f84\u7ed8\u5236,\u6211\u4eec\u53ef\u4ee5\u5236\u4f5c\u975e\u5e38\u590d\u6742\u7684\u56fe\u5f62(\u4f46\u662f\u4e00\u822c\u7528\u4e0d\u5230,\u6211\u4eec\u4e00\u822c\u7528\u5b83\u6765\u89e3\u6790 SVG \u540e\u62ff\u5230 path \u590d\u539f\u56fe\u5f62)<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>\u52a8\u753b<\/strong><\/span><\/p>\n<p>\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u52a8\u753b\u7684\u5c5e\u6027\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u52a8\u753b\u7684\u6700\u7ec8\u4f4d\u7f6e\uff0c\u7b2c\u4e09\u4e2a\u53c2\u6570\u662f\u4e00\u4e2a\u53ef\u9009\u7684\u5bf9\u8c61\uff0c\u6307\u5b9a\u52a8\u753b\u7684\u7ec6\u8282\uff1a\u6301\u7eed\u65f6\u95f4\uff0c\u56de\u8c03\uff0c\u52a8\u6548\u7b49\u3002<\/p>\n<pre>\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3b\u8981\u6709<\/pre>\n<ul class=\"list-paddingleft-2\" data-tool=\"mdnice\u7f16\u8f91\u5668\">\n<li>\n<section>duration \u9ed8\u8ba4\u4e3a 500ms\u3002\u53ef\u4ee5\u7528\u6765\u6539\u53d8\u52a8\u753b\u7684\u6301\u7eed\u65f6\u95f4\u3002<\/section>\n<\/li>\n<li>\n<section>from \u5141\u8bb8\u6307\u5b9a\u52a8\u753b\u5c5e\u6027\u7684\u8d77\u59cb\u503c\uff08\u5982\u679c\u6211\u4eec\u4e0d\u5e0c\u671b\u4f7f\u7528\u5f53\u524d\u503c\uff09\u3002<\/section>\n<\/li>\n<li>\n<section>onComplete \u52a8\u753b\u7ed3\u675f\u4e4b\u540e\u7684\u56de\u8c03\u3002<\/section>\n<\/li>\n<li>\n<section>easing \u52a8\u6548\u51fd\u6570\u3002<\/section>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\u7edd\u5bf9\u52a8\u753b<\/p>\n<pre>let canvas = new fabric.Canvas(\"canvas\");\r\nlet rect = new fabric.Rect({\r\n  left: 400, \/\/\u8ddd\u79bb\u5de6\u8fb9\u7684\u8ddd\u79bb\r\n  top: 200, \/\/\u8ddd\u79bb\u4e0a\u8fb9\u7684\u8ddd\u79bb\r\n  fill: \"green\", \/\/\u586b\u5145\u7684\u989c\u8272\r\n  width: 200, \/\/\u5bbd\u5ea6\r\n  height: 200, \/\/\u9ad8\u5ea6\r\n});\r\nrect.animate(\"left\", 100, {\r\n  onChange: canvas.renderAll.bind(canvas),\r\n  duration: 1000,\r\n});\r\ncanvas.add(rect);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8648 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can6.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can6.gif\"><\/figure>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u76f8\u5bf9\u52a8\u753b(\u7b2c\u4e8c\u4e2a\u53c2\u6570\u901a\u8fc7+=,-=\u7b49\u6765\u51b3\u5b9a\u52a8\u753b\u7684\u6700\u7ec8\u6548\u679c)<\/strong><\/h3>\n<pre>rect.animate(\"left\", \"+=100\", {\r\n  onChange: canvas.renderAll.bind(canvas),\r\n  duration: 1000,\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8650 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can7.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can7.gif\"><\/figure>\n<pre>rect.set({ angle: 45 });\r\nrect.animate(\"angle\", \"-=90\", {\r\n  onChange: canvas.renderAll.bind(canvas),\r\n  duration: 2000,\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8651 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can8.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can8.gif\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u5b9a\u4e49\u52a8\u753b\u7684\u52a8\u6548\u51fd\u6570<\/strong><\/h3>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u52a8\u753b\u4f7f\u7528\u201ceaseInSine\u201d\u52a8\u6548\u6267\u884c\u3002\u5982\u679c\u8fd9\u4e0d\u662f\u4f60\u9700\u8981\u7684\uff0cfabric \u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u5f88\u591a\u5185\u7f6e\u52a8\u753b\u6548\u679c, fabric.util.ease \u4e0b\u6709\u4e00\u5927\u5806\u52a8\u6548\u7684\u9009\u9879\u3002<br \/>\n\u5e38\u7528\u7684\u6709easeOutBounce,easeInCubic\uff0ceaseOutCubic\uff0ceaseInElastic\uff0ceaseOutElastic\uff0ceaseInBounce \u548c easeOutExpo\u7b49<\/p>\n<pre>rect.animate(\"left\", 100, {\r\n  onChange: canvas.renderAll.bind(canvas),\r\n  duration: 1000,\r\n  easing: fabric.util.ease.easeOutBounce,\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8652 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9.gif\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u56fe\u50cf\u6ee4\u955c<\/strong><\/h3>\n<p data-tool=\"mdnice\u7f16\u8f91\u5668\">\u76ee\u524d Fabric \u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4ee5\u4e0b\u5185\u7f6e\u6ee4\u955c<\/p>\n<ul class=\"list-paddingleft-2\" data-tool=\"mdnice\u7f16\u8f91\u5668\">\n<li>\n<section>BaseFilter \u57fa\u672c\u8fc7\u6ee4\u5668<\/section>\n<\/li>\n<li>\n<section>Blur \u6a21\u7cca<\/section>\n<\/li>\n<li>\n<section>Brightness \u4eae\u5ea6<\/section>\n<\/li>\n<li>\n<section>ColorMatrix \u989c\u8272\u77e9\u9635<\/section>\n<\/li>\n<li>\n<section>Contrast \u5bf9\u6bd4<\/section>\n<\/li>\n<li>\n<section>Convolute \u5377\u79ef<\/section>\n<\/li>\n<li>\n<section>Gamma \u4f3d\u739b<\/section>\n<\/li>\n<li>\n<section>Grayscale \u7070\u5ea6<\/section>\n<\/li>\n<li>\n<section>HueRotation \u8272\u8c03\u65cb\u8f6c<\/section>\n<\/li>\n<li>\n<section>Invert \u5012\u7f6e<\/section>\n<\/li>\n<li>\n<section>Noise \u566a\u97f3<\/section>\n<\/li>\n<li>\n<section>Pixelate \u50cf\u7d20\u5316<\/section>\n<\/li>\n<li>\n<section>RemoveColor \u79fb\u9664\u989c\u8272<\/section>\n<\/li>\n<li>\n<section>Resize \u8c03\u6574\u5927\u5c0f<\/section>\n<\/li>\n<li>\n<section>Saturation \u9971\u548c<\/section>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u5355\u4e2a\u6ee4\u955c<\/strong><\/h3>\n<pre>fabric.Image.fromURL(require(\".\/aaa.jpeg\"), (img) =&gt; {\r\n  img.scale(0.5);\r\n  canvas.add(img);\r\n});\r\nfabric.Image.fromURL(require(\".\/aaa.jpeg\"), (img) =&gt; {\r\n  img.scale(0.5);\r\n  \/\/ \u6dfb\u52a0\u6ee4\u955c\r\n  img.filters.push(new fabric.Image.filters.Grayscale());\r\n  \/\/ \u56fe\u7247\u52a0\u8f7d\u5b8c\u6210\u4e4b\u540e\uff0c\u5e94\u7528\u6ee4\u955c\u6548\u679c\r\n  img.applyFilters();\r\n  img.set({\r\n    left: 300,\r\n    top: 250,\r\n  });\r\n  canvas.add(img);\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:720px\"><div style=\"padding-top:63.194444444444%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"720\" height=\"455\" class=\"alignnone size-full wp-image-8653 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9.jpg 720w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can9-300x190.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u53e0\u52a0\u6ee4\u955c<\/strong><\/h3>\n<p>\u201cfilters\u201d\u5c5e\u6027\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u6570\u7ec4\u65b9\u6cd5\u6267\u884c\u4efb\u4f55\u6240\u9700\u7684\u64cd\u4f5c\uff1a\u79fb\u9664\u6ee4\u955c\uff08pop\uff0csplice\uff0cshift\uff09\uff0c\u6dfb\u52a0\u6ee4\u955c\uff08push\uff0cunshift\uff0csplice\uff09\uff0c\u751a\u81f3\u53ef\u4ee5\u7ec4\u5408\u591a\u4e2a\u6ee4\u955c\u3002\u5f53\u6211\u4eec\u8c03\u7528 applyFilters \u65f6\uff0c\u201cfilters\u201d\u6570\u7ec4\u4e2d\u5b58\u5728\u7684\u4efb\u4f55\u6ee4\u955c\u5c06\u9010\u4e2a\u5e94\u7528\uff0c\u6240\u4ee5\u8ba9\u6211\u4eec\u5c1d\u8bd5\u521b\u5efa\u4e00\u4e2a\u65e2\u8272\u504f\u53c8\u660e\u4eae\uff08Brightness\uff09\u7684\u56fe\u50cf\u3002<\/p>\n<pre>fabric.Image.fromURL(require(\".\/aaa.jpeg\"), (img) =&gt; {\r\n  img.scale(0.5);\r\n  \/\/ \u6dfb\u52a0\u6ee4\u955c\r\n  img.filters.push(\r\n    new fabric.Image.filters.Grayscale(),\r\n    new fabric.Image.filters.Sepia(), \/\/\u8272\u504f\r\n    new fabric.Image.filters.Brightness({ brightness: 0.2 }) \/\/\u4eae\u5ea6\r\n  );\r\n  \/\/ \u56fe\u7247\u52a0\u8f7d\u5b8c\u6210\u4e4b\u540e\uff0c\u5e94\u7528\u6ee4\u955c\u6548\u679c\r\n  img.applyFilters();\r\n  img.set({\r\n    left: 300,\r\n    top: 250,\r\n  });\r\n  canvas.add(img);\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:720px\"><div style=\"padding-top:63.055555555556%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"720\" height=\"454\" class=\"alignnone size-full wp-image-8654 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can10.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can10.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can10.jpg 720w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can10-300x189.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\"><\/figure>\n<p>\u53ef\u4ee5\u770b\u5230\u591a\u4e2a\u6ee4\u955c\u7684\u6548\u679c\u53e0\u52a0\u663e\u793a\u4e86,\u5f53\u7136 Fabric \u8fd8\u652f\u6301\u81ea\u5b9a\u4e49\u6ee4\u955c,\u5728\u672c\u7bc7\u6587\u7ae0\u70b9\u8d5e\u8fc7 500 \u540e\u6211\u5c06\u66f4\u65b0 fabric \u9ad8\u7ea7\u7bc7,\u611f\u8c22\u5927\u5bb6\u7684\u652f\u6301~<\/p>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u989c\u8272<\/strong><\/h3>\n<p>\u65e0\u8bba\u4f60\u662f\u4f7f\u7528\u5341\u516d\u8fdb\u5236\uff0cRGB \u6216 RGBA \u989c\u8272\uff0cFabric \u90fd\u80fd\u5904\u7406\u7684\u5f88\u597d<\/p>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u5b9a\u4e49\u989c\u8272<\/strong><\/h3>\n<pre>new fabric.Color(\"#f55\");\r\nnew fabric.Color(\"#aa3123\");\r\nnew fabric.Color(\"356333\");\r\nnew fabric.Color(\"rgb(100,50,100)\");\r\nnew fabric.Color(\"rgba(100, 200, 30, 0.5)\");<\/pre>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u989c\u8272\u8f6c\u6362<\/strong><\/h3>\n<pre>new fabric.Color('#f55').toRgb(); \/\/ \"rgb(255,85,85)\"\r\nnew fabric.Color('rgb(100,100,100)').toHex(); \/\/ \"646464\"\r\nnew fabric.Color('fff').toHex(); \/\/ \"FFFFFF\"<\/pre>\n<p>\u6211\u4eec\u8fd8\u53ef\u4ee5\u7528\u53e6\u4e00\u79cd\u989c\u8272\u53e0\u52a0\uff0c\u6216\u5c06\u5176\u8f6c\u6362\u4e3a\u7070\u5ea6\u7248\u672c\u3002<\/p>\n<pre>let redish = new fabric.Color(\"#f55\");\r\nlet greenish = new fabric.Color(\"#5f5\");\r\nredish.overlayWith(greenish).toHex(); \/\/ \"AAAA55\"\r\nredish.toGrayscale().toHex(); \/\/ \"A1A1A1\"<\/pre>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u6e10\u53d8<\/strong><\/h3>\n<p>Fabric \u901a\u8fc7 setGradient \u65b9\u6cd5\u652f\u6301\u6e10\u53d8\uff0c\u5728\u6240\u6709\u5bf9\u8c61\u4e0a\u5b9a\u4e49\u3002\u8c03\u7528 setGradient(&#8216;fill&#8217;, { &#8230; })\u5c31\u50cf\u8bbe\u7f6e\u4e00\u4e2a\u5bf9\u8c61\u7684\u201cfill\u201d\u503c\u4e00\u6837\u3002<\/p>\n<pre>let circle = new fabric.Circle({\r\n  left: 100,\r\n  top: 100,\r\n  radius: 50\r\n});\r\n\r\ncircle.setGradient(\"fill\", {\r\n  \/\/ \u6e10\u53d8\u5f00\u59cb\u7684\u4f4d\u7f6e\r\n  x1: 0,\r\n  y1: 0,\r\n  \/\/ \u6e10\u53d8\u7ed3\u675f\u7684\u4f4d\u7f6e\r\n  x2: circle.width,\r\n  y2: 0,\r\n  \/\/\u6e10\u53d8\u7684\u989c\u8272\r\n  colorStops: {\r\n    \/\/ \u6e10\u53d8\u7684\u8303\u56f4(0,0.1,0.3,0.5,0.75,1)0-1\u4e4b\u95f4\u90fd\u53ef\u4ee5\r\n    0: \"red\",\r\n    0.2: \"orange\",\r\n    0.4: \"yellow\",\r\n    0.6: \"green\",\r\n    0.8: \"blue\",\r\n    1: \"purple\"\r\n  },\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:668px\"><div style=\"padding-top:29.640718562874%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"668\" height=\"198\" class=\"alignnone size-full wp-image-8656 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can11.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can11.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can11.jpg 668w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can11-300x89.jpg 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u6587\u672c<\/strong><\/h3>\n<p data-tool=\"mdnice\u7f16\u8f91\u5668\">fabric.Text \u5bf9\u8c61\u5bf9\u4e8e\u6587\u672c,\u63d0\u4f9b\u4e86\u6bd4 canvas \u66f4\u4e30\u5bcc\u7684\u529f\u80fd\uff0c\u5305\u62ec\uff1a<\/p>\n<ul class=\"list-paddingleft-2\" data-tool=\"mdnice\u7f16\u8f91\u5668\">\n<li>\n<section>\u652f\u6301\u591a\u884c Multiline support \u4e0d\u5e78\u7684\u662f\uff0c\u539f\u751f\u6587\u672c\u65b9\u6cd5\u5ffd\u7565\u4e86\u65b0\u5efa\u4e00\u884c\u3002<\/section>\n<\/li>\n<li>\n<section>\u6587\u672c\u5bf9\u9f50 Text alignment \u5de6\uff0c\u4e2d\uff0c\u53f3\u3002\u4f7f\u7528\u591a\u884c\u6587\u672c\u65f6\u5f88\u6709\u7528\u3002<\/section>\n<\/li>\n<li>\n<section>\u6587\u672c\u80cc\u666f Text background \u80cc\u666f\u4e5f\u652f\u6301\u6587\u672c\u5bf9\u9f50\u3002<\/section>\n<\/li>\n<li>\n<section>\u6587\u5b57\u88c5\u9970 Text decoration \u4e0b\u5212\u7ebf\uff0c\u4e0a\u5212\u7ebf\uff0c\u8d2f\u7a7f\u7ebf\u3002<\/section>\n<\/li>\n<li>\n<section>\u884c\u9ad8 Line Height \u5728\u4f7f\u7528\u591a\u884c\u6587\u672c\u65f6\u6709\u7528\u3002<\/section>\n<\/li>\n<li>\n<section>\u5b57\u7b26\u95f4\u8ddd Char spacing \u4f7f\u6587\u672c\u66f4\u7d27\u51d1\u6216\u66f4\u95f4\u9694\u3002<\/section>\n<\/li>\n<li>\n<section>\u5b50\u8303\u56f4 Subranges \u5c06\u989c\u8272\u548c\u5c5e\u6027\u5e94\u7528\u5230\u6587\u672c\u5bf9\u8c61\u7684\u5b50\u5bf9\u8c61\u4e2d\u3002<\/section>\n<\/li>\n<li>\n<section>\u591a\u5b57\u8282 Multibyte \u652f\u6301\u8868\u60c5\u7b26\u53f7\u3002<\/section>\n<\/li>\n<li>\n<section>\u4ea4\u4e92\u5f0f\u753b\u5e03\u7f16\u8f91 On canvas editing \u53ef\u4ee5\u76f4\u63a5\u5728\u753b\u5e03\u4e0a\u952e\u5165\u6587\u672c\u3002<\/section>\n<\/li>\n<\/ul>\n<pre>let text = new fabric.Text(\r\n  \"\u5927\u5bb6\u597d~\u8fd9\u91cc\u662f\u524d\u57d4\u5be8\\n\u6211\u662f\u8363\u9876~\\n\u4e00\u4e2a\u8981\u6210\u4e3a\u5f00\u53d1\u738b\u7684\u7537\u4eba!\",\r\n  {\r\n    left: 0,\r\n    top: 200,\r\n    fontFamily: \"Comic Sans\", \/\/\u5b57\u4f53\r\n    fontSize: 50, \/\/\u5b57\u53f7\r\n    fontWeight: 800, \/\/\u5b57\u4f53\u7c97\u7ec6,\u53ef\u4ee5\u4f7f\u7528\u5173\u952e\u5b57\uff08\u201cnormal\u201d\uff0c\u201cbold\u201d\uff09\u6216\u6570\u5b57\uff08100,200,400,600,800\uff09\r\n    shadow: \"green 3px 3px 2px\", \/\/\u6587\u5b57\u9634\u5f71,\u989c\u8272\uff0c\u6c34\u5e73\u504f\u79fb\uff0c\u5782\u76f4\u504f\u79fb\u548c\u6a21\u7cca\u5927\u5c0f\u3002\r\n    underline: true, \/\/\u4e0b\u5212\u7ebf\r\n    linethrough: true, \/\/\u5220\u9664\u7ebf\r\n    overline: true, \/\/\u4e0a\u5212\u7ebf\r\n    fontStyle: \"italic\", \/\/\u5b57\u4f53\u98ce\u683c,normal\uff08\u6b63\u5e38\uff09\u6216italic\uff08\u659c\u4f53\uff09\r\n    stroke: \"#c3bfbf\", \/\/\u63cf\u8fb9\u7684\u989c\u8272\r\n    strokeWidth: 1, \/\/\u63cf\u8fb9\u7684\u5bbd\u5ea6\r\n    textAlign: \"center\", \/\/\u6587\u672c\u5bf9\u9f50\u65b9\u5f0f\r\n    lineHeight: 1.5, \/\/\u884c\u9ad8\r\n    textBackgroundColor: \"#91A8D0\", \/\/\u6587\u672c\u80cc\u666f\u989c\u8272\r\n  }\r\n);\r\ncanvas.add(text);<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:720px\"><div style=\"padding-top:62.916666666667%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"720\" height=\"453\" class=\"alignnone size-full wp-image-8657 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can12.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can12.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can12.jpg 720w, https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can12-300x189.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u4e8b\u4ef6<\/strong><\/h3>\n<p data-tool=\"mdnice\u7f16\u8f91\u5668\">fabric \u4e2d\u901a\u8fc7 on \u65b9\u6cd5\u6765\u521d\u59cb\u5316\u4e8b\u4ef6\uff0coff \u65b9\u6cd5\u7528\u6765\u5220\u9664\u4e8b\u4ef6\u3002<\/p>\n<p data-tool=\"mdnice\u7f16\u8f91\u5668\">\u5e38\u7528\u7684\u4e8b\u4ef6\u6709\u4ee5\u4e0b<\/p>\n<ul class=\"list-paddingleft-2\" data-tool=\"mdnice\u7f16\u8f91\u5668\">\n<li>\n<section>\u201cmouse:down\u201d \u9f20\u6807\u88ab\u6309\u4e0b<\/section>\n<\/li>\n<li>\n<section>\u201cobject:add\u201d \u5bf9\u8c61\u88ab\u6dfb\u52a0<\/section>\n<\/li>\n<li>\n<section>\u201cafter:render\u201d \u6e32\u67d3\u5b8c\u6210<\/section>\n<\/li>\n<\/ul>\n<pre>\u8fd8\u6709\u4e00\u5927\u5806:\r\n\u9f20\u6807\u4e8b\u4ef6:\u201cmouse:down\u201d ,\u201cmouse:move\u201d\u548c\u201cmouse:up...\u201d \u9009\u62e9\u76f8\u5173\u7684\u4e8b\u4ef6\uff1a\u201cbefore:selection:cleared\u201d, \u201cselection:created\u201d, \u8be6\u7ec6\u7684\u53ef\u4ee5\u67e5\u770b\u00a0<strong>\u5b98\u65b9\u6587\u6863<\/strong><\/pre>\n<pre>canvas.on(\"mouse:down\", function(options) {\r\n  canvas.clear();\r\n  let text = new fabric.Text(\"\u4f60\u70b9\u6211\u5566~\", {\r\n    left: 200,\r\n    top: 200,\r\n  });\r\n  canvas.add(text);\r\n  console.log(options.e.clientX, options.e.clientY);\r\n});\r\ncanvas.on(\"mouse:up\", function(options) {\r\n  this.text = \"\u4f60\u6ca1\u70b9\u62110.0\";\r\n  canvas.clear();\r\n  let text = new fabric.Text(\"\u4f60\u6ca1\u70b9\u62110.0\", {\r\n    left: 200,\r\n    top: 200,\r\n  });\r\n  canvas.add(text);\r\n  console.log(options.e.clientX, options.e.clientY);\r\n});<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8658 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can13.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can13.gif\"><\/figure>\n<p>Fabric \u5141\u8bb8\u5c06\u4fa6\u542c\u5668\u76f4\u63a5\u9644\u52a0\u5230 canvas \u753b\u5e03\u4e2d\u7684\u5bf9\u8c61\u4e0a\u3002<\/p>\n<pre>let rect = new fabric.Rect({ width: 100, height: 50, fill: \"green\" });\r\nrect.on(\"selected\", function() {\r\n  console.log(\"\u54e6\u543c~\u4f60\u9009\u62e9\u4e86\u6211\");\r\n});\r\n\r\nlet circle = new fabric.Circle({ radius: 75, fill: \"blue\" });\r\ncircle.on(\"selected\", function() {\r\n  console.log(\"\u54c8\u54c8\u54c8~\u4f60\u9009\u62e9\u4e86\u6211\");\r\n});<\/pre>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u81ea\u7531\u7ed8\u753b<\/strong><\/h3>\n<p>Fabric canvas \u7684 isDrawingMode \u5c5e\u6027\u8bbe\u7f6e\u4e3a true \u5373\u53ef\u5b9e\u73b0\u81ea\u7531\u7ed8\u5236\u6a21\u5f0f.<br \/>\n\u8fd9\u6837\u753b\u5e03\u4e0a\u7684\u70b9\u51fb\u548c\u79fb\u52a8\u5c31\u4f1a\u88ab\u7acb\u523b\u89e3\u91ca\u4e3a\u94c5\u7b14\u6216\u5237\u5b50\u3002<\/p>\n<pre>let canvas = new fabric.Canvas(\"canvas\");\r\ncanvas.isDrawingMode = true;\r\ncanvas.freeDrawingBrush.color = \"blue\";\r\ncanvas.freeDrawingBrush.width = 5;<\/pre>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:805px\"><div style=\"padding-top:62.981366459627%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"805\" height=\"507\" class=\"alignnone size-full wp-image-8659 lazyload\" title=\"canvas\u63d2\u4ef6fabric.js\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can15.gif\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2021\/11\/can15.gif\"><\/figure>\n<p>&nbsp;<\/p>\n<h3 data-tool=\"mdnice\u7f16\u8f91\u5668\"><strong>\u6700\u540e<\/strong><\/h3>\n<p>\u5f88\u5f00\u5fc3\u5199\u4e0b\u8fd9\u7bc7\u6587\u7ae0,\u5b83\u662f\u6211\u7528\u6765\u603b\u7ed3\u5f52\u7eb3 fabric \u7684\u77e5\u8bc6\u70b9\u5e76\u4e14\u975e\u5e38\u7528\u5fc3\u7684\u4e00\u7bc7\u6587\u7ae0,\u5e0c\u671b\u8fd9\u7bc7\u6587\u7ae0\u5bf9\u4f60\u6709\u6240\u5e2e\u52a9,\u76ee\u524d fabric \u5728\u56fd\u5185\u8fd8\u4e0d\u662f\u5f88\u706b,\u4f46\u662f github \u4e0a\u5df2\u7ecf\u6709 19.2k \u7684 star \u4e86,\u4e5f\u7b97\u662f\u4e00\u4e2a\u660e\u661f\u9879\u76ee\u3002<\/p>\n<p>\u6211\u4eec\u65e5\u5e38\u5f00\u53d1\u7ecf\u5e38\u4f1a\u7528\u5230 canvas\uff0c\u4f46\u662f\u5b83\u7684 api \u5bf9\u4e8e\u5904\u7406\u590d\u6742\u7684\u4e1a\u52a1\u903b\u8f91\u4f1a\u4ee4\u4eba\u611f\u5230\u975e\u5e38\u7684\u52b3\u7d2f\uff0c\u6240\u4ee5\u6211\u5206\u4eab\u8fd9\u7bc7\u6587\u7ae0\uff0c\u5e0c\u671b\u5bf9\u5927\u5bb6\u6709\u6240\u5e2e\u52a9\u3002<\/p>\n<p><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/404933623\" target=\"_blank\" rel=\"noopener\">https:\/\/zhuanlan.zhihu.com\/p\/404933623<\/a><\/p>\n<p><a href=\"https:\/\/mp.weixin.qq.com\/s\/CpvgQ_pMs4Rdo04BzvDM0g\" target=\"_blank\" rel=\"noopener\">https:\/\/mp.weixin.qq.com\/s\/CpvgQ_pMs4Rdo04BzvDM0g<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fabric.js \u662f\u4e00\u4e2a\u5f3a\u5927\u800c\u7b80\u5355\u7684 Javascript HTML5 \u753b\u5e03\u5e93 Fabric \u5728\u753b\u5e03\u5143\u7d20\u4e4b\u4e0a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-8641","post","type-post","status-publish","format-standard","hentry","category-11"],"_links":{"self":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts\/8641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8641"}],"version-history":[{"count":0,"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts\/8641\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}