рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ # 17 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░реЛрдЪрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдмрд╛рддреЗрдВ

рд╢реБрдн рджрд┐рди, рдкреНрд░рд┐рдп Kravravchiansред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг / рдкреБрд╕реНрддрдХрд╛рд▓рдп / рдХрд╛рд░реНрдпрдХреНрд░рдо рджреЗрдЦреЗ рдЬреЛ рдореИрдВ рд╣реНрд░рдм рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



Intercooler.js



рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдлреБрд▓рдЕрдЬреИрдХреНрд╕ рдпрд╛рдж рд╣реИ - рд░реБрд╕реНрд▓рд╛рди рд╕рд┐рдирд┐рддреНрд╕рдХреА рд╡рд╛рдпрд░рд╕ ( рдЬреЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдерд╛рдкрдХ) рдХрд╛ рд╡рд┐рдХрд╛рд╕? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рддрддреНрд╡реЛрдВ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдХреЗ AJAX рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрджреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ "AJAX рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд▓рд┐рдВрдХ - рд╣рдорд╛рд░реА рдлреБрд▓рдЬреИрдХреНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд┐рдВрдХ рддрдХрдиреАрдХ" , "рдкреВрд░реНрдг AJAXред рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЙрджрд╛рд╣рд░рдгред рдЪрд┐рдкреНрд╕ рдФрд░ рдлреАрдЪрд░реНрд╕ тАЭ рдФрд░ тАЬ рдлреНрд▓рд╛рдИ рдЕрдЬрд╛рдХреНрд╕ - рдХрдо рд▓рд┐рдЦреЛ, рдЕрдзрд┐рдХ рд╣реИред рдХрд╕реНрдЯрдо AJAX рдФрд░ рдЦреЛрдЬ рдЗрдВрдЬрди рдЕрдиреБрдХреНрд░рдордг Intercooler рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╣реИ:



<div id="targetDiv">Results Div...</div> <i id="indicator" style="display:none" class="fa fa-spinner fa-spin"> <input id="hiddenInput" type="hidden" name="hidden" value="42"/> <div ic-trigger-on="click" ic-verb="POST" ic-src="/example" ic-include="#hiddenInput" ic-indicator="#indicator" ic-target="#targetDiv" ic-transition="none"> Click Me! </div>
      
      





Div рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, #hiddenInput рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ #indicator рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ #targetDiv рдмреНрд▓реЙрдХ рдХреЛ рджреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ?





Flow.js



рд▓рд╛рдпрдмреНрд░реЗрд░реА рдЕрдзрд┐рдХрддрдо HTML5 рдлрд╝рд╛рдЗрд▓ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдПрдХрд╛рдзрд┐рдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕, рд╕реНрдерд┐рд░, рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБ, рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп / рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдорд╣рд╛рди рдЯреВрд▓рдХрд┐рдЯред



 var flow = new Flow({ target:'/api/photo/redeem-upload-token', query:{upload_token:'my_token'} }); // Flow.js isn't supported, fall back on a different method if(!flow.support) location.href = '/some-old-crappy-uploader'; flow.assignBrowse(document.getElementById('browseButton')); flow.assignDrop(document.getElementById('dropTarget')); r.on('fileAdded', function(file, event){ ... }); r.on('fileSuccess', function(file,message){ ... }); r.on('fileError', function(file, message){ ... });
      
      







рдкрд╛рд░реНрд╕рдбрд╛рдЙрди - PHP рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдкрд╛рд░реНрд╕рд░







рдПрдлрдмреА рдлреНрд▓реЛ



рдлреЗрд╕рдмреБрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд▓рд╛рдЗрд╡ рд░реАрд▓реЛрдб рд╕рдорд╛рдзрд╛рдиред рджреЛ рднрд╛рдЧреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ: npm рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдРрдб-рдСрди ред рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдореНрдореЗрдЯ рд▓рд┐рд╡рд╕реНрдЯреИрдб рдпрд╛ рд▓рд╛рдЗрд╡ рд░реАрд▓реЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореБрдЦреНрдп рд▓рд╛рдн Node.js рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдХрд┐рд╕реА рднреА рд╕рдВрдкрд╛рджрдХ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд░рд▓ рдПрдХреАрдХрд░рдг рд╣реИрдВред





JsAction



Google рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред JsAction рдЖрдкрдХреЛ рдИрд╡реЗрдВрдЯ рдиреЛрдбрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ DOM рдиреЛрдбреНрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд╣рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ "JsAction рдПрдХ рдЫреЛрдЯреА рдШрдЯрдирд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ DOM рдиреЛрдбреНрд╕ рдХреЛ рдбреАрдХреЛрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИред" рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред jsaction рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:



 <div id="foo" jsaction="leftNav.clickAction;dblclick:leftNav.doubleClickAction"> some content here </div>
      
      







 var eventContract = new jsaction.EventContract; // Register the event types we care about. eventContract.addEvent('click'); eventContract.addEvent('dblclick'); var dispatcher = new jsaction.Dispatcher; eventContract.dispatchTo(goog.bind(dispatcher.dispatch, dispatcher)); //Register individual handlers myapp.LeftNav.prototype.doStuff = function(flow) { // do stuff }; myapp.LeftNav.prototype.registerHandlers = function() { dispatcher.registerHandlers( 'leftNav', // the namespace this, // handler object { // action map 'clickAction' : this.doStuff, 'doubleClickAction' : this.doStuff }); };
      
      







AniJS



рд╕реАрдПрд╕рдПрд╕ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпред рдпрд╣ рдЖрдкрдХреЛ рд▓реИрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

 <div class="demo-square demo1" data-anijs="if: click, do: flipInY, to: .container-box"></div>
      
      





рдпрджрд┐ рдХрд┐рд╕реА рдШрдЯрдирд╛ (рдХреНрд▓рд┐рдХ, рд╕реНрдХреНрд░реЙрд▓, рдорд╛рдЙрд╕рдУрд╡рд░), рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдкрд░ (рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛), рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ (рдШреБрдорд╛рдПрдБ рдПрдиреАрдореЗрд╢рди), рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдХрд┐рд╕реА рднреА рддрддреНрд╡)ред


рд╕рднреА рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдирд╛рдУрдВ рдФрд░ рдПрдирд┐рдореЗрд╢рди рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ



Ampache





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



рдЧреНрд░рдВрдЯ рдИрдореЗрд▓ рдбрд┐рдЬрд╛рдЗрди



рдЫрд╡рд┐

рдирд╛рдо рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛: SCSS рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реАрдбреАрдПрди (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрддреНрд░ рднреЗрдЬрддрд╛ рд╣реИред



рдореИрдВ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди emuravjev habrayuzer рд╕реЗ рд╕рдорд╛рдЪрд╛рд░ : "Muravyov рдХреА рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдл GitHub рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдИ рд╣реИ ", рдлрд┐рдиреЛрдо рд╕реЗ рдЕрджреНрднреБрдд Matryoshka.js рдФрд░ mdevils рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХрдВрдкрд╛рдЗрд▓рд░ JSCS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ , рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реБрдВрджрд░ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред



рдкрд╢реНрдЪрд┐рдореА рд╡рд┐рдЪрд╛рд░ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ Habr├й рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛:







рдЕрдВрдд рдореЗрдВ:







рдкрд┐рдЫрд▓рд╛ рд╕рдВрдЧреНрд░рд╣ (рдЕрдВрдХ 16)



рдореИрдВ рдХрд┐рд╕реА рднреА рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдВ рд▓рд┐рдЦреЗрдВред



рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред




All Articles