コードでは一番下に来ていますが、addEventListenerで、getElementById(‘files’).addEventListener(‘change’, handleFileSelect, false)として、handleFileSelectの関数を実行します。
handleFileSelectでは、new FileReader();とした後、errorHandlerとupdateProgressを実行します。
%は、Math.round((evt.loaded / evt.total) * 100);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <style> #progress_bar { margin: 10px 0; padding: 3px; border: 1px solid #000; font-size: 14px; clear: both; opacity: 0; -moz-transition: opacity ls linear; -o-transition: opacity ls linear; -webkit-transition: opacity ls linear; } #progress_bar.loading { opacity: 1.0; } #progress_bar .percent { background-color: #99ccff; height: auto; width: 0; } </style> <input type= "file" id= "files" name= "file" /> <button onclick= "abortRead();" >Cancel read</button> <div id= "progress_bar" ><div class = "percent" >0%</div></div> <script> var reader; var progress = document.querySelector( '.percent' ); function abortRead(){ reader.abort(); } function errorHandler(evt){ switch (evt.target.error.code){ case evt.target.error.NOT_FOUND_ERR: alert( 'File Not Found!' ); break ; case evt.target.error.NOT_READABLE_ERR: alert( 'File is not readable' ); break ; case evt.target.error.ABORT_ERR: break ; default : alert( 'An error occurred reading this file.' ); }; } function updateProgress(evt) { if (evt.lengthComputable) { var percentLoaded = Math. round ((evt.loaded / evt.total) * 100); if (percentLoaded < 100) { progress.style.width = percentLoaded + '%' ; progress.textContent = percentLoaded + '%' ; } } } function handleFileSelect(evt) { progress.style.width = '0%' ; progress.textContent = '0%' ; reader = new FileReader(); reader.onerror = errorHandler; reader.onprogress = updateProgress; reader.onabort = function (e) { alert( 'File read cancelled' ); }; reader.onloadstart = function (e) { document.getElementById( 'progress_bar' ).className = 'loading' ; }; reader.onload = function (e) { progress.style.width = '100%' ; progress.textContent = '100%' ; setTimeout( "document.getElementById('progress_bar').className='';" , 2000); } reader.readAsBinaryString(evt.target.files[0]); } document.getElementById( 'files' ).addEventListener( 'change' , handleFileSelect, false); </script> |
容量が小さいと、直ぐに100%となるので、最近downloadして重かったJavaの”spring-tool-suite-3.9.2.RELEASE-e4.7.2-win32-x86_64.zip”で試してみます。
いや、参りました。って感じですかね。参ってばっかりですが。。