Если вы хотите установить размер поверхности в зависимости от того, находится ли пользователь на мобильном или настольном компьютере, я бы подошел к этому, создав NativeModule
, чтобы проверить, является ли устройство мобильным на componentDidMount()
, и используя встроенную функцию resize()
для настройки размеров вашей поверхности. .
Сначала добавьте модуль в client.js
function init(bundle, parent, options = {}) {
const r360 = new ReactInstance(bundle, parent, {
nativeModules: [
//new module added here
ctx => new SurfaceModule(ctx),
],
fullScreen: true,
...options,
});
}
В вашем случае у вас уже есть vars для поверхностей, но удалите const, чтобы показать их вашему NativeModule
:
infoPanel = new Surface(1440, 850, Surface.SurfaceShape.Flat);
mapPanel = new Surface(850, 800, Surface.SurfaceShape.Flat);
cylinderSurface = new Surface(4096, 720, Surface.SurfaceShape.Cylinder);
Затем создайте свой класс SurfaceModule
и включите функцию для проверки мобильных устройств, а также добавьте ссылку на имя поверхностиcheckMobile(surfaceName)
.
import {Module} from 'react-360-web';
export default class SurfaceModule extends Module {
constructor(ctx) {
super('SurfaceModule');
this._ctx = ctx;
}
checkMobile(surfaceName, id) {
if (navigator.userAgent.match('add your match criteria here'))
{
let swidth = screen.width
let sheight = screen.height
surfaceName.resize(swidth, sheight);
this._ctx.invokeCallback(
id,
[swidth, sheight]
);
}
}
}
Наконец, в index.js запустите функцию для проверки и настройки размеров поверхности.
С этой настройкой вам нужно будет вызвать функцию для каждой поверхности, которую вы хотите проверить, или вы можете переработать, чтобы отправить несколько ссылок и выполнить if/switch
Вы также можете переместить вызов из componentDidMount()
в другую функцию.
import {
NativeModules
} from 'react-360';
const SurfaceModule = NativeModules.SurfaceModule;
componentDidMount() {
SurfaceModule.checkMobile((swidth, sheight) => {
console.log(swidth);
console.log(sheight);
});
}
РЕДАКТИРОВАТЬ: обновлена функция checkMobile() и index.js для включения обратного вызова.
person
Ottosan
schedule
11.12.2019