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

рддреИрдпрд╛рд░ рдЖрд╡реЗрджрди рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
bolaslenses.catuhe.comрд╕реВрддреНрд░ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
www.catuhe.com/msdn/bolaslenses.zipрдореИрдкреНрд╕
рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдЬрд╝реНрдпреЛрд░ рдХрдВрдЯреЗрдВрдЯ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдиреЗрдЯрд╡рд░реНрдХ (
рд╕реАрдбреАрдПрди : рдПрдХ рд╕рд░реНрд╡рд┐рд╕ рдЬреЛ рдПрдВрдб рдпреВрдЬрд░реНрд╕ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред ASP.NET рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА (
JSON рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдкрдХрд░рдг
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рд╡реЗрдм рдорд╛рдирдХ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди HTML5 рдкреЗрдЬ рдХреЗ рд▓рд┐рдП IntelliSense рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ)ред
рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ HTML5 рдкреЗрдЬ рд╣реЛрдЧрд╛ред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдкрдХреЛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЕрдкрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧрдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ IntelliSense рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ HTML5 рдкреЗрдЬ рд▓рд┐рдЦреЗрдВрдЧреЗред

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

рд╢реИрд▓рд┐рдпрд╛рдБ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореИрдкрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдм рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд▓рд┐рдП рдореИрдк рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
рд╕рд░реНрд╡рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдкрд░ JSON рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
bolaslenses.catuhe.com/Home/ListOfCards/?colorString=0рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ (0 = рд╕рднреА) рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ (colorString) рд▓реЗрддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ (рдпрд╣ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ): рдЖрдкрдХреЛ рдЦреБрдж рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рдереЗ, рддреЛ рдХреНрдпрд╛ рдирд╣реАрдВ рдерд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрджрд╛ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рдУрдкрди рд╕реЛрд░реНрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ
jQuery рд╣реИ , рдЬреЛ рдХрд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рдмрд╣реБрддрд╛рдпрдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ URL рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдФрд░ рдирдХреНрд╢реЗ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
XmlHttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реМрдЯреЗ JSON рдХреЗ рдкрд╛рд░реНрд╕ рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╣рдо jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо getJSON рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ:
function getListOfCards() { var url = "http://bolaslenses.catuhe.com/Home/ListOfCards/?jsoncallback=?"; $.getJSON(url, { colorString: "0" }, function (data) { listOfCards = data; $("#cardsCount").text(listOfCards.length + " cards displayed"); $("#waitText").slideToggle("fast"); }); }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЪрд░ рд╕реВрдЪреА рдореЗрдВ рдирдХреНрд╢реЗ рдХреА рд╕реВрдЪреА рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред
- рдкрд╛рда - рдЯреИрдЧ рдХрд╛ рдкрд╛рда рдмрджрд▓рддрд╛ рд╣реИ
- рд╕реНрд▓рд╛рдЗрдбрдЯреЙрдЧрд▓ - рдЕрдкрдиреА рдКрдВрдЪрд╛рдИ рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рдХреЗ рдПрдХ рдЯреИрдЧ рдХреЛ рдЫреБрдкрд╛рддрд╛ / рджрд┐рдЦрд╛рддрд╛ рд╣реИ
рд╕реВрдЪреАрдСрдлрдХрд╛рд░реНрдбреНрд╕ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЖрдИрдбреА : рдХрд╛рд░реНрдб рдЖрдИрдбреА
- рдкрде : рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рдирдЪрд┐рддреНрд░ рдкрде (рдХреЛрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╣реАрдВ)
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ URL рдХреЛ "Jsoncallback =?" рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЬрд╛рдХреНрд╕ рдХреЙрд▓ рдХреЛ рдЙрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдерд╛рдХрдерд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐,
JSONP рдирд╛рдордХ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдпреБрдХреНрдд рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдФрд░ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, jQuery рд╕рдм рдХреБрдЫ рдЕрдХреЗрд▓реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рд╣реА рдкреНрд░рддреНрдпрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдб рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ, рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдк рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдХреИрд╢ рд╣реИрдВрдбрд▓рд┐рдВрдЧ
рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдбреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдореБрдЦреНрдп рдЪрд╛рд▓ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдВрдбреЛ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЬрд╝реВрдо рд╕реНрддрд░ рдФрд░ рдЗрдВрдбреЗрдВрдЯ (x, y) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
var visuControl = { zoom : 0.25, offsetX : 0, offsetY : 0 };

рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ
14,819 рдХрд╛рд░реНрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ
200 рд╕реЗ
рдЕрдзрд┐рдХ рдХреЙрд▓рдо рдФрд░
75 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдореЗрдВ рдпрд╣ рднреА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рддреАрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ:
- рдЙрдЪреНрдЪ рд╕рдВрдХрд▓реНрдк: 480x680 рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ (.jpg рдкреНрд░рддреНрдпрдп)
- рдордзреНрдпрдо рд╕рдВрдХрд▓реНрдк: рдорд╛рдирдХ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде 240x340 (.50.jpg рдкреНрд░рддреНрдпрдп)
- рдХрдо рд╕рдВрдХрд▓реНрдк: 120x170 рдордЬрдмреВрдд рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде (.25.jpg рдкреНрд░рддреНрдпрдп)
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд╝реВрдо рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдЫрд╡рд┐ рджреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рдиреАрдЪреЗ рджреА рдЧрдИ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдб рдЕрднреА рддрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
function imageCache(substr, replacementCache) { var extension = substr; var backImage = document.getElementById("backImage"); this.load = function (card) { var localCache = this; if (this[card.ID] != undefined) return; var img = new Image(); localCache[card.ID] = { image: img, isLoaded: false }; currentDownloads++; img.onload = function () { localCache[card.ID].isLoaded = true; currentDownloads--; }; img.onerror = function() { currentDownloads--; }; img.src = "http://az30809.vo.msecnd.net/" + card.Path + extension; }; this.getReplacementFromLowerCache = function (card) { if (replacementCache == undefined) return backImage; return replacementCache.getImageForCard(card); }; this.getImageForCard = function(card) { var img; if (this[card.ID] == undefined) { this.load(card); img = this.getReplacementFromLowerCache(card); } else { if (this[card.ID].isLoaded) img = this[card.ID].image; else img = this.getReplacementFromLowerCache(card); } return img; }; }
ImageCache рдкреНрд░рддреНрдпрдп рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдХреИрд╢ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ 2 рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
- рд▓реЛрдб : рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдВрдЫрд┐рдд рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдмрдЪрд╛рдПрдЧрд╛ ( msecnd.net url Azure CDN рдореЗрдВ рдореИрдк рдХрд╛ рдкрддрд╛ рд╣реИ)
- getImageForCard : рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╢ рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдирдП рдкрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ
3 рдХреИрд╢ рд╕реНрддрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 3 рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
var imagesCache25 = new imageCache(".25.jpg"); var imagesCache50 = new imageCache(".50.jpg", imagesCache25); var imagesCacheFull = new imageCache(".jpg", imagesCache50);
рд╕рд╣реА рдХреИрд╢ рдЪреБрдирдирд╛ рдЬрд╝реВрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
function getCorrectImageCache() { if (visuControl.zoom <= 0.25) return imagesCache25; if (visuControl.zoom <= 0.8) return imagesCache50; return imagesCacheFull; }
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЯрд╛рдЗрдорд░ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдЯреВрд▓рдЯрд┐рдк рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
function updateStats() { var stats = $("#stats"); stats.html(currentDownloads + " card(s) currently downloaded."); if (currentDownloads == 0 && statsVisible) { statsVisible = false; stats.slideToggle("fast"); } else if (currentDownloads > 1 && !statsVisible) { statsVisible = true; stats.slideToggle("fast"); } } setInterval(updateStats, 200);
рдиреЛрдЯ: рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдЕрдм рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдирдХреНрд╢рд╛ рдкреНрд░рджрд░реНрд╢рди
рд╣рдорд╛рд░реЗ рдирдХреНрд╢реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдХреЗ 2D рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЛ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рдореМрдЬреВрдж рд╣реИ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ HTML5 рдХреИрдирд╡рд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ):
var mainCanvas = document.getElementById("mainCanvas"); var drawingContext = mainCanvas.getContext('2d');
рдбреНрд░рд╛рдЗрдВрдЧ
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
ListOfCards рд╕рдорд╛рд░реЛрд╣ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60 рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ):
function processListOfCards() { if (listOfCards == undefined) { drawWaitMessage(); return; } mainCanvas.width = document.getElementById("center").clientWidth; mainCanvas.height = document.getElementById("center").clientHeight; totalCards = listOfCards.length; var localCardWidth = cardWidth * visuControl.zoom; var localCardHeight = cardHeight * visuControl.zoom; var effectiveTotalCardsInWidth = colsCount * localCardWidth; var rowsCount = Math.ceil(totalCards / colsCount); var effectiveTotalCardsInHeight = rowsCount * localCardHeight; initialX = (mainCanvas.width - effectiveTotalCardsInWidth) / 2.0 - localCardWidth / 2.0; initialY = (mainCanvas.height - effectiveTotalCardsInHeight) / 2.0 - localCardHeight / 2.0;
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрдИ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдИ рдЧрдИ рд╣реИ:
- рдпрджрд┐ рдирдХреНрд╢реЗ рдХреА рд╕реВрдЪреА рдЕрднреА рддрдХ рд▓реЛрдб рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдбрд┐рдВрдЧ рдЕрднреА рднреА рдЬрд╛рд░реА рд╣реИ:
var pointCount = 0; function drawWaitMessage() { pointCount++; if (pointCount > 200) pointCount = 0; var points = ""; for (var index = 0; index < pointCount / 10; index++) points += "."; $("#waitText").html("Loading...Please wait<br>" + points); }
- рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡рд┐рдВрдбреЛ (рдирдХреНрд╢реЗ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ:
function clearCanvas() { mainCanvas.width = document.body.clientWidth - 50; mainCanvas.height = document.body.clientHeight - 140; drawingContext.fillStyle = "rgb(0, 0, 0)"; drawingContext.fillRect(0, 0, mainCanvas.width, mainCanvas.height); }
- рдлрд┐рд░ рд╣рдо рдирдХреНрд╢реЗ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреНрд░рд╛рдЗрдореЗрдЬ рд╕рдВрджрд░реНрдн рдХреЗ рдХреИрдирд╡рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫрд╡рд┐ рд╕рдХреНрд░рд┐рдп рдХреИрд╢ (рдЬрд╝реВрдо рдирд┐рд░реНрднрд░) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ:
- рд╣рдореЗрдВ RoundedRectangle рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рджреНрд╡рд┐рдШрд╛рдд рдШрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
function roundedRectangle(x, y, width, height, radius) { drawingContext.beginPath(); drawingContext.moveTo(x + radius, y); drawingContext.lineTo(x + width - radius, y); drawingContext.quadraticCurveTo(x + width, y, x + width, y + radius); drawingContext.lineTo(x + width, y + height - radius); drawingContext.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); drawingContext.lineTo(x + radius, y + height); drawingContext.quadraticCurveTo(x, y + height, x, y + height - radius); drawingContext.lineTo(x, y + radius); drawingContext.quadraticCurveTo(x, y, x + radius, y); drawingContext.closePath(); drawingContext.stroke(); drawingContext.fill(); } function drawScrollBars(effectiveTotalCardsInWidth, effectiveTotalCardsInHeight, initialOffsetX, initialOffsetY) { drawingContext.fillStyle = "rgba(255, 255, 255, 0.6)"; drawingContext.lineWidth = 2;
- рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдлреНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
function computeFPS() { if (previous.length > 60) { previous.splice(0, 1); } var start = (new Date).getTime(); previous.push(start); var sum = 0; for (var id = 0; id < previous.length - 1; id++) { sum += previous[id + 1] - previous[id]; } var diff = 1000.0 / (sum / previous.length); $("#cardsCount").text(diff.toFixed() + " fps. " + listOfCards.length + " cards displayed"); }
рдбреНрд░рд╛рдЗрдВрдЧ рдореИрдк рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдиреНрдпреВрдирддрдо рдЬрд╝реВрдо рд╕реНрддрд░ (0.05) рдХреЗ рд╕рд╛рде рдореЗрд░реА рдорд╢реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд╣реИ:

рдмреНрд░рд╛рдЙрдЬрд╝рд░
| рдПрдлрдкреАрдПрд╕
|
рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ 9 | 30 |
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рел | 30 |
рдХреНрд░реЛрдо 12 | 17 |
iPad (рдЬрд╝реВрдо рд╕реНрддрд░ 0.8 рдкрд░) | 7 |
рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдореИрдВрдЧреЛ (рдЬрд╝реВрдо рд╕реНрддрд░ 0.8 рдкрд░) | 20 (!!) |
рдпрджрд┐ рд╡реЗ HTML5 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рд╛рдЗрдЯ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рдЖрдВрддрд░рд┐рдХ рд╢рдХреНрддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 30 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдирдХреНрд╢реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИред
рдорд╛рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдг
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдбреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдорд╛рдЙрд╕ (рдкрд╣рд┐рдпрд╛ рд╕рд╣рд┐рдд) рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдСрдирдорд╛рдЙрд╡рдореЛрд╡, рдСрдирдорд╛рдЙрд╕рдЕрдк рдФрд░ рдСрдирдореЛрд╕рдбрд╛рдЙрди рдЗрд╡реЗрдВрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдирдорд╛рдЙрд╕рдЕрдк рдФрд░ рдСрдирдореЛрд╕рдбрд╛рдЙрди рдИрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
var mouseDown = 0; document.body.onmousedown = function (e) { mouseDown = 1; getMousePosition(e); previousX = posx; previousY = posy; }; document.body.onmouseup = function () { mouseDown = 0; };
Onmousemove рдШрдЯрдирд╛ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var previousX = 0; var previousY = 0; var posx = 0; var posy = 0; function getMousePosition(eventArgs) { var e; if (!eventArgs) e = window.event; else { e = eventArgs; } if (e.offsetX || e.offsetY) { posx = e.offsetX; posy = e.offsetY; } else if (e.clientX || e.clientY) { posx = e.clientX; posy = e.clientY; } } function onMouseMove(e) { if (!mouseDown) return; getMousePosition(e); mouseMoveFunc(posx, posy, previousX, previousY); previousX = posx; previousY = posy; }
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди (onMouseMove) рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡рд┐рдВрдбреЛ рдХреА рд╢рд┐рдлреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
function Move(posx, posy, previousX, previousY) { currentAddX = (posx - previousX) / visuControl.zoom; currentAddY = (posy - previousY) / visuControl.zoom; } MouseHelper.registerMouseMove(mainCanvas, Move);
рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, jQuery рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
function wheel(event) { var delta = 0; if (event.wheelDelta) { delta = event.wheelDelta / 120; if (window.opera) delta = -delta; } else if (event.detail) { delta = -event.detail / 3; } if (delta) { wheelFunc(delta); } if (event.preventDefault) event.preventDefault(); event.returnValue = false; }
рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди:
MouseHelper.registerWheel = function (func) { wheelFunc = func; if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false); window.onmousewheel = document.onmousewheel = wheel; };
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЪрд┐рдХрдиреЗрдкрди рдХреА рдЕрдиреБрднреВрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдЙрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп (рдпрд╛ рдЬрд╝реВрдо рдХреЗ рджреМрд░рд╛рди) рдереЛрдбрд╝реА рд╕реА рдЬрдбрд╝рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред
рд░рд╛рдЬреНрдп рд╕рдВрд░рдХреНрд╖рдг
рд╕рд╛рде рд╣реА, рджреЗрдЦрдиреЗ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡рд┐рдВрдбреЛ рдФрд░ рдЬрд╝реВрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реЗ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ:
function saveConfig() { if (window.localStorage == undefined) return;
рдПрдиреАрдореЗрд╢рди
рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬрд╝реВрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ 3 рдорд╛рдиреЛрдВ рдХреЛ рдЪреЗрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рджреЛ рдЗрдВрдбреЗрдВрдЯ (рдСрдлрд╝рд╕реЗрдЯреНрд╕ (рдПрдХреНрд╕, рд╡рд╛рдИ)) рдФрд░ рдЬрд╝реВрдоред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рд╕реЗ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рддрдХ рдЪрд░ рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛:
var AnimationHelper = function (root, name) { var paramName = name; this.animate = function (current, to, duration) { var offset = (to - current); var ticks = Math.floor(duration / 16); var offsetPart = offset / ticks; var ticksCount = 0; var intervalID = setInterval(function () { current += offsetPart; root[paramName] = current; ticksCount++; if (ticksCount == ticks) { clearInterval(intervalID); root[paramName] = to; } }, 16); }; };
рд╕рдорд╛рд░реЛрд╣ рдЙрдкрдпреЛрдЧ:
рдПрдирд┐рдореЗрд╢рдирд╣реЗрд▓реНрдкрд░ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЬрд┐рддрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдЙрддрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреЗрдЬ рдХреЛ рдЯреИрдмрд▓реЗрдЯ, рдкреАрд╕реА рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлреЛрди рдкрд░ рднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо CSS 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдореАрдбрд┐рдпрд╛-рдХреНрд╡реЗрд░реАрдЬрд╝ рдЧреБрдг
ред рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдХреБрдЫ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░:
<link href="Content/full.css" rel="stylesheet" type="text/css" /> <link href="Content/mobile.css" rel="stylesheet" type="text/css" media="screen and (max-width: 480px)" /> <link href="Content/mobile.css" rel="stylesheet" type="text/css" media="screen and (max-device-width: 480px)" />
рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ
480 рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реИрд▓реА рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреА:
#legal { font-size: 8px; } #title { font-size: 30px !important; } #waitText { font-size: 12px; } #bolasLogo { width: 48px; height: 48px; } #pictureCell { width: 48px; }
рдпрд╣ рд╢реИрд▓реА рд╢реАрд░реНрд╖рдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░ рджреЗрдЧреА рдФрд░ рд╕рд╛рдЗрдЯ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛рдП рд░рдЦреЗрдЧреА рднрд▓реЗ рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЪреМрдбрд╝рд╛рдИ 480 рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдХрдо рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдлрд╝реЛрди рдкрд░):

рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдЪрдЯреАрдПрдордПрд▓ 5 / рд╕реАрдПрд╕рдПрд╕ 3 / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдЖрдкрдХреЛ рдХреБрдЫ рдмреЗрд╣рддрд░реАрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдЬреИрд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯреЗрдмрд▓ рдФрд░ рдХреБрд╢рд▓ рд╕рдорд╛рдзрд╛рди (рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рднреАрддрд░) рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
JQuery рдЬреИрд╕реЗ рдЪреМрдЦрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХреБрдЫ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ!