HTML5 рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб

рдЫрд╡рд┐
HTML5 рдХреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрди рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЕрднреА рддрдХ рд╡реНрдпрд╛рдкрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 4+, рдХреНрд░реЛрдо рдФрд░ рдУрдкреЗрд░рд╛ 11.10 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред


рдЕрдВрдХрди


рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдЕрдзрд┐рдХ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдорд╣рд╛рди рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ HTML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML5 Drag and Drop  </title> <link rel="stylesheet" href="/style.css"> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="/script.js"></script> </head> <body> <form action="/upload.php"> <div id="dropZone">  ,   . </div> </form> </body> </html> 


рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рд░рд╛ рдХрд╛рдо рдбреНрд░рд╛рдкрдЬреЛрди рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ (style.css):

 body { font: 12px Arial, sans-serif; } #dropZone { color: #555; font-size: 18px; text-align: center; width: 400px; padding: 50px 0; margin: 50px auto; background: #eee; border: 1px solid #ccc; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } #dropZone.hover { background: #ddd; border-color: #aaa; } #dropZone.error { background: #faa; border-color: #f00; } #dropZone.drop { background: #afa; border-color: #0f0; } 


рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдбреНрд░реЙрдкрдЬрд╝реЛрди рддрддреНрд╡ рдХреЗ рддреАрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╣реЛрд╡рд░ рдкрд░, рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


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

 $(document).ready(function() { var dropZone = $('#dropZone'), maxFileSize = 1000000; //    - 1 . }); 


рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд╛рдЗрд▓рд░рд╛рдЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдбреНрд░реЙрдкрдЬрд╝реЛрди рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рд╣рдо "рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ!" рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ "рддреНрд░реБрдЯрд┐" рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗред

 if (typeof(window.FileReader) == 'undefined') { dropZone.text('  !'); dropZone.addClass('error'); } 


рдЕрдЧрд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ рдбреНрд░реЙрдкрдЬреЛрди рдкрд░ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрдХ рдПрдиреАрдореЗрд╢рдиред рд╣рдо ondragover рдФрд░ ondragleave рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ jQuery рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ "рдбреНрд░реЙрдкрдЬрд╝реЛрди", рдмрд▓реНрдХрд┐ "рдбреНрд░реЙрдкрдЬрд╝реЛрди [0]" рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 dropZone[0].ondragover = function() { dropZone.addClass('hover'); return false; }; dropZone[0].ondragleave = function() { dropZone.removeClass('hover'); return false; }; 


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

 dropZone[0].ondrop = function(event) { event.preventDefault(); dropZone.removeClass('hover'); dropZone.addClass('drop'); }; 


рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдкрд░ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдХреЛ рдСрдирд░ тАЛтАЛрд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 var file = event.dataTransfer.files[0]; if (file.size > maxFileSize) { dropZone.text('  !'); dropZone.addClass('error'); return false; } 


рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ AJAX рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред AJAX рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо XMLHttpRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо XMLHttpRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рджреЛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдЧрддрд┐ рджрд┐рдЦрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рд╣рдо рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ upload.php рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред

 var xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', uploadProgress, false); xhr.onreadystatechange = stateChange; xhr.open('POST', '/upload.php'); xhr.setRequestHeader('X-FILE-NAME', file.name); xhr.send(file); 


рдЕрдм рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдЧрддрд┐ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкрд░рд┐рдгрд╛рдо рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред UploadProgress рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЧрдгрд┐рдд рд╣реИред

 function uploadProgress(event) { var percent = parseInt(event.loaded / event.total * 100); dropZone.text(': ' + percent + '%'); } 


рд╕реНрдЯреЗрдЯрдЪреЗрдВрдЬ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмреВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред рд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рдХреЛрдб "200" рд╣реИ, рдпрджрд┐ рдХреЛрдб рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред

 function stateChange(event) { if (event.target.readyState == 4) { if (event.target.status == 200) { dropZone.text('  !'); } else { dropZone.text(' !'); dropZone.addClass('error'); } } } 


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рдЧ рдХреА рд╡рд░реНрддрдиреА рдкреВрд░реА рд╣реИред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб


рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдмрдЪрд╛рдПрдЧрд╛ред рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ, рдореИрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ PHP рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВред

 <?php $uploaddir = getcwd().DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR; $uploadfile = $uploaddir.basename($_FILES['file']['name']); move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile); ?> 


рдпрд╣ рд╕рдм, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред

рдЖрдк рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рд▓реЗрдЦ рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрд╢реЛрдзрди: рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдиреЗрдЯрд┐рд╡ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб

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


All Articles