可视化前端开发对技术的要求

257 阅读3分钟

前端工程师的职位我是觉得真心不错的,但有的前端工程师野心很大呀,不甘于只写页面代码,还要往更好的方向发展,比如可视化方向。3D可视化已经被越来越多人、企业了解和应用起来。那你知道对于可视化前端开发有什么样的技术要求吗?其实不难。一切都借助于平台开发,thingjs平台简化webgl、封装threejs,只需要前端有一定的开发经验,熟练掌握Javascript语言就行啦~简单拖拽,写一些代码就可以实现3D可视化应用开发。


                        thingjs-面向物联网的3D可视化开发平台

/**

* 说明:

* 自定义层级切换效果 例如

* 进入建筑层级摊开楼层

* 进入楼层层级更换背景图 等

*

* 操作:

* 关闭自定义层级控制时 层级切换执行系统内置的响应

* 开启自定义层级控制时 层级切换执行自定义的效果

*

* 难度:★★★★☆

* 预备知识:场景层级、层级切换、事件(注册、暂停、恢复、卸载)

*/

var app = new THING.App({

url: 'https://www.thingjs.com/static/models/storehouse',

skyBox: 'Night'

});

// 初始化完成后开启场景层级

var campus;

app.on('load', function (ev) {

campus = ev.campus;

// 将层级切换到园区 开启场景层级

app.level.change(ev.campus);

createWidget();

});

function createWidget() {

// 界面组件

var panel = new THING.widget.Panel();

var customLevelControl = panel.addBoolean({ 'isEnabled': false }, 'isEnabled').caption('自定义层级控制');

customLevelControl.on("change", function (ev) {

app.level.change(campus);

var isEnabled = ev;

if (isEnabled) {

console.log('启用自定义层级控制');

enableCustomLevelChange();

}

else {

console.log('恢复默认层级控制');

disableCustomLevelChange();

}

});

}

function enableCustomLevelChange() {

// 暂停默认退出园区行为

app.pauseEvent(THING.EventType.LeaveLevel, '.Campus', THING.EventTag.LevelSceneOperations);

// 进入建筑摊开楼层

app.on(THING.EventType.EnterLevel, '.Building', function (ev) {

var previous = ev.previous;

console.log('从' + previous.type + '进入建筑');

ev.current.expandFloors({

'time': 1000,

'complete': function () {

console.log('ExpandFloor complete ');

}

});

}, 'customEnterBuildingOperations');

// 进入建筑保留天空盒

app.pauseEvent(THING.EventType.EnterLevel, '.Building', THING.EventTag.LevelSetBackground);

// 修改进入建筑层级选择设置

app.on(THING.EventType.EnterLevel, '.Building', function (ev) {

var curBuilding = ev.current;

app.picker.pickedResultFunc = function (object) {

var parents = object.parents;

for (var i = 0; i < parents.length; i++) {

var parent = parents[i];

// 如果被Pick物体的父亲是当前层级(Building)就返回被Pick的物体

if (parent == curBuilding) {

return object;

}

if (curBuilding.children.includes(parent)) {

// return parent;

return object;

}

}

}

}, 'customLevelPickedResultFunc');

// 暂停建筑层级的默认选择行为

app.pauseEvent(THING.EventType.EnterLevel, '.Building', THING.EventTag.LevelPickedResultFunc);

// 退出建筑关闭摊开的楼层

app.on(THING.EventType.LeaveLevel, '.Building', function (ev) {

var current = ev.current;

console.log('退出建筑,进入' + current.type);

ev.object.unexpandFloors({

'time': 500,

'complete': function () {

console.log('Unexpand complete ');

}

});

}, 'customLeaveBuildingOperations');

// 进入楼层设置背景

app.on(THING.EventType.EnterLevel, '.Floor', function (ev) {

var previous = ev.previous;

console.log('从' + previous.type + '进入楼层');

if (previous instanceof THING.Building) {

// 从建筑进入楼层时

app.background = '/uploads/wechat/emhhbmd4aWFuZw==/file/img/bg_grid.png';

}

}, 'setFloorBackground');

app.pauseEvent(THING.EventType.EnterLevel, '.Floor', THING.EventTag.LevelSetBackground);

// 退出楼层设置背景

app.on(THING.EventType.LeaveLevel, '.Floor', function (ev) {

var current = ev.current;

console.log('退出楼层,进入' + current.type);

if (current instanceof THING.Building) {

// 从楼层退出到建筑时

app.background = null;

app.skyBox = "Night";

}

}, 'customLeaveFloorOperations');

// 修改进入层级场景响应

// * @property {Object} ev 进入物体层级的辅助数据

// * @property {THING.BaseObject} ev.object 当前层级

// * @property {THING.BaseObject} ev.current 当前层级

// * @property {THING.BaseObject} ev.previous 上一层级

app.on(THING.EventType.EnterLevel, '.Thing', function (ev) {

var object = ev.object;

// 其他物体渐隐

var things = object.brothers.query('.Thing');

things.fadeOut();

// 尝试播放动画

if (object.animationNames.length) {

object.playAnimation({

name: object.animationNames[0],

});

}

}, 'customEnterThingOperations');

// 停止进入物体层级的默认行为

app.pauseEvent(THING.EventType.EnterLevel, '.Thing', THING.EventTag.LevelSceneOperations);

app.on(THING.EventType.LeaveLevel, '.Thing', function (ev) {

var object = ev.object;

// 其他物体渐现

var things = object.brothers.query('.Thing');

things.fadeIn();

// 反播动画

if (object.animationNames.length) {

object.playAnimation({

name: object.animationNames[0],

reverse: true

});

}

}, 'customLeaveThingOperations');

}

function disableCustomLevelChange() {

app.resumeEvent(THING.EventType.LeaveLevel, '.Campus', THING.EventTag.LevelSceneOperations);

app.resumeEvent(THING.EventType.EnterLevel, '.Building', THING.EventTag.LevelSetBackground);

app.resumeEvent(THING.EventType.EnterLevel, '.Building', THING.EventTag.LevelPickedResultFunc);

app.resumeEvent(THING.EventType.EnterLevel, '.Floor', THING.EventTag.LevelSetBackground);

app.resumeEvent(THING.EventType.EnterLevel, '.Thing', THING.EventTag.LevelSceneOperations);

app.off(THING.EventType.EnterLevel, '.Building', 'customEnterBuildingOperations');

app.off(THING.EventType.EnterLevel, '.Building', 'customLevelPickedResultFunc');

app.off(THING.EventType.LeaveLevel, '.Building', 'customLeaveBuildingOperations');

app.off(THING.EventType.EnterLevel, '.Floor', 'setFloorBackground');

app.off(THING.EventType.LeaveLevel, '.Floor', 'customLeaveFloorOperations');

app.off(THING.EventType.EnterLevel, '.Thing', 'customEnterThingOperations');

app.off(THING.EventType.LeaveLevel, '.Thing', 'customLeaveThingOperations');

var curLevel = app.level.current;

app.background = 'rgb(144,144,144)';

if (curLevel instanceof THING.Building) {

curLevel.unexpandFloors({

'time': 500,

'complete': function () {

console.log('Unexpand complete ');

}

});

}

}

现在你了解了吗?3D可视化应用开发对于前端工程师的要求真心不高,只要你静下心来研究开发平台,多看看教程就能行,建议大家试一试~