рдХреИрдирд╡рд╕ рд╡реЗрдмрд╕реНрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреНрд░рд╛рдЗрдВрдЧ, рдпрд╛ рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдиреЗ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд╢рд┐рд╡рд┐рд░ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛

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

рдЪреИрдЯ ++

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

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

рд╡реЗрдм рд╕реЙрдХреЗрдЯ


рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдХрд╛рдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд░рдХреНрдд рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛, рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдЪреИрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде
html5labs.com рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЗрд╢реА рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдордмреИрдХ рдХреЗ рд╕рд╛рде рдЕрдиреНрдпрдерд╛ред

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

рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг:

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрдХреНрд╕реНрдЯ рдЪреИрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
<form id="myform"> <input type="text" id="chat" placeholder="type and press enter to chat" /> </form> <ul id="log"></ul> 


рдлрд╝реЙрд░реНрдо рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрджреЗрд╢ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕реЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬ рджреЗрдЧреА:

 $("#myform").submit(function (event) { event.preventDefault(); // if we're connected // conn -- opened websocket connection if (conn.readyState === 1) { conn.send(JSON.stringify({ sender:sender, // sender ID type:'chat', chat:$('#chat').val() })); log.html('<li class="you">' + $('#chat').val().replace(/[<>&]/g, function (m) { return entities[m]; }) + '</li>' + log[0].innerHTML); $('#chat').value = ''; } }); 


рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЪреИрдЯ рд▓реЙрдЧ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдЬреМрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВред (рдбрд░рд╛рд╡рдирд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ "&", "<" рдФрд░ ">" рд╕реЗ рдмрдЪ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИред рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  if (conn.readyState === undefined || conn.readyState > 1) { // ws -- WebSocket or MozWebSocket conn = new ws('ws://yousite.com:port/chat'); ... } 

рдЖрдЧреЗ (рдЕрдВрджрд░) рдПрдХ рдЦреБрд▓реЗ рд╕реЙрдХреЗрдЯ рд╕реЗ рдХрдИ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдВрджреЗрд╢ рдЦреЛрд▓рдиреЗ, рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░, рдЕрдзрд┐рдорд╛рдирддрдГ, рдПрдХ рддреНрд░реБрдЯрд┐):
 conn.onopen = function () { state.toggleClass('success'); state.text('Socket open'); }; conn.onmessage = function (event) { var message = JSON.parse(event.data); if (message.type == 'chat') { // filter own messages if (message.sender != sender) { log.html('<li class="them">' + message.chat.replace(/[<>&]/g, function (m) { return entities[m]; }) + '</li>' + log[0].innerHTML); } } else { $('#connected').text(message); } }; conn.onclose = function (event) { state.toggleClass('fail'); state.text('Socket closed'); }; 

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

рдкрд╛рда рдЪреИрдЯ

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

рдбреНрд░рд╛рдЗрдВрдЧ


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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдХрд▓рд╛ рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдЕрднреА рднреА рдорд╛рдЙрд╕ рдореЗрдВ рдХреЙрдиреНрдЯреИрдХреНрд╕реНрдЯ / рдСрдлрд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдорд╛рдЙрд╕ рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдКрдкрд░ рдХрд░реНрд╕рд░ рд╕реНрдерд┐рдд рд╣реИред рдореЗрд░рд╛ рд▓реЗрдЦ " T & Pред рдХреИрдирд╡рд╛рд╕ рдФрд░ рдСрдлрд╕реЗрдЯ " рднреА рджреЗрдЦреЗрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рд╕реВрд░рдЬ рдФрд░ рдкреЗрдбрд╝
(рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп)

рдФрд░ рддреАрд╕рд░рд╛, рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЧреЗрдо рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдЬрдм рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рдХреМрди рд╕реЗ рдХреИрдирд╡рд╛рд╕ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

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

 // canvas - "canvas" object // canvas.source - jquery object for canvas // canvas.context - canvas.source[0].getContext("2d") canvas.source.bind("mousemove", function(e) { if (canvas.isPainting) { var line = {x1:canvas.lastPoint.x, y1:canvas.lastPoint.y, x2: e.offsetX, y2: e.offsetY}; drawLine(canvas.part, line); if (conn.readyState === 1) { conn.send(JSON.stringify({ sender:sender, type:"canvas", part:canvas.part, line:line })); } canvas.lastPoint = {x: e.offsetX, y: e.offsetY}; } }); 

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдпрд╣ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдВрджреЗрд╢ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
 conn.onmessage = function (event) { var message = JSON.parse(event.data); if (message.type == 'chat') { ... } else if (message.type == 'canvas') { if (message.sender != sender) { drawLine(message.part, message.line); } } else { ... } }; 

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

 // c1 and c2 - global vars function drawLine(part, line) { var ctx = (part == 1) ? c1.context : c2.context; ctx.beginPath(); ctx.moveTo(line.x1, line.y1); ctx.lineTo(line.x2, line.y2); ctx.closePath(); ctx.stroke(); }; 


рдереЛрдбрд╝рд╛ рдФрд░ рдЪрдордХ рдмреЙрдХреНрд╕-рдЫрд╛рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рддреЗ рд╕рдордп рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЕрдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдХреНрдпрд╛ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ:

рдЫрд┐рдкрд╛рдирд╛ рдХреИрдирд╡рд╛рд╕

рдПрдХ рд╕рдорд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг Ya.Diska рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles