赞
踩
2、Blob
Blob(Binary Large Object)对象代表了一段二进制数据,提供了一系列操作接口。(以二进制形式保存的较大的对象)比如通过new Blob()创建的对象就是Blob对象.又比如,在XMLHttpRequest里,如果指定responseType为blob,那么得到的返回值也是一个blob对象.
2.1 生成Blob对象
生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对已有的Blob对象使用slice()方法切出一段。
(1)Blob构造函数
var blob = new Blob(data, type)
Blob构造函数接受两个参数:
参数data是一组数据,所以必须是数组,即使只有一个字符串也必须用数组装起来.
参数type是对这一Blob对象的配置属性,目前也只有一个type也就是相关的MIME需要设置 type的值:
‘text/csv,charset=UTF-8’ 设置为csv格式,并设置编码为UTF-8
‘text/html’ 设置成html格式
注意:任何浏览器支持的类型都可以这么用
var blob = new Blob(['我是Blob'],{type: 'text/html'});
2.2 属性
blob.size //Blob大小(以字节为单位)
blob.type //Blob的MIME类型,如果是未知,则是“ ”(空字符串)
2.3 slice()
slice()返回一个新的Blob对象,包含了源Blob对象中指定范围内的数据。
blob.slice(
optional long long start,
optional long long end,
optional DOMString contentType };
参数说明:
start 可选,开始索引,可以为负数,语法类似于数组的slice方法.默认值为0.
end 可选,结束索引,可以为负数,语法类似于数组的slice方法.默认值为最后一个索引.
contentType可选 ,新的Blob对象的MIME类型,这个值将会成为新的Blob对象的type属性的值,默认为一个空字符串.
2.4 Blob的使用
使用Blob最简单的方法就是创建一个URL来指向Blob:
<a download="data.txt" id="getData">下载</a>
var data= 'Hello world!';
var blob = new Blob([data], {
type: 'text/html,charset=UTF-8'
});
window.URL = window.URL || window.webkitURL;
document.querySelector("#getData").href = URL.createObjectURL(blob);
上面的代码将Blob URL赋值给a,点击后提示下载文本文件data.txt,文件内容为“Hello World”。
2.5 URL.createObjectURL()
objectURL = URL.createObjectURL(blob);
使用URL.createObjectURL()函数可以创建一个Blob URL,参数blob是用来创建URL的File对象或者Blob对象,返回值格式是:blob://URL。
注意:在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法传入创建的URL为参数,用来释放它。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。
2.6 乱码问题
当数据中包含汉字时,导出的文件可能会出现乱码,不过我们可以这样解决:
var data = "\ufeff" + "汉字";
一般人我不告诉他:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>front_end_fan前端博客</title>
<style>
a{
padding: 5px 12px;
background: #18B7FA;
border-radius: 5px;
color: #fff;
font-weight: bold;
font-size: 14px;
}
pre{
display: inline-block;
padding: 10px;
border: 5px solid #18B7FA;
background: #c4e3f3;
color:#990000;
font-weight: bold;
}
</style>
</head>
<body>
<p>例如下面代码:</p>
<pre><code> div.front_end_fan {
position: absolute; top: 50px; left: 50px;
-webkit-animation: clockwise 2.5s linear infinite; animation: clockwise 2.5s linear infinite ;
transform-origin: 70px 70px;
}
.front_end_fan em {
display: block;
width: 40px; height: 40px;
background: red;
color:000;
-webkit-animation: counter-clockwise 2.5s linear infinite; animation: counter-clockwise 2.5s linear infinite ;
}
@-webkit-keyframes clockwise{
0% { -webkit-transform: rotate(0deg) ; }
100%{ -webkit-transform: rotate(360deg); }
}
@keyframes clockwise {
0% { transform: rotate(0deg) ; }
100%{ transform: rotate(360deg); }
}
@-webkit-keyframes counter-clockwise {
0% { -webkit-transform: rotate(360deg) ; }
100%{ -webkit-transform: rotate(0deg); }
}
@keyframes counter-clockwise {
0% { transform: rotate(360deg) ; }
100%{ transform: rotate(0deg); }
}
<div class="front_end_fan">
<em>front_end_fan</em>
</div>
</code></pre>
<textarea name="" id="preid" style="display: none">
<style>
div.front_end_fan {
position: absolute; top: 50px; left: 50px;
-webkit-animation: clockwise 2.5s linear infinite; animation: clockwise 2.5s linear infinite ;
transform-origin: 70px 70px;
}
.front_end_fan em {
display: block;
width: 40px; height: 40px;
background: red;
color:#000;
-webkit-animation: counter-clockwise 2.5s linear infinite; animation: counter-clockwise 2.5s linear infinite ;
}
@-webkit-keyframes clockwise{
0% { -webkit-transform: rotate(0deg) ; }
100%{ -webkit-transform: rotate(360deg); }
}
@keyframes clockwise {
0% { transform: rotate(0deg) ; }
100%{ transform: rotate(360deg); }
}
@-webkit-keyframes counter-clockwise {
0% { -webkit-transform: rotate(360deg) ; }
100%{ -webkit-transform: rotate(0deg); }
}
@keyframes counter-clockwise {
0% { transform: rotate(360deg) ; }
100%{ transform: rotate(0deg); }
}
</style>
<div class="front_end_fan">
<em>front_end_fan</em>
</div>
</textarea>
<span class="seebtn" id="btn-run"><a>案例效果预览</a></span>
<script>
var btn =document.getElementById("btn-run");
btn.onclick = function() {
var iframe = document.createElement('iframe');
iframe.setAttribute('style', 'width:400px;max-width:68%;max-height:300px;height:38vh;position:fixed;border:1px solid;outline:9999px solid rgba(0,0,0,.6);top:0;right:0;left:0;bottom:0;margin:auto;overflow:hidden;background:#fff');
iframe.src = URL.createObjectURL(new Blob([document.getElementById('preid').value],{"type":"text/html"}));
document.codeIframe=iframe;
document.body.appendChild(document.codeIframe);
};
document.body.addEventListener('mouseup', function() {
if (document.codeIframe){
document.body.removeChild(document.codeIframe);
document.codeIframe=null;
}
});
</script>
</body>
</html>
(注:可直接复制代码查看效果)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。