项目中需要根据数据用threejs渲染模型,这个模型并不是已经存在的模型,而是实时画出来的。
之前是uniapp做的app都是OK的,也不卡顿很流畅(用的是renderjs),这次考虑到硬件升级,软件部分就考虑换成微信小程序。但是没有想到遇到蛮多问题。
1.uniapp微信小程序中使用threejs,渲染的模型转动的时候会很卡。
使用了three-platformize 和 threejs-miniprogram 都还是无效,大模型依然卡顿 放弃这个方案
2.在微信小程序中使用webview,内嵌外网。在外网的页面中使用threejs渲染模型,最终大模型渲染成功,一点都不卡顿。 但是项目中还碰到如下一些问题,记录一下: 1)传参问题 使用了src带参数。但是src的地址后面得跟上/#/ 外网那边使用vue项目,在onLoad(option)的option中获得参数
2)外网配置: manifest.json->web 配置的路由模式写hash, 运行的基础路径写 ./
3.微信小程序与webview 网页在项目中想实现实时交互,但是感觉行不通,因为似乎只有如下几种,并不能像在一个app中那样实时交互。
webview h5页面->小程序
方式一:
webview的h5网页向微信小程序传值,需先引入JSSDK: https://res.wx.qq.com/open/js/jweixin-1.6.0.js
通过wx.miniProgram.postMessage api 向小程序传值wx.miniProgram.postMessage({ data: {foo: 'bar'} })
小程序端通过 绑定message 接受H5页面传过来的值 e.detail = { data },data是多次 postMessage 的参数组成的数组
<web-view src="" @message="receiveMessage"></web-view>
receiveMessage(e){
console.log(e.detail)//接收H5传过来的数据
}
问题:但是得注意得在特定时机(小程序后退、组件销毁、分享)触发组件的 message 事件,只能这些特定时机,基本宣布postMessage没用!
方式二:利用页面跳转带参 navigateTo 、navigationBack、switchTab、reLaunch、redirectTo H5端:
function handleClick(e){
let id = e.target.dataset.id
let url = `/pages/detail/detail?id=${id}`;
wx.miniProgram.navigateTo({
url,
});
}
小程序端:
onLoad: function (options) {
console.log(options.id)//接收H5传过来的数据
}
问题:url 数据量有限,且需要打开界面
小程序->webview h5页面 传值: 如果是简单得传参那么可以通过 src?arg=参数 的方式给h5页面传参, h5页面在onLoad的option中获取对应的参数 但是如果是交互只看到这种方式: 修改web-view的src属性 h5页面监听hash值变化:
window.onhashchange=function(){
alert('hash值改变')
console.log(window.location.hash)//获取当前hash值
}
看来微信小程序和webview h5页面的实时交互是不可能的了,尴尬~~~