「LibCanvas」-Javascript Canvasを使用するためのフレームワーク

こんにちは、Habr! 私の作品をフォローしている人々は、私がJavaScriptでCanvasにペイントすることに非常に興味を持っていることに気付いたと思います。 おそらくこれは少し冗長ですが、私は自分自身を助けることはできません、私は本当にこの技術が好きです。 私はそれがとても気に入っているので、それについての報告書で会議で話すつもりです(Pavel Ponomarenko)。



しかし、今は重要ではありません。フレームワークを提示したいのです。生まれたばかりでまだ機能を習得していないにもかかわらず、すでに完全で面白く、そして最も重要な、便利に見えるフレームワークです。







ツールキット



私はJQueryを非常に気に入っており、DOMを操作するための理想的なフレームワークであると考えています。このフレームワークでJQueryを放棄したので、もう一度これを確信しました。 しかし、DOM、IMHO以外では、jQueryはかさばりすぎており、その哲学はうっとうしいものです。 したがって、最初は独自のフレームワークを作成することにしました。 埋め込みオブジェクトのプロトタイプを展開し、DOMを操作するための基本的な関数を作成します。 JavaScriptを継承する興味深いソリューションを探しているGoogleの特定の時点で、1つの真実に気付きました。私はMooToolsを書いています。 したがって、私は決定を下し、このフレームワークは作業に十分な程度に数時間で研究され、ほぼ完成したプロジェクト全体を新しいフレームワークに書き直しました(同時にリファクタリングしました)が、私は後悔していませんjQueryよりも優れています)。 MooToolsにはまだ十分なものがなかったため、プロトタイプにいくつかのメソッドを追加して組み込みオブジェクトを拡張する必要がありました)



フレームワーク自体



すべてのフレームワーククラスはLibCanvasにあります。 私は気づく可能性のある欠点を修正し、できるだけエレガントにしようとしました。 説明はやや乱雑に見えるかもしれません(プログラミングの夜と、現在は午前7時であるという事実により、最終的には実例が明確になります)



シェル



ImagePreloader、 ProgressBar 、fps-meter、その他のつまらないものがすでに組み込まれているユニバーサルシェルを介してキャンバスを操作することをお勧めします。

new LibCanvas . Canvas2D ($( 'canvas' ))

.
setFps ( 50 ) // ,

. fpsMeter ( 20 ) // . N , fps

. setConfig ({

background : '#EFEBE7' , //

images : App . imagesList , // -

progressBar : App . progressBarStyle // -

})

.
addElement (new App . MyFirstElement ()) //

. addElement (new App . SecondElement ()) // .draw()

. start (); // -,








コンテキストの変更



埋め込みコンテキストでは常に2つのことが好きではありませんでした。関数がこれの代わりにundefinedを返すため、呼び出しのチェーンを作成できず、場合によっては非常に多くの同じ引数を持つ関数を作成できません。
ctx . drawImage ( image , 15 , 16 , 12 , 34 , 56 , 12 , 32 , 45 );







返されたthis、名前付きパラメーター、およびその他のいくつかの利点を使用して、bleでコンテキストを作成しました。 使用は推奨されていませんが、通常のコンテキストと下位互換性があることに注意してください。 取得は非常に簡単です。

$( 'canvas' ). getContext ( '2d-libcanvas' )







独自のコンテキストを作成するのが非常に簡単になったことに注意してください(必要な場合)。たとえば、. ./js/Libs/LibCanvas/Core/Context2D.js



/ ./js/Libs/LibCanvas/Core/Context2D.js



/ ./js/Libs/LibCanvas/Core/Context2D.js



/ ./js/Libs/LibCanvas/Core/Context2D.js



/ ./js/Libs/LibCanvas/Core/Context2D.js



参照してください。

LibCanvas . addCanvasContext ( '2d-libcanvas' , LibCanvas . Context2D );







組み込みコンテキストの1つを再定義した場合、いつでも元のコンテキストを呼び出すことができます。

$( 'canvas' ). getOriginalContext ( '2d' );







ただし、コンテキストにいくつかの変更が加えられ、より便利になりました。 たとえば、今では絵を描くときに、どのパラメーターが何を意味するかを推測する必要はありません(from-to、from-size、to-sizeの任意のペアを使用できます)。

ctx . drawImage ({

image : images [ 'ufo' ],

crop : {

from : [ 40 , 80 ],

to : [ 120 , 160 ]

},

draw : {

from : [ 80 , 80 ]

size : [ 160 , 160 ]

}

})








そして、さらにいくつかの化粧品の変更:

ctx . fillAll ( 'green' ) //

. set ( 'strokeStyle' , 'red' )

.
stroke (new CanvasLib . Shapes . Polygon ([

[
231 , 67 ],

[
281 , 67 ],

[
317 , 103 ],

[
317 , 153 ],

[
281 , 189 ],

[
231 , 189 ],

[
195 , 153 ],

[
195 , 103 ]

]))
//

. arc ({

circle : [ 100 , 60 , 40 ], // 100:60, 40

angle : [( 5 ). degree (), ( 35 ). degree ()] // c 5 35

})






Number . degree ()



注意してくださいNumber . degree ()



Number . degree ()



は、Numberにあった正味の度数を返しますが、技術者が好むラジアン単位です。



フィギュア



CanvasLib . Shapes .*



基づきCanvasLib . Shapes .*



CanvasLib . Shapes .*



フレームワークの機能のほぼ半分を構築します。 現時点では、ポリゴン、円、長方形の3つの数字しかありませんが、時間が経つにつれて、たとえばRoundedRectangleが追加されます。 当然、独自の形状を作成できます。 ただし、この場合に重要なのは、特定のポイントがこの数値内にあるかどうかを判断するための正しいアルゴリズムの実装です。 CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );

event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








検索しCanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );

event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );

event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );

event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );

event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); // , bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas








CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas




CanvasLib . Shapes .* 26 .





. - , html. , , mouseover , html-. . :

this . canvas . mouse . subscribe ( this );






event c . : [click, mouseover, mousemove, mouseout, mouseup, mousedown], [away:mouseover, away:mousemove, away:mouseout, away:mouseup, away:mousedown] , . , , ( getShape



) hasDot



. , , Circle "" .

, LibCanvas . InterfaceElement



, , , :

elem . drawStandart (); //

elem . drawHover (); //

elem . drawActive (); //




, bind' unbind' ( ), GUI.





, - ./js/App/* ./js/Start.js. - . , , !

- EventsTester. . - . , , .

- LibCanvas . InterfaceElement



, . elem . bind ( 'click' , fn );





, . , , , JQueryUI. - )





1. ( , setTransform). ,

2.

3. . , -





greedykid , nutochka , (, , Miss IT ) . .







- LGPL, , : code.google.com/p/libcanvas







All Articles