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

软件解压后如何安装(安卓解压缩软件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 模型加载的时候能够获取得到模型所需要的图片资源。

    推荐阅读
  • 云南省的气候特点(云南省的气候特点是什么)

    云南省的气候特点云南气候基本属于亚热带高原季风型,立体气候特点显著,类型众多、年温差小、日温差大、干湿季节分明、气温随地势高低垂直变化异常明显。滇西北属寒带型气候,长冬无夏,春秋较短;滇东、滇中属温带型气候,四季如春,遇雨成冬;滇南、滇西南属低热河谷区,有一部分在北回归线以南,进入热带范围,长夏无冬,一雨成秋。同日早晚较凉,中午较热,尤其是冬、春两季,日温差可达12℃~20℃。

  • 济南2022中小学教师资格面试退费申请截止什么时候?

    答:退费申请截止时间为5月20日24:00。接教育部教育考试院通知,受新冠肺炎疫情影响或因居住在有中高风险区的地区无法参加2022年5月中小学教师资格考试(面试)的考生,可申请退费。经教育部教育考试院核准退费的考生,其报名费将按原渠道全额退回,其通过的笔试科目合格成绩有效期同时自动延长半年,退费时间约为1-2个月,请务必保持原支付渠道畅通。

  • 前端javascript基础(干货前端开发中)

    前端开发中会遇到很多JS插件,在此为大家举例了一些,也是经常在项目中所应用到的,希望对大家有所帮助吧!也欢迎大家在下方热烈的留言。一.弹出层二.音频视频三.表单四.动画切版qieban(.cn)

  • 用星星纸自制手帐胶带(豆瓣日记:DIY)

    本文作者“peachbaby”,现居北京,目前已发表了65篇原创文字,至今活跃在豆瓣社区。下载豆瓣App搜索用户“peachbaby”关注Ta。这种方法做出的烫金是不会掉的哦黑色胶带、背景印章、离型纸、浮水印台、凸粉、热熔枪我试了好几种颜色的凸粉,效果都不错~各种图案的胶带、车票印章、油性速干印台、白色不干胶纸、剪刀可以尝试各种不同的花纹~我和朋友的手帐书上架啦~欢迎关注!

  • 兔肝煲粥(兔肝煲粥应该怎么做)

    我们一起去了解并探讨一下这个问题吧!兔肝煲粥兔肝煲粥是兔肝为主料制作的药膳。每次用兔肝洗净,大米适量。做法:大米洗净,浸泡30分钟。将足够量的水倒入锅中,加入大米煮沸,加入兔肝和食用油煮沸。再改小火熬煮成粥。食用时加盐调味即可。适用于肝肾虚之视力减退,肝虚头晕目眩,小儿角膜软化症等。

  • 上班族饮食应注意什么(上班族饮食应注意啥)

    上班族饮食应注意什么三餐定时研究显示,过了晚上8点之后,身体分泌的醣类物质越来越少,以至于消化系统分解食物的速度和效率也会逐渐降低。水果和纤维含量高的食物能帮助肠胃蠕动,有助于消化,可以在晚上食用。饭后适量运动饭后半小时适量运动能避免脂肪的囤积,尤其对于办公室女性来说,长时间伏案工作,腰腹部脂肪特别容易存积,所以午饭之后不能马上坐下来工作。

  • 顶流可以维持几年(怎么糊成了这样)

    继仝卓高考作弊翻车之后。2008年8月开播的《天天向上》,很快就冲进全国收视前三,被评为年度最佳节目。在周五晚七点半这个黄金时段播放,也足以证明了它在湖南台的地位。都是该话题范畴里的重量级人物,或者有着国民热度的典型代表。大量涌现的新形式节目虽然火爆,但始终没法撼动其内地综艺第一的位置。欧弟则是第二主持,负责助攻。这就是团队优先于个人的体现。例如采访机组人员的这一集,机长提醒大家坐飞机要注意保管财物。

  • 石菖蒲的功效与作用(石菖蒲的好处有哪些)

    石菖蒲的功效与作用祛痰开窍:石菖蒲可以化湿浊,它的气味芳香,也具有窍祛痰湿的功效,适用于清阳不升而引起的神识不清、耳聋目昏和精神迟钝等症状。临床上对于精神病患者有镇静和催眠的作用。

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

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

  • 初音未来是哪个动漫的(初音未来哪首歌好听)

    初音未来是哪个动漫的初音未来并不是出自动漫,初音未来是CRYPTONFUTUREMEDIA以Yamaha的VOCALOID2语音合成引擎为基础开发贩售的虚拟女性歌手软件。由声优藤田咲提供原声。初音未来3首比较好听的歌:①《恋爱裁判》是主要由40mP制作的VOCALOID歌曲,发表在日本niconico动画网。目前已经是传说级歌曲。②《深海少女》是比较前早的歌了,也是不少人的入坑曲。③《胧月》是一首平和恬静的曲子。适合在一个月色朦胧的晚上出去散步听。歌词很美,很有诗意,旋律更是没的说。