方法名 |
參數 |
描述 |
---|
abort |
none |
中斷讀取 |
readAsBinaryString |
file(blob) |
將文件讀取爲二進制碼 |
readAsDataURL |
file(blob) |
將文件讀取爲 DataURL |
readAsText |
file, (blob) |
將文件讀取爲文本 |
事件 |
描述 |
---|
onabort |
中斷時觸發 |
onerror |
出錯時觸發 |
onload |
文件讀取成功完成時觸發 |
onloadend |
讀取完成觸發,無論成功或失敗 |
onloadstart |
讀取開始時觸發 |
onprogress |
讀取中 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>fileReader</title>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<style lang="">
.upload {
width: 200px;
height: 50px;
line-height: 50px;
text-align: center;
position: relative;
background-color: orange;
}
.file {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
}
.outbox {
position: relative;
display: inline-block;
}
.outbox img {
width: 200px;
height: 200px;
}
.delete {
position: absolute;
width: 20px;
height: 20px;
top: 0;
right: 0;
background: url(https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1381865013,3042801585&fm=27&gp=0.jpg) center no-repeat;
background-size: 100% 100%;
}
</style>
</head>
<body>
<div class="upload">上傳
<input type="file" accept="image/*" multiple class="file" id="imgfile">
</div>
<div id="previewImg"></div>
<button id="btn">提交</button>
<script>
var input = document.getElementById("imgfile");
var preview = document.getElementById("previewImg");
var urlArr = [];
//檢測瀏覽器是否支持FileReader
if (typeof(FileReader) === 'undefined') {
result.innerHTML = "抱歉,你的瀏覽器不支持 FileReader,請使用現代瀏覽器操作!";
input.setAttribute('disabled', 'disabled');
} else {
//開啓監聽
input.addEventListener('change', readFile, false);
}
function readFile() {
var files = this.files;
for (var i = 0; i < files.length; i++) {
//限定上傳文件的類型,判斷是否是圖片類型
(function() {
var temp = i;
if (!/image\/\w+/.test(files[i].type)) {
return false;
}
var reader = new FileReader();
reader.readAsDataURL(files[i]);
reader.onload = function(e) {
compress(this.result, temp);
};
})()
}
}
function compress(res, index) {
var img = new Image();
var maxHeight = 300; //用來設置壓縮比例
img.onload = function() { //要先確保圖片完整獲取到,這是個異步事件
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
if (img.height > maxHeight) {
img.width *= maxHeight / img.height;
img.height = maxHeight;
}
canvas.height = img.height;
canvas.width = img.width;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0, canvas.width, canvas.height); //將圖片繪製到canvas中
var dataUrl = canvas.toDataURL('image/jpg', 1); //轉換圖片爲dataURL(圖片格式,圖片質量)
var div = document.createElement('div');
var span = document.createElement('span');
div.setAttribute('class', 'outbox');
span.setAttribute('class', 'delete');
span.setAttribute('data-value', index++);
var img1 = document.createElement('img');
img1.src = dataUrl; //把得到的base64賦值到img標籤顯示
div.appendChild(img1);
div.appendChild(span);
preview.appendChild(div);
urlArr.push(dataUrl);
}
img.src = res;
}
//刪除圖片操作
$('#previewImg').on('click', 'span', function() {
urlArr.splice($(this).attr('data-value'), 1);
var html = '';
for (var j = 0; j < urlArr.length; j++) {
html += "<div class = 'outbox'><img src=" + urlArr[j] + "><span class='delete' data-value=" + j +
"></span></div>";
}
$('#previewImg').html(html);
})
$('#btn').click(function() {
console.log(urlArr);
})
</script>
</body>
</html>