文学起点网
当前位置: 首页 文学百科

软件解压后如何安装(安卓解压缩软件app推荐)

时间:2023-05-28 作者: 小编 阅读量: 4 栏目名: 文学百科

JSZip是一款可以创建、读取、修改.zip文件的javaScript工具。在web应用中,免不了需要从web服务器中获取资源,如果可以将所有的资源都合并到一个.zip文件中,这时候只需要做一次请求,这样既减少了服务器的压力,同时也可以加快web应用的呈现速度。今天就来探讨下JSZip如何与HT拓扑应用结合。第二步、在html文件中引入JSZip和JSZipUtils库,接下来就是请求.zip文件,并对.zip文件做解析处理。

JSZip 是一款可以创建、读取、修改 .zip 文件的 javaScript 工具。在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这时候只需要做一次请求,这样既减少了服务器的压力,同时也可以加快 web 应用的呈现速度。

今天就来探讨下 JSZip 如何与 HT 拓扑应用结合。先来看看这期 Demo 的效果图:

第一步、需要将应用对相关资源打包成 .zip 文件,

这是我要压缩的文件列表,把响应的资源文件存放到对应的文件夹下,然后在 loadorder 文件中标明资源加载的顺序,loadorder 文件内容如下:

‘js/ht.js’,

‘js/ht-obj.js’,

‘js/ht-modeling.js’,

‘obj/equipment.mtl’,

‘obj/equipment.obj’,

‘image/equipment.jpg"’

在资源加载顺序中,要标明响应资源的相对于 .zip 文件的路径,这样方便在读取 .zip 文件时快速找到相应的资源文件。

第二步、在 html 文件中引入 JSZip 和 JSZipUtils 库,接下来就是请求 .zip 文件,并对 .zip 文件做解析处理。

JSZipUtils.getBinaryContent(‘res/ImportObj.zip’, function(err, data) {

if(err) {

throw err; // or handle err

}

var zip = new JSZip(data);

var loadorderStr = zip.file(‘loadorder’).asText(),

order;

eval(‘order = [‘ + loadorderStr + ‘]’);

var len = order.length,

image = {},

mtlStr = ”,

objStr = ”;

for(var i = 0; i < len; i++) {

var fileName = order[i];

if(fileName.indexOf(‘js/’) >= 0) {

var js = document.createElement(‘script’);

js.innerHTML = zip.file(fileName).asText();

document.getElementsByTagName(‘head’)[0].appendChild(js);

} else if(fileName.indexOf(‘image/’) >= 0) {

var buffer = zip.file(fileName).asArrayBuffer(),

str = _arrayBufferToBase64(buffer),

pIndex = fileName.indexOf(‘.’),

type = fileName.substr(pIndex + 1),

re = ‘data:image/’ + type + ‘;base64,’;

image[fileName] = re + str;

} else if(fileName.indexOf(‘obj/’) >= 0) {

var str = zip.file(fileName).asText();

if(fileName.indexOf(‘.mtl’) > 0) {

mtlStr = str;

} else if(fileName.indexOf(‘.obj’) > 0) {

objStr = str;

}

}

}

init(objStr, mtlStr, image);

});

首先通过 JSZipUtils 获取 .zip 文件,将获取到的文件内容通过 new JSZip(data) 方法加载到 zip 变量中,通过 zip.file(fileName) 读取 loadorder 文件内容,试用 eval 命令动态执行脚本,将文本内容转换为 js 变量 order,最后通过遍历 order 变量,将 js 资源动态引入到页面中。

在 .zip 文件中有包含图片文件,JSZip 只能获取到图片文件的 ArrayBuffer 数据,这时需要将 ArrayBuffer 转换为 Base64 才能够为浏览器所识别,所以这里定义了一个转换函数:_arrayBufferToBase64

function _arrayBufferToBase64( buffer ) {

var binary = ”;

var bytes = new Uint8Array( buffer );

var len = bytes.byteLength;

for (var i = 0; i < len; i++) {

binary += String.fromCharCode( bytes[ i ] );

}

return window.btoa( binary );

}

这次的案例中,有涉及到 3D 模型数据与 HT 3D 拓扑应用的结合,在 .zip 文件中的 obj 目录就是存放 3D 模型数据,在文件读取中,将 3D 模型数据以文本对形势读取出来存放到变量中,再将数据传递到 init 函数中,通过 ht.Default.parseObj() 方法将 3D 模型数据加载到 HT 中。

