分享
查看: 4800|回复: 3

[分享] 使用Iframe将ThingJS项目嵌入到我们的前端页面

[复制链接]

使用Iframe将ThingJS项目嵌入到我们的前端页面

发表于 2020-8-5 11:23:26 来自 分享 阅读模式 倒序浏览
zzv_icon4800 zzr_icon3 查看全部

在使用ThingJS制作物联网可视化项目时,怎么去通过Iframe将ThingJS嵌入到我们的项目中去的呢?或者说,iframe嵌入后,怎么去写脚本进行交互呢?本文将写一个简单的示例告诉大家,如何在自己项目中去控制ThingJS项目,达到交互的功能。

ThingJS官方示例中有许多的功能代码,在这里就不为大家一一讲解,直接上代码:

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>ThingJS的 Iframe演示</title>

</head>

<body>

    <div width="800px">
        <button style="position: absolute;top: 15px;left: 15px;width: 75px;" onclick="flyToCar()">飞到小车</button>
        <button style="position: absolute;top: 45px;left: 15px;width: 75px;"
            onclick="flyToBack()">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</button>
        <iframe id="testMsg" style="width: 600px;height: 400px;"
            src='https://www.thingjs.com/s/aa25e09eae2f73e6ce080d73?params=105b0f77fd24654d4eebc434e9'></iframe>

    </div>
    <script>
        function flyToCar() {
            var a = document.getElementById("testMsg");
            var msg = {
                funcName: 'test'
            }
            a.contentWindow.postMessage(msg"*");
        }

        function flyToBack() {
            var a = document.getElementById("testMsg");
            var msg = {
                funcName: 'test2',
                param: "2"
            }
            a.contentWindow.postMessage(msg"*");
        }
    </script>
</body>

</html>

这里面,我们要注意的是,我们要调用什么方法,就在msg中的方法名参数后面写上要被调用的方法,在ThingJS中我们接收的时候要注意这边写的是funcName和param,那么我们在ThingJS中接收数据的时候也是要通过XXX.funcName或XXX.param来接收,这个虽然是基础知识,但是也不要在这里出错哟~,话不多说,上ThingJS中的代码:

var app = new THING.App({
url: 'https://www.thingjs.com/static/models/storehouse'     // 场景地址
});

app.on('load', function (ev) {
var campus = ev.campus;
// 开启系统层级
app.level.change(campus);
});

app.on(THING.EventType.LevelChange, function (ev) {
var obj = ev.object;
var name = obj.name;
var type = obj.type;
var id = obj.id;
var info = "进入 " + type + " (" + name + ")";
// 调用 用户主页面的 upDateInfo 方法
callFuncInMain('upDataInfo', { info, id });
})

function callFuncInMain(funcName, data) {
var message = {
'funcName': funcName // 所要调用父页面里的函数名
// 'param': data
}
// 向父窗体(用户主页面)发送消息
// 第一个参数是具体的信息内容,
// 第二个参数是接收消息的窗口的源(origin),即"协议 + 域名 + 端口"。也可以设为*,表示不限制域名,向所有窗口发送
window.parent.postMessage(message, '*');
}

function changeLevel(id) {
var obj = app.query('#' + id)[0];
if (obj) {
app.level.change(obj);
}
}
// 监听用户页面传回的数据 并调用 ThingJS 页面方法
window.addEventListener('message', function (e) {
var data = e.data;
var funcName = data.funcName;
var param = data.param;
// 调用 ThingJS 页面方法
window[funcName](param);
});

function test() {
var car = app.query('car01')[0];
app.camera.flyTo({
object: car,
xAngle: 0, // 绕物体自身X轴旋转角度
yAngle: 0, // 绕物体自身Y轴旋转角度
radiusFactor: 2, // 物体包围盒半径的倍数
time: 2 * 1000,
complete: function () {
console.log("飞行结束");
}
});
}

function test2(obj) {
app.camera.flyTo({
        position: [50.260000000000005,35.129000000000005,59.32699999999999],
        target: [8.0, -2.0, 4.0],
        time: obj*1000,
        complete: function () {
            console.log('飞行结束')
        }
    });
}


大家有兴趣也可以自行尝试使用Iframe的方式将您自己的ThingJS项目嵌入到您自己的页面中去呢~

avatar

4

主题

22

帖子

92

积分

注册会员

Rank: 2

积分
92
67552 发表于 2021-3-5 17:48:34 显示全部楼层
优秀,这个确实是项目里要用的
avatar

4

主题

22

帖子

92

积分

注册会员

Rank: 2

积分
92
67552 发表于 2021-3-5 17:49:09 显示全部楼层
使用Iframe将ThingJS项目嵌入到我们的前端页面使用Iframe将ThingJS项目嵌入到我们的前端页面使用Iframe将ThingJS项目嵌入到我们的前端页面
avatar

15

主题

77

帖子

633

积分

高级会员

Rank: 4

积分
633
秦秦秦秦凯旋 发表于 2021-3-5 18:00:12 显示全部楼层
厉害厉害,我去试试看使用Iframe将ThingJS项目嵌入到我们的前端页面
avatar
游客~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

130700ppkpl8x3t7tt1b1t