function init(objStr, mtlStr, image) {

dataModel = new ht.DataModel();

g3d = new ht.graph3d.Graph3dView(dataModel);

view = g3d.getView();

view.className = ‘main’;

document.body.appendChild(view);

window.addEventListener(‘resize’, function (e) {

g3d.invalidate();

}, false);

g3d.setEye([0, 500, 1000]);

g3d.setCenter([0, 200, 0]);

g3d.setGridVisible(true);

g3d.setGridColor(‘#74AADA’);

var param = {

shape3d: ‘E1’,

center: true,

cube: true

};

var modelMap = ht.Default.parseObj(objStr, mtlStr, param);

for(var model in modelMap) {

var map = modelMap[model],

i = map.image,

index = i.lastIndexOf(‘/’),

fileName = i.substr(index + 1),

rawS3 = map.rawS3;

for(var imgName in image) {

if(imgName.indexOf(fileName) >= 0) {

ht.Default.setImage(i, 256, 256, image[imgName]);

}

}

}

var node = new ht.Node();

node.s({

‘shape3d’: ‘E1’,

‘wf.visible’: ‘selected’,

‘wf.width’: 3,

‘wf.color’: ‘#F7F691’

});

node.s3(param.rawS3);

node.p3(0, param.rawS3[1]/2, 0);

dataModel.add(node);

}

上述是生成 3D 拓扑、3D 模型引入和引用 3D 模型创建拓扑节点的代码。其中那段 setImage 的代码需要特别注意,为什么我要大费周张的去判断 image 的文件名呢,那是因为在 mtl 3D 模型描述文件中有一个设置贴图的属性,该属性可以指定文件的绝对路径,也可以指定文件的相对路径,因为采用 JSZip 无法将 .zip 中的文件内容写回到本地目录中,所以只能将贴图属性对应的属性名称作为 HT 中的 image 名称设置到 HT 中,以便 HT 模型加载的时候能够获取得到模型所需要的图片资源。

    推荐阅读
  • 红叶石楠如何养(红叶石楠如何养护和浇水)

    红叶石楠其实是不错的观赏植物,叶片常绿好看,能够净化空气,加强家中的环境气氛。红叶石楠这种植物是四季常绿的品种。温度低于五度造成红叶石楠冻害死亡。冬季要室内室温养殖红叶石楠,夏季则要注重遮阴。

  • 开车应急必备工具(11种行车必备应急工具)

    应急工具是指在发生故障或者意外的情况下,辅助完成驾驶人处理这些问题的工具。那么为了让自己行车更安全也为了不让事情发生后束手无策究竟需要配备哪些应急工具呢?防患于未然这些工具您可一定要备齐!若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。

  • 忠县到龙岗大巴路线(忠县到主城区每天10台次客运班车开通)

    “昨天得到消息,在忠县可以坐客车回重庆,今天顺利上车了!”据忠县友联运输公司总经理刘平介绍,忠县汽车总站于2月7日开通忠县至重庆往返应急旅客运输,其余线路暂未开行。这次运输是由重庆交运集团负责组织所属企业执行,忠县确定每天10台次往返发放客运班车,确保急需往返和复工复产人员出行需求。乘客须提前半小时进站,经过身份等核查和体温检测。据了解,自忠县汽车站开通应急客运以来,累计运送旅客2000多人。

  • 水龙头防溅水技巧(家用水龙头防溅水小妙招)

    下面希望有你要的答案,我们一起来看看吧!先将气球套在水龙头的出水口上,然后用剪刀将气球的下面一部分剪掉,这样做之后我们在打开水龙头时,水流流经气球就会受到一定的缓冲作用,从而可以有效防止溅水。我们还可以使用胶套管或者丝袜来有效防止溅水,使用胶套管或丝袜的原理和气球相似,也是让水在流经这二者时受到缓冲的作用。

  • 九年级英语人教版unit 7单词朗读(7年级英语上册Unit9单词与录音)

    7年级英语上册Unit9单词与录音Unit9favorite['feivərit]adj.n.(=favourite)特别喜爱的(人或事物)subject['sʌbdʒikt,sʌb'dʒekt]n.学科;科目science['sai。

  • 2021孙秀梅家庭教育的责任与未来直播观看入口

    中国教育电视台一套将播出由著名家庭教育专家孙秀梅主讲的《家庭教育的责任与未来》教育专题节目,本节目对孩子的学习和成长都有重要的意义,请家长提前找到频道陪同孩子按时收看。直播/回放观看入口:点击此处进入直播主题:家庭教育的责任与未来主讲老师:孙秀梅节目时长:40分钟主要内容指导家长正确处理在教育孩子过程中遇到的问题

  • 早上去江边跑步好吗 早上在江边跑步好不好

    小贴士注意不要在空腹或者刚吃完饭后进行运动,容易导致肠胃不适。早上什么时候去跑步好一般是在7-9点左右较好。而一般到七点左右,太阳已经出来,植物进行了光合作用,空气质量会比较高,运动效果也会比较好。

  • 汨罗市居民医保缴费截止时间 湖南汨罗城乡医保报销地址

    2021年度汨罗市医保缴费截止时间为2020年12月31日缴费时间正常参(续)保缴费时间,为每年的9月1日至12月31日;12月31日前参保缴(续)费的,次年1月1日起享受城乡居民基本医疗保险待遇,缴费对象1.农村居民;2.城镇非从业居民;3.驻长在校大中专学生4.驻长职业高中、技校、中小学、幼儿园在册学生

  • 树葡萄和葡萄哪里不同 葡萄是树还是藤

    葡萄是很常见的一种水果,在日常生活中经常都能看到它的身影,可是很多朋友都不清楚树葡萄和葡萄哪里不同?首先品种区别,树葡萄是属于嘉宝果,并不是一种葡萄,就是成片生长在树干上面。其次味道区别,树葡萄味道有些独特,吃下去之后会很回味无穷,葡萄有些酸甜味,另外营养成分也有区别,树葡萄里面拥有很多的矿物质成分,葡萄里面的营养更丰富一些,不仅有矿物质成分,还有各种不同的氨基酸以及维生素等成分。

  • 葡萄的生长周期(葡萄生长最快的季节)

    葡萄因其美味可口而受到欢迎,因此大量的农户开始种植葡萄。因此,为了不影响后期成熟之后葡萄的品质,农户们就会开始修剪茎叶。当然,不同的养护条件会使葡萄的生长速度发生微妙的变化,接下来具体介绍。充足的光照能够给葡萄提供充足的营养,促进葡萄的生长速度。不过使用较为肥沃的沙壤土能提供给根系更加充足的营养,对加快葡萄的生长速度有很大的帮助。